about_Environment_Variables
Krótki opis
Opisuje sposób uzyskiwania dostępu do zmiennych środowiskowych i zarządzania nimi w programie PowerShell.
Zmienne środowiskowe przechowują dane używane przez system operacyjny i inne programy. Program PowerShell tworzy następujące zmienne środowiskowe:
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
Aby uzyskać pełne opisy tych zmiennych, zobacz zmienne środowiskowe programu PowerShell w tym artykule.
Długi opis
Program PowerShell może uzyskiwać dostęp do zmiennych środowiskowych i zarządzać nimi na dowolnej z obsługiwanych platform systemu operacyjnego. Dostawca środowiska programu PowerShell umożliwia pobieranie, dodawanie, zmienianie, czyszczenie i usuwanie zmiennych środowiskowych w bieżącej konsoli.
Zmienne środowiskowe, w przeciwieństwie do innych typów zmiennych w programie PowerShell, są zawsze przechowywane jako ciągi. W przeciwieństwie do innych zmiennych są one dziedziczone przez procesy podrzędne, takie jak lokalne zadania w tle i sesje, w których są uruchamiane elementy członkowskie modułu. Dzięki temu zmienne środowiskowe dobrze nadają się do przechowywania wartości, które są potrzebne zarówno w procesach nadrzędnych, jak i podrzędnych.
W systemie Windows zmienne środowiskowe można zdefiniować w trzech zakresach:
- Zakres maszyny (lub systemu)
- Zakres użytkownika
- Zakres procesu
Zakres procesu zawiera zmienne środowiskowe dostępne w bieżącym procesie lub sesji programu PowerShell. Ta lista zmiennych jest dziedziczona z procesu nadrzędnego i jest tworzona ze zmiennych w zakresach Komputer i Użytkownik .
Zmiana zmiennych środowiskowych w programie PowerShell wpływa tylko na bieżącą sesję. To zachowanie przypomina zachowanie set
polecenia w powłoce poleceń systemu Windows i setenv
w środowiskach opartych na systemie UNIX. Aby zmienić wartości w zakresach Komputera lub Użytkownika, należy użyć metod klasy System.Environment .
Aby wprowadzić zmiany w zmiennych o zakresie maszyny, musisz również mieć uprawnienia. Jeśli spróbujesz zmienić wartość bez wystarczających uprawnień, polecenie zakończy się niepowodzeniem, a program PowerShell wyświetli błąd.
Program PowerShell udostępnia kilka różnych metod używania zmiennych środowiskowych i zarządzania nimi.
- Składnia zmiennej
- Polecenia cmdlet dostawcy środowiska i elementu
- Klasa .NET System.Environment
Używanie składni zmiennej
Możesz wyświetlić i zmienić wartości zmiennych środowiskowych przy użyciu następującej składni:
$Env:<variable-name>
Aby na przykład wyświetlić wartość zmiennej środowiskowej WINDIR
:
$Env:windir
C:\Windows
W tej składni znak dolara ($
) wskazuje zmienną, a nazwa dysku (Env:
) wskazuje zmienną środowiskową, po której następuje nazwa zmiennej środowiskowej (windir
).
Możesz utworzyć i zaktualizować wartość zmiennych środowiskowych przy użyciu następującej składni:
$Env:<variable-name> = "<new-value>"
Aby na przykład utworzyć zmienną środowiskową Foo
:
$Env:Foo = 'An example'
Ponieważ zmienne środowiskowe są zawsze ciągami, można ich używać jak dowolna inna zmienna zawierająca ciąg. Na przykład:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
W programie PowerShell nie można ustawić zmiennej środowiskowej na pusty ciąg. Ustawienie zmiennej środowiskowej na $null
lub pusty ciąg usuwa ją z bieżącej sesji. Na przykład:
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
zwrócił błąd, ponieważ zmienna środowiskowa została usunięta.
Zobaczysz, że nie zwraca błędu, gdy używasz go w pustym ciągu:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
Aby uzyskać więcej informacji na temat zmiennych w programie PowerShell, zobacz about_Variables.
Używanie poleceń cmdlet dostawcy środowiska i elementu
Dostawca środowiska programu PowerShell udostępnia interfejs umożliwiający interakcję ze zmiennymi środowiskowymi w formacie przypominającym dysk systemu plików. Umożliwia pobieranie, dodawanie, zmienianie, czyszczenie i usuwanie zmiennych środowiskowych i wartości w programie PowerShell.
Aby na przykład utworzyć zmienną Foo
środowiskową z wartością Bar
:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
Możesz również skopiować zmienną środowiskową za pomocą Copy-Item
polecenia , ustawić wartość zmiennej środowiskowej za pomocą Set-Item
polecenia , wyświetlić listę zmiennych środowiskowych za pomocą Get-Item
polecenia i usunąć zmienną środowiskową za pomocą Remove-Item
polecenia .
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
Get-ChildItem
Użyj polecenia cmdlet, aby wyświetlić pełną listę zmiennych środowiskowych:
Get-ChildItem Env:
Aby uzyskać więcej informacji na temat zarządzania zmiennymi środowiskowymi przy użyciu dostawcy środowiska , zobacz about_Environment_Provider.
Używanie metod System.Environment
Klasa System.Environment udostępnia GetEnvironmentVariable()
metody i SetEnvironmentVariable()
umożliwiające pobieranie i modyfikowanie zmiennych środowiskowych.
Poniższy przykład tworzy nową zmienną środowiskową , Foo
z wartością Bar
, a następnie zwraca jej wartość.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Zmienną środowiskową można usunąć przy SetEnvironmentVariable()
użyciu metody, określając pusty ciąg dla wartości zmiennej. Aby na przykład usunąć zmienną środowiskową Foo
:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
Aby uzyskać więcej informacji na temat metod klasy System.Environment , zobacz Metody środowiskowe.
Tworzenie trwałych zmiennych środowiskowych w systemie Windows
W systemie Windows istnieją trzy metody wprowadzania trwałych zmian w zmiennej środowiskowej:
- Ustawianie ich w profilu
SetEnvironmentVariable()
Korzystanie z metody- Korzystanie z Panel sterowania systemowej
Ustawianie zmiennych środowiskowych w profilu
Każda zmienna środowiskowa dodana lub zmieniona w profilu programu PowerShell jest dostępna w dowolnej sesji, która ładuje profil. Ta metoda działa w przypadku dowolnej wersji programu PowerShell na dowolnej obsługiwanej platformie.
Aby na przykład utworzyć zmienną CompanyUri
środowiskową i zaktualizować Path
zmienną środowiskową w celu uwzględnienia C:\Tools
folderu, dodaj następujące wiersze do profilu programu PowerShell:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
Ścieżkę do profilu programu PowerShell można uzyskać za pomocą zmiennej automatycznej $PROFILE
. Aby uzyskać więcej informacji na temat profilów, zobacz about_Profiles.
Ustawianie zmiennych środowiskowych za pomocą polecenia SetEnvironmentVariable()
W systemie Windows można określić zakres metody SetEnvironmentVariable()
jako trzeci parametr, aby ustawić zmienną środowiskową w tym zakresie. Zakresy komputera i użytkownika są utrwalane poza bieżącym procesem, co umożliwia zapisanie nowej lub zmienionej zmiennej środowiskowej.
Aby na przykład zapisać nową zmienną środowiskową Foo
z wartością Bar
w zakresie maszyny:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Zmienną środowiskową można usunąć z zakresu użytkownika lub komputera, ustawiając wartość zmiennej na pusty ciąg.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Ustawianie zmiennych środowiskowych w Panel sterowania systemowej
W Panel sterowania systemowej można dodawać lub edytować istniejące zmienne środowiskowe w zakresach User and System (Machine). System Windows zapisuje te wartości w rejestrze, tak aby były utrwalane między sesjami i ponownymi uruchomieniami systemu.
Aby wprowadzić trwałą zmianę zmiennej środowiskowej w systemie Windows przy użyciu Panel sterowania systemowej:
- Otwórz Panel sterowania systemowej.
- Wybierz pozycję System.
- Wybierz pozycję Zaawansowane ustawienia systemowe.
- Przejdź do karty Zaawansowane .
- Wybierz pozycję Zmienne środowiskowe....
- Wprowadź zmiany.
Zmienne środowiskowe programu PowerShell
Funkcje programu PowerShell mogą używać zmiennych środowiskowych do przechowywania preferencji użytkownika. Te zmienne działają jak zmienne preferencji, ale są dziedziczone przez sesje podrzędne sesji, w których są tworzone. Aby uzyskać więcej informacji na temat zmiennych preferencji, zobacz about_Preference_Variables.
Zmienne środowiskowe, które przechowują preferencje, obejmują:
PSExecutionPolicyPreference
Przechowuje zestaw zasad wykonywania dla bieżącej sesji. Ta zmienna środowiskowa istnieje tylko wtedy, gdy ustawisz zasady wykonywania dla jednej sesji. Można to zrobić na dwa różne sposoby.
Uruchom sesję z wiersza polecenia przy użyciu parametru ExecutionPolicy , aby ustawić zasady wykonywania dla sesji.
Set-ExecutionPolicy
Użyj polecenia cmdlet . Użyj parametru Scope z wartościąProcess
.Ręcznie ustaw zmienną środowiskową. Zmiana wartości tej zmiennej zmienia zasady wykonywania bieżącego procesu.
Te informacje dotyczą tylko platformy Windows. Aby uzyskać więcej informacji, zobacz about_Execution_Policies.
PSModulePath
Zmienna
$env:PSModulePath
środowiskowa zawiera listę lokalizacji folderów, które są przeszukiwane w celu znalezienia modułów i zasobów.Domyślnie obowiązującą lokalizacją przypisaną do
$env:PSModulePath
:Lokalizacje dla całego systemu: te foldery zawierają moduły dostarczane za pomocą programu PowerShell. Moduły są przechowywane w
$PSHOME\Modules
lokalizacji. Jest to również lokalizacja, w której są zainstalowane moduły zarządzania systemem Windows.Moduły zainstalowane przez użytkownika: są to moduły zainstalowane przez użytkownika.
Install-Module
ma parametr Zakres, który umożliwia określenie, czy moduł jest zainstalowany dla bieżącego użytkownika, czy dla wszystkich użytkowników. Aby uzyskać więcej informacji, zobacz Install-Module (Instalowanie modułu).- W systemie Windows lokalizacja zakresu CurrentUser specyficznego dla użytkownika jest folderem
$HOME\Documents\PowerShell\Modules
. Lokalizacja zakresu AllUsers to$env:ProgramFiles\PowerShell\Modules
.
- W systemie Windows lokalizacja zakresu CurrentUser specyficznego dla użytkownika jest folderem
Ponadto programy instalacyjne, które instalują moduły w innych katalogach, takich jak katalog Program Files, mogą dołączać ich lokalizacje do wartości
$env:PSModulePath
.Aby uzyskać więcej informacji, zobacz about_PSModulePath.
PSModuleAnalysisCachePath
Program PowerShell zapewnia kontrolę nad plikiem używanym do buforowania danych dotyczących modułów i ich poleceń cmdlet. Pamięć podręczna jest odczytywana podczas uruchamiania podczas wyszukiwania polecenia i jest zapisywana w wątku w tle czasami po zaimportowaniu modułu.
Domyślną lokalizacją pamięci podręcznej jest:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
Domyślną nazwą pliku pamięci podręcznej jest
ModuleAnalysisCache
.Uwaga
Jeśli odnajdywanie poleceń nie działa poprawnie, na przykład funkcja IntelliSense wyświetla polecenia, które nie istnieją, możesz usunąć plik pamięci podręcznej. Pamięć podręczna zostanie ponownie utworzona przy następnym uruchomieniu programu PowerShell.
Aby zmienić domyślną lokalizację pamięci podręcznej, ustaw zmienną środowiskową przed uruchomieniem programu PowerShell. Wartość powinna nazwać pełną ścieżkę (w tym nazwę pliku), którą program PowerShell ma uprawnienia do tworzenia i zapisywania plików.
Zmiany tej zmiennej środowiskowej mają wpływ tylko na procesy podrzędne. Zapoznaj się z poprzednimi sekcjami, aby uzyskać informacje na temat tworzenia trwałych zmiennych środowiskowych.
Aby wyłączyć pamięć podręczną plików, ustaw tę wartość na nieprawidłową lokalizację, na przykład:
# `NUL` here is a special device on Windows that can't be written to $env:PSModuleAnalysisCachePath = 'NUL'
Spowoduje to ustawienie ścieżki do urządzenia NUL . Program PowerShell nie może zapisać w ścieżce, ale nie jest zwracany żaden błąd. Błędy zgłaszane za pomocą narzędzia tracer:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
PSDisableModuleAnalysisCacheCleanup
Podczas zapisywania pamięci podręcznej analizy modułu program PowerShell sprawdza moduły, które już nie istnieją, aby uniknąć niepotrzebnej dużej pamięci podręcznej. Czasami te testy nie są pożądane, w takim przypadku można je wyłączyć, ustawiając tę wartość zmiennej środowiskowej na
1
.Ustawienie tej zmiennej środowiskowej ma wpływ na kolejne zdarzenia oczyszczania w bieżącym procesie. Aby upewnić się, że czyszczenie jest wyłączone podczas uruchamiania, należy ustawić zmienną środowiskową przed uruchomieniem programu PowerShell. Zapoznaj się z poprzednimi sekcjami, aby uzyskać informacje na temat tworzenia trwałych zmiennych środowiskowych.
Inne zmienne środowiskowe używane przez program PowerShell
Informacje o ścieżce
PATH
Zmienna
$env:PATH
środowiskowa zawiera listę lokalizacji folderów, które system operacyjny wyszukuje pliki wykonywalne. W systemie Windows lista lokalizacji folderów jest oddzielona znakiem średnika (;
).PATHEXT
Zmienna
$env:PATHEXT
zawiera listę rozszerzeń plików, które system Windows uważa za pliki wykonywalne. Gdy plik skryptu z jednym z wymienionych rozszerzeń jest wykonywany z poziomu programu PowerShell, skrypt jest uruchamiany w bieżącej konsoli lub sesji terminalu. Jeśli rozszerzenie pliku nie znajduje się na liście, skrypt zostanie uruchomiony w nowej sesji konsoli.Aby upewnić się, że skrypty dla innego języka skryptów są uruchamiane w bieżącej sesji konsoli, dodaj rozszerzenie pliku używane przez język skryptów. Aby na przykład uruchomić skrypty języka Python w bieżącej konsoli, dodaj
.py
rozszerzenie do zmiennej środowiskowej. Aby system Windows obsługiwał.py
rozszerzenie jako plik wykonywalny, należy zarejestrować rozszerzenie pliku przy użyciuftype
poleceń iassoc
powłoki poleceń CMD. Program PowerShell nie ma bezpośredniej metody rejestrowania programu obsługi plików. Aby uzyskać więcej informacji, zobacz dokumentację polecenia ftype .Skrypty programu PowerShell zawsze są uruchamiane w bieżącej sesji konsoli. Nie musisz dodawać
.PS1
rozszerzenia.