about_Environment_Variables
Краткое описание
Описывает, как получить доступ к переменным среды и управлять ими в PowerShell.
Переменные среды хранят данные, используемые операционной системой и другими программами. PowerShell создает следующие переменные среды:
POWERSHELL_TELEMETRY_OPTOUT
POWERSHELL_DISTRIBUTION_CHANNEL
POWERSHELL_UPDATECHECK
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
Полные описания этих переменных см. в переменных среды PowerShell этой статьи.
Подробное описание
PowerShell может получить доступ к переменным среды и управлять ими в любой из поддерживаемых платформ операционной системы. Поставщик среды PowerShell позволяет получать, добавлять, изменять, очищать и удалять переменные среды в текущей консоли.
Примечание.
В отличие от Windows, имена переменных среды в macOS и Linux чувствительны к регистру. Например, $env:Path
это $env:PATH
разные переменные среды на платформах, отличных от Windows.
Переменные среды, в отличие от других типов переменных в PowerShell, всегда хранятся в виде строк. Кроме того, в отличие от других переменных, они наследуются дочерними процессами, такими как локальные фоновые задания и сеансы, в которых выполняются члены модуля. Это делает переменные среды хорошо подходят для хранения значений, необходимых как в родительских, так и в дочерних процессах.
В Windows переменные среды можно определить в трех областях:
- Область "Компьютер" (или "Система")
- Область пользователя
- Область процесса
Область процесса содержит переменные среды, доступные в текущем процессе или сеансе PowerShell. Этот список переменных наследуется от родительского процесса и создается из переменных в областях компьютера и пользователя .
При изменении переменных среды в PowerShell изменение влияет только на текущий сеанс. Это поведение напоминает поведение set
команды в командной оболочке Windows и setenv
команде в средах на основе UNIX. Чтобы изменить значения в областях компьютера или пользователя, необходимо использовать методы класса System.Environment .
Чтобы внести изменения в переменные на уровне компьютера, необходимо также иметь разрешение. Если вы пытаетесь изменить значение без достаточного разрешения, команда завершается ошибкой, и PowerShell отображает ошибку.
PowerShell предоставляет несколько различных методов использования переменных среды и управления ими.
- Синтаксис переменной
- Командлеты поставщика среды и элемента
- Класс .NET System.Environment
Использование синтаксиса переменной
Можно отобразить и изменить значения переменных среды с помощью следующего синтаксиса:
$Env:<variable-name>
Например, чтобы отобразить значение переменной WINDIR
среды:
$Env:windir
C:\Windows
В этом синтаксисе знак доллара ($
) указывает переменную, а имя диска (Env:
) указывает переменную среды, за которой следует имя переменной (windir
).
Можно создать и обновить значение переменных среды с помощью следующего синтаксиса:
$Env:<variable-name> = "<new-value>"
Например, чтобы создать Foo
переменную среды:
$Env:Foo = 'An example'
Так как переменные среды всегда являются строками, их можно использовать как любую другую переменную, содержащую строку. Например:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
В PowerShell переменная среды не может быть задана в пустую строку. Задание переменной среды или $null
пустой строки удаляет ее из текущего сеанса. Например:
$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
Возвращает ошибку, так как переменная среды была удалена.
Вы увидите, что при использовании не возвращается ошибка при использовании в пустой строке:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
Дополнительные сведения о переменных в PowerShell см. в about_Variables.
Использование командлетов поставщика среды и элементов
Поставщик среды PowerShell предоставляет интерфейс для взаимодействия с переменными среды в формате, который похож на диск файловой системы. Он позволяет получать, добавлять, изменять, очищать и удалять переменные среды и значения в PowerShell.
Например, чтобы создать Foo
переменную среды со значением Bar
:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
Можно также скопировать переменную среды с Copy-Item
помощью , задать значение переменной среды с Set-Item
помощью списка переменных Get-Item
среды и удалить переменную среды с Remove-Item
помощью.
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
Используйте командлет, чтобы просмотреть полный список переменных среды:
Get-ChildItem Env:
Дополнительные сведения об использовании поставщика среды для управления переменными среды см. в about_Environment_Provider.
Использование методов System.Environment
Класс System.Environment предоставляет GetEnvironmentVariable()
SetEnvironmentVariable()
методы для получения и изменения переменных среды.
В следующем примере создается новая переменная среды с Foo
значением Bar
, а затем возвращается его значение.
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
Можно удалить переменную среды с SetEnvironmentVariable()
методом, указав пустую строку для значения переменной. Например, чтобы удалить Foo
переменную среды, выполните следующие действия.
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
Дополнительные сведения о методах класса System.Environment см. в разделе "Методы среды".
Создание переменных постоянной среды в Windows
В Windows существует три метода для постоянного изменения переменной среды:
- Задайте их в профиле
SetEnvironmentVariable()
Использование метода- Использование системных панель управления
Задание переменных среды в профиле
Любая переменная среды, которую вы добавляете или изменяете в профиле PowerShell, доступна в любом сеансе, который загружает профиль. Этот метод работает для любой версии PowerShell на любой поддерживаемой платформе.
Например, чтобы создать CompanyUri
переменную среды и обновить Path
переменную среды, чтобы включить C:\Tools
папку, добавьте следующие строки в профиль PowerShell:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
Примечание.
В Linux или macOS двоеточие () используется вместо запятой(:
;
) для разделения нового пути от пути, который предшествует ему в списке.
Путь к профилю PowerShell можно получить с помощью автоматической переменной $PROFILE
. Дополнительные сведения о профилях см. в about_Profiles.
Задание переменных среды с помощью SetEnvironmentVariable()
В Windows можно указать область для метода в качестве третьего параметра, SetEnvironmentVariable()
чтобы задать переменную среды в этой области. Области компьютера и пользователя сохраняются вне текущего процесса, что позволяет сохранить новую или измененную переменную среды.
Например, чтобы сохранить новую переменную Foo
среды со значением Bar
в области компьютера:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Вы можете удалить переменную среды из области пользователя или компьютера, задав значение переменной пустой строке.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Задание переменных среды в системе панель управления
В системе панель управления можно добавлять или изменять существующие переменные среды в области "Пользователь" и "Компьютер". Windows записывает эти значения в реестр, чтобы они сохранялись в сеансах и перезагрузках системы.
Чтобы внести постоянное изменение в переменную среды в Windows с помощью System панель управления:
- Откройте панель управления системы.
- Выберите Система.
- Выберите дополнительные параметры системы.
- Перейдите на вкладку "Дополнительно ".
- Выберите переменные среды....
- Внесите нужные изменения.
Создание постоянных переменных среды на платформах, отличных от Windows
Linux и macOS имеют файлы конфигурации и скрипты, которые операционная система использует для задания переменных среды перед запуском приложения.
При запуске PowerShell в качестве оболочки по умолчанию (имя входа) можно определить переменные среды в файлах глобальной инициализации, поддерживаемых операционной системой. Например, в Linux можно добавить переменные среды в /etc/environment
файл или создать скрипт, который задает переменные среды и поместить его в папку /etc/profile.d
. В macOS можно добавить переменные среды в /etc/profile
файл.
При запуске PowerShell из другой оболочки можно определить переменные среды в файлах инициализации, относящихся к оболочке, используемых оболочками без входа, например ~/.bashrc
для bash
или ~/.zshrc
для zsh
.
Дополнительные сведения см. в документации по операционной системе и оболочке по умолчанию.
Переменные среды PowerShell
Функции PowerShell могут использовать переменные среды для хранения пользовательских настроек. Эти переменные работают как переменные предпочтения, но они наследуются дочерними сеансами сеансов, в которых они созданы. Дополнительные сведения о переменных предпочтениях см. в about_Preference_Variables.
Переменные среды, в которых хранятся настройки, включают:
POWERSHELL_TELEMETRY_OPTOUT
Чтобы отказаться от телеметрии, задайте для переменной
true
среды значение ,yes
или1
. Дополнительные сведения см. в about_Telemetry.Чтобы эта переменная среды повлияла, ее необходимо задать перед запуском процесса PowerShell. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
POWERSHELL_DISTRIBUTION_CHANNEL
Начиная с PowerShell 7.2, эта переменная среды устанавливается пакетами установщика для записи метода и источника установки для PowerShell.
Эти сведения включаются в данные телеметрии, отправляемые корпорации Майкрософт. Пользователи не должны изменять это значение.
POWERSHELL_UPDATECHECK
Настроить уведомления об обновлениях можно с помощью переменной среды
POWERSHELL_UPDATECHECK
. Дополнительные сведения см. в about_Update_Notifications.Поддерживаются следующие значения:
Off
Отключает функцию уведомления об обновленииDefault
совпадает с определениемPOWERSHELL_UPDATECHECK
:- В общедоступных выпусках выводятся уведомления об обновлениях для общедоступных выпусков.
- В предварительных выпусках и релизах-кандидатах выводятся уведомления об обновлениях для общедоступных и предварительных выпусков.
LTS
только уведомляет об обновлениях выпусков общедоступной общедоступной версии для долгосрочного обслуживания (LTS)
Перед началом процесса PowerShell необходимо задать значения переменной среды, отличные от по умолчанию. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
PSExecutionPolicyPreference
Хранит набор политик выполнения для текущего сеанса. Эта переменная среды существует только при установке политики выполнения для одного сеанса. Это можно сделать двумя разными способами.
Запустите сеанс из командной строки с помощью параметра ExecutionPolicy , чтобы задать политику выполнения для сеанса.
Воспользуйтесь командлетом
Set-ExecutionPolicy
. Используйте параметр Scope со значениемProcess
.Вручную задайте переменную среды. Изменение значения этой переменной изменяет политику выполнения текущего процесса.
Эта информация относится только к платформе Windows. Дополнительную информацию см. в разделе about_Execution_Policies.
PSModulePath
Переменная
$env:PSModulePath
среды содержит список расположений папок, искомых для поиска модулей и ресурсов. В Windows список расположений папок разделен символом с запятой (;
). На платформах, отличных от Windows, двоеточие (:
) отделяет расположения папок в переменной среды.По умолчанию назначены действующие расположения
$env:PSModulePath
:Расположения на уровне системы: эти папки содержат модули, которые поставляется с помощью PowerShell. Модули хранятся в расположении
$PSHOME\Modules
. Кроме того, это расположение, в котором установлены модули управления Windows.Установленные пользователем модули: это модули, установленные пользователем.
Install-Module
имеет параметр Scope, позволяющий указать, установлен ли модуль для текущего пользователя или для всех пользователей. Дополнительные сведения см. в разделе Install-Module.- В Windows расположение области CurrentUser для конкретного пользователя —
$HOME\Documents\PowerShell\Modules
это папка. Расположение области AllUsers —$env:ProgramFiles\PowerShell\Modules
это . - В системах, отличных от Windows, расположение области CurrentUser для конкретного пользователя —
$HOME/.local/share/powershell/Modules
это папка. Расположение области AllUsers —/usr/local/share/powershell/Modules
это .
- В Windows расположение области CurrentUser для конкретного пользователя —
Кроме того, программы установки, устанавливающие модули в других каталогах, например каталог Program Files, могут добавлять их расположения к значению
$env:PSModulePath
.Дополнительные сведения см. здесь: about_PSModulePath.
PSModuleAnalysisCachePath
PowerShell предоставляет контроль над файлом, который используется для кэширования данных о модулях и их командлетах. Кэш считывается при запуске при поиске команды и записывается в фоновом потоке через некоторое время после импорта модуля.
Расположение кэша по умолчанию:
- Windows PowerShell 5.1:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
. - PowerShell 6.0 и выше:
$env:LOCALAPPDATA\Microsoft\PowerShell
- По умолчанию, отличный от Windows:
~/.cache/powershell
Имя файла по умолчанию для кэша
ModuleAnalysisCache
. При установке нескольких экземпляров PowerShell имя файла включает шестнадцатеричный суффикс, чтобы для каждой установки существовал уникальный имя файла.Примечание.
Если обнаружение команд работает неправильно, например IntelliSense показывает команды, которые не существуют, можно удалить файл кэша. Кэш повторно создается при следующем запуске PowerShell.
Чтобы изменить расположение кэша по умолчанию, присвойте значение переменной среды перед запуском PowerShell. Значение должно быть полным путем (включая имя файла), на создание и запись файлов по которому у среды PowerShell есть разрешение.
Изменения в этой переменной среды влияют только на дочерние процессы. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
Чтобы отключить файловый кэш, укажите в качестве этого значения недопустимое расположение, например:
# `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'
Это задает путь к устройству NUL . PowerShell не может записывать данные в путь, но не возвращается ошибка. Вы можете увидеть ошибки, сообщаемые с помощью трассировщика:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
- Windows PowerShell 5.1:
PSDisableModuleAnalysisCacheCleanup
При написании кэша анализа модулей PowerShell проверяет модули, которые больше не существуют, чтобы избежать ненужных больших кэшей. Иногда эти проверки не желательна, в этом случае их можно отключить, задав для этого значения переменной среды значение
1
.Установка этой переменной среды вступает в силу для последующих событий очистки в текущем процессе. Чтобы убедиться, что очистка отключена при запуске, необходимо задать переменную среды перед запуском PowerShell. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
Другие переменные среды, используемые PowerShell
Сведения о пути
PATH
Переменная
$env:PATH
среды содержит список расположений папок, которые операционная система ищет исполняемые файлы. В Windows список расположений папок разделен символом с запятой (;
). На платформах, отличных от Windows, двоеточие (:
) отделяет расположения папок в переменной среды.PATHEXT
Переменная
$env:PATHEXT
содержит список расширений файлов, которые Windows считает исполняемыми файлами. Если файл скрипта с одним из перечисленных расширений выполняется из PowerShell, скрипт выполняется в текущем сеансе консоли или терминала. Если расширение файла не указано, скрипт запускается в новом сеансе консоли.Чтобы убедиться, что скрипты для другого языка сценариев выполняются в текущем сеансе консоли, добавьте расширение файла, используемое языком сценариев. Например, чтобы запустить скрипты Python в текущей консоли, добавьте
.py
расширение в переменную среды. Для поддержки.py
расширения в виде исполняемого файла необходимо зарегистрировать расширение с помощьюftype
командной оболочки CMD иassoc
команд. PowerShell не имеет прямого метода регистрации обработчика файлов. Дополнительные сведения см. в документации по команде ftype .Скрипты PowerShell всегда начинаются в текущем сеансе консоли. Вам не нужно добавлять
.PS1
расширение.Переменные
XDG
На платформах, отличных от Windows, PowerShell использует следующие переменные среды XDG, определенные спецификацией базового каталога XDG.
XDG_CONFIG_HOME
XDG_DATA_HOME
XDG_CACHE_HOME
Функции терминала
Начиная с PowerShell 7.2, можно использовать следующие переменные среды для управления функциями виртуального терминала, такими как escape-последовательности ANSI, которые цветуют выходные данные. Поддержка escape-последовательностей ANSI может быть отключена с помощью TERM
переменных среды или NO_COLOR
переменных среды.
TERM
Следующие значения
$env:TERM
изменяют поведение следующим образом:dumb
-Задает$Host.UI.SupportsVirtualTerminal = $false
xterm-mono
-Задает$PSStyle.OutputRendering = PlainText
xtermm
-Задает$PSStyle.OutputRendering = PlainText
NO_COLOR
Если
$env:NO_COLOR
существует,$PSStyle.OutputRendering
то для этого задано значениеPlainText
. Дополнительные сведения об переменнойNO_COLOR
среды см. в статье https://no-color.org/.
См. также
PowerShell