W PowerShell, zakresowanie ma powstrzymywać obiekty (zmienne, aliasy, funkcje itp.) W skryptach przed wpływaniem na środowisko globalne. Wygląda na to, że działa dobrze w linii poleceń, ale nie w ISE.
Oto demonstracja w konsoli. Sprawdzam, $x
czy nie jest zdefiniowany w zasięgu globalnym, wyświetlam zawartość, ScopeTest.ps1
a następnie uruchamiam go, a na koniec sprawdzam, czy $x
jest zdefiniowany ponownie. Zgodnie z oczekiwaniami $x
jest tworzony i używany tylko w zakresie skryptu i nie utrzymuje się w środowisku globalnym po zakończeniu skryptu.
W ISE wydaje się, że działa, jeśli skrypt jest wywoływany za pomocą okna konsoli.
Jednak jeśli faktycznie użyję przycisku „Uruchom skrypt” lub F5, zmienne w skrypcie pozostaną po jego zakończeniu.
Może to utrudnić pisanie i rozwiązywanie problemów ze skryptami, jeśli skrypt zakłada, że uruchomi się z czystego środowiska (tj .: Wszelkie zmienne ustawione w skrypcie nie powinny już istnieć.) Dlaczego ISE zachowuje się w ten sposób?
Odpowiedź na to pytanie lekko porusza ten temat, wspominając o „pozyskiwaniu kropek”, ale mam nadzieję uzyskać bardziej szczegółowe wyjaśnienie. Ponadto, jeśli istnieje dokumentacja wyjaśniająca, dlaczego skrypt jest uruchamiany inaczej w ISE niż w konsoli, referencja byłaby również przyjemna.