about_Environment_Variables
Krótki opis
Opisuje sposób uzyskiwania dostępu do zmiennych środowiskowych i zarządzania nimi w programie PowerShell.
Długi opis
Zmienne środowiskowe przechowują dane używane przez system operacyjny i inne programy. Na przykład zmienna WINDIR
środowiskowa zawiera lokalizację katalogu instalacyjnego systemu Windows. Programy mogą wykonywać zapytania dotyczące wartości tej zmiennej, aby określić, gdzie znajdują się pliki systemu operacyjnego Windows.
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ąg i nie mogą być puste. W przeciwieństwie do innych zmiennych są 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 są dobrze dopasowane do przechowywania wartości potrzebnych 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 (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ć tak jak każda 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!
Ponieważ zmienna środowiskowa nie może być pustym ciągiem, ustawienie wartości na $null
lub usunięcie pustego ciągu. 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. Widać, że nie zwraca błędu podczas używania 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 do interakcji 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ą polecenia Copy-Item
, ustawić wartość zmiennej środowiskowej za pomocą polecenia , wyświetlić listę zmiennych środowiskowych za Set-Item
Get-Item
pomocą 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".
Aby uzyskać więcej informacji na temat zarządzania zmiennymi środowiskowymi za pomocą dostawcy środowiska , zobacz about_Environment_Provider.
Korzystanie z metod System.Environment
Klasa System.Environment udostępnia metody GetEnvironmentVariable i SetEnvironmentVariable w celu pobrania i zmodyfikowania 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ąć za pomocą metody SetEnvironmentVariable , 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.
Zapisywanie zmian w zmiennych środowiskowych
W systemie Windows istnieją trzy metody wprowadzania trwałych zmian w zmiennej środowiskowej: ustawienie ich w profilu przy użyciu metody SetEnvironmentVariable i użycie Panel sterowania System.
Zapisywanie 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'
Uwaga
W systemie Linux lub macOS dwukropek (:
) jest używany zamiast średnika(;
), aby oddzielić nową ścieżkę od ścieżki, która poprzedza ją na liście.
Ścieżkę do profilu programu PowerShell można uzyskać przy użyciu zmiennej automatycznej $PROFILE
. Aby uzyskać więcej informacji na temat profilów, zobacz about_Profiles.
Zapisywanie zmiennych środowiskowych za pomocą zmiennej SetEnvironmentVariable
W systemie Windows można określić zakres metody SetEnvironmentVariable jako trzeci parametr, aby ustawić zmienną środowiskową w tym zakresie. Zakresy maszyny 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ą Foo
środowiskową z wartością Bar
zakresu maszyny:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Zmienną środowiskową można usunąć z zakresu użytkownika lub maszyny, ustawiając wartość zmiennej na pusty ciąg.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Zapisywanie zmiennych środowiskowych za pomocą Panel sterowania systemowej
W Panel sterowania systemowej można dodawać lub edytować istniejące zmienne środowiskowe w zakresach Użytkownik i System (Maszyna). 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ę Ustawienia systemu zaawansowanego.
- 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 podrzędne sesje 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 zasady wykonywania ustawione 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".Aby uzyskać więcej informacji, zobacz about_Execution_Policies.
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:
- Windows PowerShell 5.1:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
- Program PowerShell w wersji 6.0 lub nowszej:
$env:LOCALAPPDATA\Microsoft\PowerShell
- Wartość domyślna systemu Innego niż Windows:
~/.cache/powershell
Domyślną nazwą pliku pamięci podręcznej jest
ModuleAnalysisCache
. Po zainstalowaniu wielu wystąpień programu PowerShell nazwa pliku zawiera sufiks szesnastkowy, dzięki czemu istnieje unikatowa nazwa pliku na instalację.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. Zmiany tej zmiennej środowiskowej wpływają tylko na procesy podrzędne. Wartość powinna nazwać pełną ścieżkę (w tym nazwę pliku), do którego program PowerShell ma uprawnienia do tworzenia i zapisywania plików.
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 cannot be written to, # on non-Windows you would use `/dev/null` $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łoszone przy użyciu narzędzia tracer:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanup
Podczas zapisywania pamięci podręcznej analizy modułu program PowerShell sprawdza moduły, które już nie istnieją, aby uniknąć niepotrzebnie dużej pamięci podręcznej. Czasami te kontrole nie są pożądane, w takim przypadku można je wyłączyć, ustawiając tę wartość zmiennej środowiskowej na
1
.Ustawienie tej zmiennej środowiskowej następuje natychmiast w bieżącym procesie.
PSModulePath
Zmienna
$env:PSModulePath
środowiskowa zawiera listę lokalizacji folderów, które są wyszukiwane w celu znalezienia modułów i zasobów.Domyślnie obowiązują lokalizacje przypisane 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. Ponadto jest to lokalizacja, w której są instalowane 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 to
$HOME\Documents\PowerShell\Modules
folder. Lokalizacja zakresu AllUsers to$env:ProgramFiles\PowerShell\Modules
. - W systemach innych niż Windows lokalizacja określonego przez użytkownika zakresu CurrentUser jest folderem
$HOME/.local/share/powershell/Modules
. Lokalizacja zakresu AllUsers to/usr/local/share/powershell/Modules
.
- W systemie Windows lokalizacja zakresu CurrentUser specyficznego dla użytkownika to
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.
POWERSHELL_UPDATECHECK
Zachowanie powiadomień o aktualizacji można zmienić przy użyciu zmiennej środowiskowej
POWERSHELL_UPDATECHECK
. Obsługiwane są następujące wartości:Off
wyłącza funkcję powiadamiania o aktualizacjiDefault
jest taka sama, jak nie definiującaPOWERSHELL_UPDATECHECK
elementu :- Wersje ogólnodostępne powiadamiają o aktualizacjach wydań ogólnodostępnych
- Wersje zapoznawcza/RC powiadamiają o aktualizacjach wersji ogólnie dostępnej i zapoznawczej
LTS
powiadamia tylko o aktualizacjach wersji ogólnodostępnych (LTS, long-term-servicing)
Aby uzyskać więcej informacji, zobacz about_Update_Notifications.
POWERSHELL_TELEMETRY_OPTOUT
Aby zrezygnować z telemetrii, ustaw zmienną środowiskową na
true
,yes
lub1
.Aby uzyskać więcej informacji, zobacz about_Telemetry.
Inne zmienne środowiskowe używane przez program PowerShell
Informacje o ścieżce
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 programu PowerShell, skrypt jest uruchamiany w bieżącej konsoli lub sesji terminalu. Jeśli rozszerzenie pliku nie jest wyświetlane, skrypt jest uruchamiany 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 trzeba dodawać
.PS1
rozszerzenia.Zmienne XDG
Na platformach innych niż Windows program PowerShell używa następujących zmiennych środowiskowych XDG zgodnie ze specyfikacją katalogu podstawowego XDG.
- XDG_CONFIG_HOME
- XDG_DATA_HOME
- XDG_CACHE_HOME