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-ItemGet-Itempomocą polecenia 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".

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ą , Fooz 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ą Barzakresu 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:

  1. Otwórz Panel sterowania systemowej.
  2. Wybierz pozycję System.
  3. Wybierz pozycję Ustawienia systemu zaawansowanego.
  4. Przejdź do karty Zaawansowane .
  5. Wybierz pozycję Zmienne środowiskowe....
  6. 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 }
    
  • 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.

    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 aktualizacji
    • Default jest taka sama, jak nie definiująca POWERSHELL_UPDATECHECKelementu :
      • 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, yeslub 1.

    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ż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 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

Zobacz też