Powershell: Zmienne globalne

28-Lut-2019

W skryptach PowerShell można korzystać ze zmiennych lokalnych (widocznych wewnątrz funkcji), zmiennych skryptu (widocznych w skrypcie) i zmiennych globalnych (widoczne wszędzie). Popatrz na taki przykład:

Jest tutaj funkcja, która wyświetla wartość zmiennej zdefiniowanej początkowo na poziomie skryptu. Pytanie, czy ta zmienna będzie widoczna dla funkcji i czy rzeczywiście uda się ją zmienić?

Oto wynik:

  • wewnątrz funkcji zmienna jest widoczna – to dobrze!
  • przypisanie wartości do zmiennej wewnątrz funkcji również nie zwraca żadnego błędu – to super!
  • Ale  kiedy funkcja się kończy, to zmienna ma starą wartość, i tak prawdę mówiąc, to też zazwyczaj jest oczekiwany pozytywny skutek

No ale czasami chcesz, żeby funkcja mogła zaktualizować zmienną z zewnątrz i żeby tak przypisana wartość została zachowana po zakończeniu funkcji. Co z tym zrobić? Otóż zmienne w PowerShell mają „obszar widoczności” – scope:

  • globalny – zmienna jest widoczna i może być aktualizowana przez każdy skrypt z rozwiązania (jeśli jest ich więcej), oraz jest widoczna i może być modyfikowana przez wszystkie funkcje (we wnętrzu tych funkcji)
  • skrypt – zmienna jest widoczna i może być modyfikowana przez skrypt oraz jest widoczna i może być modyfikowana przez wszystkie funkcje (we wnętrzu tych funkcji)
  • lokalny – domyślny dla funkcji – zmienne są widoczne i mogą modyfikowane tylko w danej funkcji

Oto jak można korzystać z tych scope:

Oto wynik:

Teraz zmienna globalna była widoczna wewnątrz i na zewnątrz funkcji  i mogła być zmieniana zarówno wewnątrz jak i na zewnątrz funkcji. Pełny sukces!

Więcej o zakresach zmiennych:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_scopes?view=powershell-6

Dodam jeszcze, że generalnie stosowanie zmiennych skryptowych i globalnych nie jest zalecane, ale często ten mechanizm pozwala znacznie uprościć logikę skryptu

 

 

 

 

 

 

 

 

Dodaj komentarz:

Autor: Rafał Kraik