Zmienne środowiskowe — informacjeAbout Environment Variables

KRÓTKI OPISSHORT DESCRIPTION

Opisuje sposób uzyskiwania dostępu do zmiennych środowiskowych systemu Windows w programie PowerShell.Describes how to access Windows environment variables in PowerShell.

DŁUGI OPISLONG DESCRIPTION

Zmienne środowiskowe przechowują informacje o środowisku systemu operacyjnego.Environment variables store information about the operating system environment. Informacje te zawierają szczegółowe informacje, takie jak ścieżka systemu operacyjnego, liczba procesorów używanych przez system operacyjny oraz lokalizacja folderów tymczasowych.This information includes details such as the operating system path, the number of processors used by the operating system, and the location of temporary folders.

Zmienne środowiskowe przechowują dane, które są używane przez system operacyjny i inne programy.The environment variables store data that is used by the operating system and other programs. Na przykład WINDIR zmienna środowiskowa zawiera lokalizację katalogu instalacji systemu Windows.For example, the WINDIR environment variable contains the location of the Windows installation directory. Programy mogą badać wartość tej zmiennej, aby określić, gdzie znajdują się pliki systemu operacyjnego Windows.Programs can query the value of this variable to determine where Windows operating system files are located.

Program PowerShell może uzyskać dostęp do zmiennych środowiskowych i zarządzać nimi na dowolnej z obsługiwanych platform systemu operacyjnego.PowerShell can access and manage environment variables in any of the supported operating system platforms. Dostawca środowiska programu PowerShell upraszcza ten proces, ułatwiając wyświetlanie i zmienianie zmiennych środowiskowych.The PowerShell environment provider simplifies this process by making it easy to view and change environment variables.

Zmienne środowiskowe, w przeciwieństwie do innych typów zmiennych w programie PowerShell, są dziedziczone przez procesy podrzędne, takie jak lokalne zadania w tle i sesje, w których działają członkowie modułu.Environment variables, unlike other types of variables in PowerShell, are inherited by child processes, such as local background jobs and the sessions in which module members run. Sprawia to, że zmienne środowiskowe dobrze nadają się do przechowywania wartości, które są konieczne w procesie nadrzędnym i podrzędnym.This makes environment variables well suited to storing values that are needed in both parent and child processes.

Używanie i zmiana zmiennych środowiskowychUsing and changing environment variables

W systemie Windows zmienne środowiskowe można definiować w trzech zakresach:On Windows, environment variables can be defined in three scopes:

  • Zakres maszyny (lub systemu)Machine (or System) scope
  • Zakres użytkownikaUser scope
  • Zakres procesuProcess scope

Zakres procesu zawiera zmienne środowiskowe dostępne w bieżącym procesie lub w sesji programu PowerShell.The Process scope contains the environment variables available in the current process, or PowerShell session. Ta lista zmiennych jest dziedziczona z procesu nadrzędnego i jest zbudowana ze zmiennych w zakresach komputera i użytkownika .This list of variables is inherited from the parent process and is constructed from the variables in the Machine and User scopes. Na platformach opartych na systemie UNIX istnieje tylko zakres procesu .Unix-based platforms only have the Process scope.

Można wyświetlać i zmieniać wartości zmiennych środowiskowych bez użycia polecenia cmdlet przy użyciu składni zmiennej z dostawcą środowiska.You can display and change the values of environment variables without using a cmdlet by using a variable syntax with the environment provider. Aby wyświetlić wartość zmiennej środowiskowej, należy użyć następującej składni:To display the value of an environment variable, use the following syntax:

$Env:<variable-name>

Na przykład aby wyświetlić wartość WINDIR zmiennej środowiskowej, wpisz następujące polecenie w wierszu polecenia programu PowerShell:For example, to display the value of the WINDIR environment variable, type the following command at the PowerShell command prompt:

$Env:windir

W tej składni znak dolara ( $ ) wskazuje zmienną, a nazwa dysku ( Env: ) wskazuje zmienną środowiskową, po której następuje nazwa zmiennej ( windir ).In this syntax, the dollar sign ($) indicates a variable, and the drive name (Env:) indicates an environment variable followed by the variable name (windir).

Zmiana zmiennych środowiskowych w programie PowerShell wpływa na bieżącą sesję.When you change environment variables in PowerShell, the change affects only the current session. Takie zachowanie przypomina zachowanie Set polecenia w powłoce poleceń systemu Windows i Setenv polecenia w środowiskach opartych na systemie UNIX.This behavior resembles the behavior of the Set command in the Windows Command Shell and the Setenv command in UNIX-based environments. Aby zmienić wartości w zakresach komputera lub użytkownika, należy użyć metod klasy System. Environment .To change values in the Machine or User scopes, you must use the methods of the System.Environment class.

Aby wprowadzić zmiany w zmiennych o zakresie maszynowym, musi również mieć uprawnienie.To make changes to Machine-scoped variables, must also have permission. Jeśli spróbujesz zmienić wartość bez wystarczających uprawnień, polecenie zakończy się niepowodzeniem, a program PowerShell wyświetli błąd.If you try to change a value without sufficient permission, the command fails and PowerShell displays an error.

Można zmienić wartości zmiennych bez użycia polecenia cmdlet, używając następującej składni:You can change the values of variables without using a cmdlet using the following syntax:

$Env:<variable-name> = "<new-value>"

Na przykład, aby dołączyć ;c:\temp do wartości Path zmiennej środowiskowej, należy użyć następującej składni:For example, to append ;c:\temp to the value of the Path environment variable, use the following syntax:

$Env:Path += ";c:\temp"

W systemie Linux lub macOS dwukropek ( : ) w poleceniu oddziela nową ścieżkę od ścieżki, która poprzedza ją na liście.On Linux or macOS, the colon (:) in the command separates the new path from the path that precedes it in the list.

$Env:PATH += ":/usr/local/temp"

Można również użyć poleceń cmdlet elementu, takich jak Set-Item , Remove-Item , i Copy-Item do zmiany wartości zmiennych środowiskowych.You can also use the Item cmdlets, such as Set-Item, Remove-Item, and Copy-Item to change the values of environment variables. Aby na przykład użyć Set-Item polecenia cmdlet do dołączenia ;c:\temp do wartości Path zmiennej środowiskowej, użyj następującej składni:For example, to use the Set-Item cmdlet to append ;c:\temp to the value of the Path environment variable, use the following syntax:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

W tym poleceniu wartość jest ujęta w nawiasy, tak aby była interpretowana jako jednostka.In this command, the value is enclosed in parentheses so that it is interpreted as a unit.

Zmienne środowiskowe, które przechowują preferencjeEnvironment variables that store preferences

Funkcje programu PowerShell mogą używać zmiennych środowiskowych do przechowywania preferencji użytkownika.PowerShell features can use environment variables to store user preferences. Te zmienne działają jak zmienne preferencji, ale są dziedziczone przez sesje podrzędne sesji, w których zostały utworzone.These variables work like preference variables, but they are inherited by child sessions of the sessions in which they are created. Aby uzyskać więcej informacji na temat zmiennych preferencji, zobacz about_preference_variables.For more information about preference variables, see about_preference_variables.

Zmienne środowiskowe, które przechowują preferencje obejmują:The environment variables that store preferences include:

  • PSExecutionPolicyPreferencePSExecutionPolicyPreference

    Przechowuje zestaw zasad wykonywania dla bieżącej sesji.Stores the execution policy set for the current session. Ta zmienna środowiskowa istnieje tylko podczas ustawiania zasad wykonywania dla jednej sesji.This environment variable exists only when you set an execution policy for a single session. Można to zrobić na dwa różne sposoby.You can do this in two different ways.

    • Uruchom sesję z wiersza polecenia przy użyciu parametru ExecutionPolicy , aby ustawić zasady wykonywania dla sesji.Start a session from the command line using the ExecutionPolicy parameter to set the execution policy for the session.

    • Użyj Set-ExecutionPolicy polecenia cmdlet.Use the Set-ExecutionPolicy cmdlet. Użyj parametru scope z wartością "Process".Use the Scope parameter with a value of "Process".

      Aby uzyskać więcej informacji, zobacz about_Execution_Policies.For more information, see about_Execution_Policies.

  • PSModuleAnalysisCachePathPSModuleAnalysisCachePath

    Program PowerShell zapewnia kontrolę nad plikiem używanym do buforowania danych dotyczących modułów i ich poleceń cmdlet.PowerShell provides control over the file that is used to cache data about modules and their cmdlets. Pamięć podręczna jest odczytywana podczas uruchamiania podczas wyszukiwania polecenia i jest zapisywana w wątku w tle, gdy moduł zostanie zaimportowany.The cache is read at startup while searching for a command and is written on a background thread sometime after a module is imported.

    Domyślną lokalizacją pamięci podręcznej jest:Default location of the cache is:

    • Program Windows PowerShell 5,1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShellWindows PowerShell 5.1: $env:LOCALAPPDATA\Microsoft\Windows\PowerShell
    • Program PowerShell 6,0 lub nowszy: $env:LOCALAPPDATA\Microsoft\PowerShellPowerShell 6.0 and higher: $env:LOCALAPPDATA\Microsoft\PowerShell
    • Wartość domyślna spoza systemu Windows: ~/.cache/powershellNon-Windows default: ~/.cache/powershell

    Domyślna nazwa pliku dla pamięci podręcznej to ModuleAnalysisCache .The default filename for the cache is ModuleAnalysisCache. Jeśli zainstalowano wiele wystąpień programu PowerShell, nazwa pliku zawiera sufiks szesnastkowy, dzięki czemu istnieje unikatowa nazwa pliku dla każdej instalacji.When you have multiple instances of PowerShell installed, the filename includes a hexadecimal suffix so that there is a a unique filename per installation.

    Uwaga

    Jeśli odnajdywanie poleceń nie działa prawidłowo, na przykład technologia IntelliSense wyświetla polecenia, które nie istnieją, można usunąć plik pamięci podręcznej.If command discovery isn't working correctly, for example Intellisense shows commands that don't exist, you can delete the cache file. Pamięć podręczna zostanie ponownie utworzona przy następnym uruchomieniu programu PowerShell.The cache is recreated the next time you start PowerShell.

    Aby zmienić domyślną lokalizację pamięci podręcznej, należy ustawić zmienną środowiskową przed uruchomieniem programu PowerShell.To change the default location of the cache, set the environment variable before starting PowerShell. Zmiany w tej zmiennej środowiskowej mają wpływ tylko na procesy podrzędne.Changes to this environment variable only affect child processes. Wartość powinna mieć nazwę pełną ścieżkę (łącznie z nazwą pliku), która ma uprawnienia do tworzenia i zapisywania plików przez program PowerShell.The value should name a full path (including filename) that PowerShell has permission to create and write files.

    Aby wyłączyć pamięć podręczną plików, ustaw tę wartość na nieprawidłową lokalizację, na przykład:To disable the file cache, set this value to an invalid location, for example:

    # `NUL` here is a special device on Windows that cannot be written to,
    # on non-Windows you would use `/dev/null`
    $env:PSModuleAnalysisCachePath = 'NUL'
    

    Ustawia ścieżkę do urządzenia NUL .This sets the path to the NUL device. Program PowerShell nie może zapisać do ścieżki, ale żaden błąd nie jest zwracany.PowerShell can't write to the path but no error is returned. Można zobaczyć błędy raportowane przy użyciu śledzenia:You can see the errors reported using a tracer:

    Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
    
  • PSDisableModuleAnalysisCacheCleanupPSDisableModuleAnalysisCacheCleanup

    Podczas zapisywania pamięci podręcznej analizy modułów program PowerShell sprawdza moduły, które już nie istnieją, aby uniknąć niepotrzebnej dużej pamięci podręcznej.When writing out the module analysis cache, PowerShell checks for modules that no longer exist to avoid an unnecessarily large cache. Czasami te testy nie są odpowiednie, w takim przypadku można je wyłączyć przez ustawienie tej zmiennej środowiskowej na wartość 1 .Sometimes these checks are not desirable, in which case you can turn them off by setting this environment variable value to 1.

    Ustawienie tej zmiennej środowiskowej zacznie obowiązywać natychmiast w bieżącym procesie.Setting this environment variable takes effect immediately in the current process.

  • PSModulePathPSModulePath

    $env:PSModulePathZmienna środowiskowa zawiera listę lokalizacji folderów, które są przeszukiwane w celu znalezienia modułów i zasobów.The $env:PSModulePath environment variable contains a list of folder locations that are searched to find modules and resources.

    Domyślnie efektywne lokalizacje przypisane do $env:PSModulePath są następujące:By default, the effective locations assigned to $env:PSModulePath are:

    • Lokalizacje w całej systemie: te foldery zawierają moduły dostarczane z programem PowerShell.System-wide locations: These folders contain modules that ship with PowerShell. Moduły są przechowywane w $PSHOME\Modules lokalizacji.The modules are store in the $PSHOME\Modules location. Ponadto jest to lokalizacja, w której są zainstalowane moduły zarządzania systemu Windows.Also, This is the location where the Windows management modules are installed.

    • Moduły zainstalowane przez użytkownika: są to moduły zainstalowane przez użytkownika.User-installed modules: These are modules installed by the user. Install-Module zawiera parametr zakresu , który pozwala określić, czy moduł jest zainstalowany dla bieżącego użytkownika, czy dla wszystkich użytkowników.Install-Module has a Scope parameter that allows you to specify whether the module is installed for the current user or for all users. Aby uzyskać więcej informacji, zobacz Install-module.For more information, see Install-Module.

      • W systemie Windows lokalizacją zakresu CurrentUser określonego dla użytkownika jest $HOME\Documents\PowerShell\Modules folder.On Windows, the location of the user-specific CurrentUser scope is the $HOME\Documents\PowerShell\Modules folder. Lokalizacja zakresu ALLUSERS to $env:ProgramFiles\PowerShell\Modules .The location of the AllUsers scope is $env:ProgramFiles\PowerShell\Modules.
      • W systemach innych niż Windows lokalizacja CurrentUser określonego użytkownika jest $HOME/.local/share/powershell/Modules folderem.On non-Windows systems, the location of the user-specific CurrentUser scope is the $HOME/.local/share/powershell/Modules folder. Lokalizacja zakresu ALLUSERS to /usr/local/share/powershell/Modules .The location of the AllUsers scope is /usr/local/share/powershell/Modules.

    Ponadto programy instalacyjne, które instalują moduły w innych katalogach, takie jak katalog plików programu, mogą dołączać swoje lokalizacje do wartości $env:PSModulePath .In addition, setup programs that install modules in other directories, such as the Program Files directory, can append their locations to the value of $env:PSModulePath.

    Aby uzyskać więcej informacji, zobacz about_PSModulePath.For more information, see about_PSModulePath.

Zarządzanie zmiennymi środowiskowymiManaging environment variables

Program PowerShell udostępnia kilka różnych metod zarządzania zmiennymi środowiskowymi.PowerShell provides several different methods for managing environment variables.

  • Dysk dostawcy środowiskaThe Environment provider drive
  • Polecenia cmdlet elementuThe Item cmdlets
  • Klasa System. Environment programu .NETThe .NET System.Environment class
  • W systemie Windows Panel sterowania systemuOn Windows, the System Control Panel

Korzystanie z dostawcy środowiskaUsing the Environment provider

Każda zmienna środowiskowa jest reprezentowana przez wystąpienie klasy System. Collections. DictionaryEntry. .Each environment variable is represented by an instance of the System.Collections.DictionaryEntry class. W każdym obiekcie DictionaryEntry. nazwa zmiennej środowiskowej jest kluczem słownika.In each DictionaryEntry object, the name of the environment variable is the dictionary key. Wartość zmiennej jest wartością słownika.The value of the variable is the dictionary value.

Aby wyświetlić właściwości i metody obiektu, który reprezentuje zmienną środowiskową w programie PowerShell, użyj Get-Member polecenia cmdlet.To display the properties and methods of the object that represents an environment variable in PowerShell, use the Get-Member cmdlet. Na przykład aby wyświetlić metody i właściwości wszystkich obiektów w Env: stacji, wpisz:For example, to display the methods and properties of all the objects in the Env: drive, type:

Get-Item -Path Env:* | Get-Member

Dostawca środowiska programu PowerShell umożliwia dostęp do zmiennych środowiskowych w dysku programu PowerShell ( Env: dysku).The PowerShell Environment provider lets you access environment variables in a PowerShell drive (the Env: drive). Ten dysk wygląda podobnie do dysku systemu plików.This drive looks much like a file system drive. Aby przejść do Env: dysku, wpisz:To go to the Env: drive, type:

Set-Location Env:

Za pomocą poleceń cmdlet zawartości można pobrać lub ustawić wartości zmiennej środowiskowej.Use the Content cmdlets to get or set the values of an environment variable.

PS Env:\> Set-Content -Path Test -Value 'Test value'
PS Env:\> Get-Content -Path Test
Test value

Zmienne środowiskowe można wyświetlić na Env: dysku z dowolnego innego dysku programu PowerShell, a następnie można przejść do dysku, Env: Aby wyświetlić i zmienić zmienne środowiskowe.You can view the environment variables in the Env: drive from any other PowerShell drive, and you can go into the Env: drive to view and change the environment variables.

Używanie poleceń cmdlet elementuUsing Item cmdlets

Gdy odwołujesz się do zmiennej środowiskowej, wpisz Env: nazwę dysku, po którym następuje nazwa zmiennej.When you refer to an environment variable, type the Env: drive name followed by the name of the variable. Na przykład, aby wyświetlić wartość COMPUTERNAME zmiennej środowiskowej, wpisz:For example, to display the value of the COMPUTERNAME environment variable, type:

Get-ChildItem Env:Computername

Aby wyświetlić wartości wszystkich zmiennych środowiskowych, wpisz:To display the values of all the environment variables, type:

Get-ChildItem Env:

Ponieważ zmienne środowiskowe nie mają elementów podrzędnych, dane wyjściowe Get-Item i Get-ChildItem są takie same.Because environment variables do not have child items, the output of Get-Item and Get-ChildItem is the same.

Domyślnie program PowerShell wyświetla zmienne środowiskowe w kolejności, w jakiej są pobierane.By default, PowerShell displays the environment variables in the order in which it retrieves them. Aby posortować listę zmiennych środowiskowych według nazwy zmiennej, Potok danych wyjściowych Get-ChildItem polecenia do Sort-Object polecenia cmdlet.To sort the list of environment variables by variable name, pipe the output of a Get-ChildItem command to the Sort-Object cmdlet. Na przykład, z dowolnego dysku programu PowerShell, wpisz:For example, from any PowerShell drive, type:

Get-ChildItem Env: | Sort Name

Możesz również przejść do dysku przy Env: użyciu Set-Location polecenia cmdlet:You can also go into the Env: drive by using the Set-Location cmdlet:

Set-Location Env:

Gdy jesteś w Env: stacji, możesz pominąć Env: nazwę dysku ze ścieżki.When you are in the Env: drive, you can omit the Env: drive name from the path. Aby na przykład wyświetlić wszystkie zmienne środowiskowe, wpisz:For example, to display all the environment variables, type:

PS Env:\> Get-ChildItem

Aby wyświetlić wartość COMPUTERNAME zmiennej z Env: dysku, wpisz:To display the value of the COMPUTERNAME variable from within the Env: drive, type:

PS Env:\> Get-ChildItem ComputerName

Zapisywanie zmian zmiennych środowiskowychSaving changes to environment variables

Aby wprowadzić trwałą zmianę zmiennej środowiskowej w systemie Windows, użyj panelu sterowania systemu.To make a persistent change to an environment variable on Windows, use the System Control Panel. Wybierz pozycję Zaawansowane ustawienia systemu.Select Advanced System Settings. Na karcie Zaawansowane kliknij pozycję zmienna środowiskowa.... Możesz dodawać lub edytować istniejące zmienne środowiskowe w zakresach użytkowników i komputerów .On the Advanced tab, click Environment Variable.... You can add or edit existing environment variables in the User and System (Machine) scopes. System Windows zapisuje te wartości w rejestrze w taki sposób, aby były utrwalane między sesjami i ponownymi uruchomieniami systemu.Windows writes these values to the Registry so that they persist across sessions and system restarts.

Alternatywnie można dodawać lub zmieniać zmienne środowiskowe w profilu programu PowerShell.Alternately, you can add or change environment variables in your PowerShell profile. Ta metoda działa w przypadku dowolnej wersji programu PowerShell na dowolnej obsługiwanej platformie.This method works for any version of PowerShell on any supported platform.

Korzystanie z metod system. EnvironmentUsing System.Environment methods

Klasa System. Environment udostępnia metody GetEnvironmentVariable i SetEnvironmentVariable nie zawiera , które umożliwiają określenie zakresu zmiennej.The System.Environment class provides GetEnvironmentVariable and SetEnvironmentVariable methods that allow you to specify the scope of the variable.

W poniższym przykładzie zastosowano metodę GetEnvironmentVariable w celu uzyskania ustawienia maszyny PSModulePath i metody SetEnvironmentVariable nie zawiera w celu dodania C:\Program Files\Fabrikam\Modules ścieżki do wartości.The following example uses the GetEnvironmentVariable method to get the machine setting of PSModulePath and the SetEnvironmentVariable method to add the C:\Program Files\Fabrikam\Modules path to the value.

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
$newpath = $path + ';C:\Program Files\Fabrikam\Modules'
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

Aby uzyskać więcej informacji na temat metod klasy System. Environment , zobacz metody środowiska.For more information about the methods of the System.Environment class, see Environment Methods.

ZOBACZ RÓWNIEŻSEE ALSO