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:

  • POWERSHELL_TELEMETRY_OPTOUT
  • POWERSHELL_DISTRIBUTION_CHANNEL
  • POWERSHELL_UPDATECHECK
  • 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.

Uwaga

W przeciwieństwie do systemu Windows nazwy zmiennych środowiskowych w systemach macOS i Linux są uwzględniane wielkości liter. Na przykład $env:Path i $env:PATH są różnymi zmiennymi środowiskowymi na platformach innych niż Windows.

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 polecenie w środowiskach opartych na system 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-Itempolecenia , ustawić wartość zmiennej środowiskowej za pomocą Set-Itempolecenia , wyświetlić listę zmiennych środowiskowych za pomocą Get-Itempolecenia i usunąć zmienną środowiskową za pomocą Remove-Itempolecenia .

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ą , Fooz 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'

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ć 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ą Barw 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:

  1. Otwórz Panel sterowania systemowej.
  2. Wybierz pozycję System.
  3. Wybierz pozycję Advanced System Ustawienia.
  4. Przejdź do karty Zaawansowane .
  5. Wybierz pozycję Zmienne środowiskowe....
  6. Wprowadź zmiany.

Tworzenie trwałych zmiennych środowiskowych na platformach innych niż Windows

Systemy Linux i macOS mają pliki konfiguracji i skrypty używane przez system operacyjny do ustawiania zmiennych środowiskowych przed uruchomieniem aplikacji.

W przypadku uruchamiania programu PowerShell jako domyślnej powłoki (logowania) można zdefiniować zmienne środowiskowe w globalnych plikach inicjowania obsługiwanych przez system operacyjny. Na przykład w systemie Linux można dodać zmienne środowiskowe do /etc/environment pliku lub utworzyć skrypt, który ustawia zmienne środowiskowe i umieszcza go w folderze /etc/profile.d . W systemie macOS można dodać zmienne środowiskowe do /etc/profile pliku.

Podczas uruchamiania programu PowerShell z innej powłoki można zdefiniować zmienne środowiskowe w plikach inicjowania specyficznych dla powłoki używanych przez powłoki, takie jak ~/.bashrc dla bash lub ~/.zshrc dla zshprogramu .

Aby uzyskać więcej informacji, zobacz dokumentację systemu operacyjnego i powłokę domyślną.

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ą:

  • POWERSHELL_TELEMETRY_OPTOUT

    Aby zrezygnować z telemetrii, ustaw zmienną środowiskową na true, yeslub 1. Aby uzyskać więcej informacji, zobacz about_Telemetry.

    Aby ta zmienna środowiskowa miała wpływ, należy ją ustawić przed rozpoczęciem procesu programu PowerShell. Zapoznaj się z poprzednimi sekcjami, aby uzyskać informacje na temat tworzenia trwałych zmiennych środowiskowych.

  • POWERSHELL_DISTRIBUTION_CHANNEL

    Począwszy od programu PowerShell 7.2, ta zmienna środowiskowa jest ustawiana przez pakiety instalatora w celu zarejestrowania metody i źródła instalacji programu PowerShell.

    Te informacje są zawarte w danych telemetrycznych wysyłanych do firmy Microsoft. Użytkownicy nie powinni zmieniać tej wartości.

  • POWERSHELL_UPDATECHECK

    Zachowanie powiadomienia o aktualizacji można zmienić przy użyciu zmiennej środowiskowej POWERSHELL_UPDATECHECK . Aby uzyskać więcej informacji, zobacz about_Update_Notifications.

    Obsługiwane są następujące wartości:

    • Off wyłącza funkcję powiadamiania o aktualizacji
    • Default jest taka sama jak niezdefiniowania elementu POWERSHELL_UPDATECHECK:
      • Wersje ogólnie dostępne powiadamiają o aktualizacjach wersji ogólnie dostępnej
      • 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)

    Przed rozpoczęciem procesu programu PowerShell należy ustawić wartości inne niż domyślne zmiennej środowiskowej. Zapoznaj się z poprzednimi sekcjami, aby uzyskać informacje na temat tworzenia trwałych zmiennych środowiskowych.

  • 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. W systemie Windows lista lokalizacji folderów jest oddzielona znakiem średnika (;). Na platformach innych niż Windows dwukropek (:) oddziela lokalizacje folderów w zmiennej środowiskowej.

    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-Modulema 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 systemach innych niż Windows lokalizacja zakresu CurrentUser specyficznego dla użytkownika jest folderem$HOME/.local/share/powershell/Modules. Lokalizacja zakresu AllUsers to /usr/local/share/powershell/Modules.

    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:

    • 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. Jeśli masz zainstalowane wiele 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. 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,
    # 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ł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

  • ŚCIEŻKA

    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 (;). Na platformach innych niż Windows dwukropek (:) oddziela lokalizacje folderów w zmiennej środowiskowej.

  • 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życiu ftype poleceń i assoc 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.

  • 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

Funkcje terminalu

Począwszy od programu PowerShell 7.2, następujące zmienne środowiskowe mogą służyć do kontrolowania funkcji terminalu wirtualnego, takich jak sekwencje ucieczki ANSI, które kolorują dane wyjściowe. Obsługę sekwencji ucieczki ANSI można wyłączyć przy użyciu zmiennych środowiskowych TERM lub NO_COLOR .

  • TERMIN

    Następujące wartości $env:TERM zmiany zachowania w następujący sposób:

    • dumb -Ustawia $Host.UI.SupportsVirtualTerminal = $false
    • xterm-mono -Ustawia $PSStyle.OutputRendering = PlainText
    • xtermm -Ustawia $PSStyle.OutputRendering = PlainText
  • NO_COLOR

    Jeśli $env:NO_COLOR istnieje, $PSStyle.OutputRendering zostanie ustawiona wartość PlainText. Aby uzyskać więcej informacji na temat zmiennej środowiskowej NO_COLOR , zobacz https://no-color.org/.

Zobacz też