about_Environment_Variables
Краткое описание
Описывает, как получить доступ к переменным среды и управлять ими в PowerShell.
Переменные среды хранят данные, используемые операционной системой и другими программами. PowerShell создает следующие переменные среды:
PSExecutionPolicyPreference
PSModulePath
PSModuleAnalysisCachePath
PSDisableModuleAnalysisCacheCleanup
Полные описания этих переменных см. в переменных среды PowerShell этой статьи.
Подробное описание
PowerShell может получить доступ к переменным среды и управлять ими в любой из поддерживаемых платформ операционной системы. Поставщик среды PowerShell позволяет получать, добавлять, изменять, очищать и удалять переменные среды в текущей консоли.
Переменные среды, в отличие от других типов переменных в 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'
Путь к профилю PowerShell можно получить с помощью автоматической переменной $PROFILE
. Дополнительные сведения о профилях см. в about_Profiles.
Задание переменных среды с помощью SetEnvironmentVariable()
В Windows можно указать область для метода в качестве третьего параметра, SetEnvironmentVariable()
чтобы задать переменную среды в этой области. Области компьютера и пользователя сохраняются вне текущего процесса, что позволяет сохранить новую или измененную переменную среды.
Например, чтобы сохранить новую переменную Foo
среды со значением Bar
в области компьютера:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
Вы можете удалить переменную среды из области пользователя или компьютера, задав значение переменной пустой строке.
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
Задание переменных среды в системе панель управления
В системе панель управления можно добавлять или изменять существующие переменные среды в области "Пользователь" и "Компьютер". Windows записывает эти значения в реестр, чтобы они сохранялись в сеансах и перезагрузках системы.
Чтобы внести постоянное изменение в переменную среды в Windows с помощью System панель управления:
- Откройте панель управления системы.
- Выберите Система.
- Выберите дополнительные параметры системы.
- Перейдите на вкладку "Дополнительно ".
- Выберите переменные среды....
- Внесите нужные изменения.
Переменные среды PowerShell
Функции PowerShell могут использовать переменные среды для хранения пользовательских настроек. Эти переменные работают как переменные предпочтения, но они наследуются дочерними сеансами сеансов, в которых они созданы. Дополнительные сведения о переменных предпочтениях см. в about_Preference_Variables.
Переменные среды, в которых хранятся настройки, включают:
PSExecutionPolicyPreference
Хранит набор политик выполнения для текущего сеанса. Эта переменная среды существует только при установке политики выполнения для одного сеанса. Это можно сделать двумя разными способами.
Запустите сеанс из командной строки с помощью параметра ExecutionPolicy , чтобы задать политику выполнения для сеанса.
Воспользуйтесь командлетом
Set-ExecutionPolicy
. Используйте параметр Scope со значениемProcess
.Вручную задайте переменную среды. Изменение значения этой переменной изменяет политику выполнения текущего процесса.
Эта информация относится только к платформе Windows. Дополнительную информацию см. в разделе about_Execution_Policies.
PSModulePath
Переменная
$env:PSModulePath
среды содержит список расположений папок, искомых для поиска модулей и ресурсов.По умолчанию назначены действующие расположения
$env:PSModulePath
:Расположения на уровне системы: эти папки содержат модули, которые поставляется с помощью PowerShell. Модули хранятся в расположении
$PSHOME\Modules
. Кроме того, это расположение, в котором установлены модули управления Windows.Установленные пользователем модули: это модули, установленные пользователем.
Install-Module
имеет параметр Scope, позволяющий указать, установлен ли модуль для текущего пользователя или для всех пользователей. Дополнительные сведения см. в разделе Install-Module.- В Windows расположение области CurrentUser для конкретного пользователя —
$HOME\Documents\PowerShell\Modules
это папка. Расположение области AllUsers —$env:ProgramFiles\PowerShell\Modules
это .
- В Windows расположение области CurrentUser для конкретного пользователя —
Кроме того, программы установки, устанавливающие модули в других каталогах, например каталог Program Files, могут добавлять их расположения к значению
$env:PSModulePath
.Дополнительные сведения см. здесь: about_PSModulePath.
PSModuleAnalysisCachePath
PowerShell предоставляет контроль над файлом, который используется для кэширования данных о модулях и их командлетах. Кэш считывается при запуске при поиске команды и записывается в фоновом потоке через некоторое время после импорта модуля.
Расположение кэша по умолчанию:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
Имя файла по умолчанию для кэша
ModuleAnalysisCache
.Примечание.
Если обнаружение команд работает неправильно, например IntelliSense показывает команды, которые не существуют, можно удалить файл кэша. Кэш повторно создается при следующем запуске PowerShell.
Чтобы изменить расположение кэша по умолчанию, присвойте значение переменной среды перед запуском PowerShell. Значение должно быть полным путем (включая имя файла), на создание и запись файлов по которому у среды PowerShell есть разрешение.
Изменения в этой переменной среды влияют только на дочерние процессы. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
Чтобы отключить файловый кэш, укажите в качестве этого значения недопустимое расположение, например:
# `NUL` here is a special device on Windows that can't be written to $env:PSModuleAnalysisCachePath = 'NUL'
Это задает путь к устройству NUL . PowerShell не может записывать данные в путь, но не возвращается ошибка. Вы можете увидеть ошибки, сообщаемые с помощью трассировщика:
Trace-Command -PSHost -Name Modules -Expression { Import-Module Microsoft.PowerShell.Management -Force }
PSDisableModuleAnalysisCacheCleanup
При написании кэша анализа модулей PowerShell проверяет модули, которые больше не существуют, чтобы избежать ненужных больших кэшей. Иногда эти проверки не желательна, в этом случае их можно отключить, задав для этого значения переменной среды значение
1
.Установка этой переменной среды вступает в силу для последующих событий очистки в текущем процессе. Чтобы убедиться, что очистка отключена при запуске, необходимо задать переменную среды перед запуском PowerShell. Дополнительные сведения о создании переменных постоянной среды см. в предыдущих разделах.
Другие переменные среды, используемые PowerShell
Сведения о пути
PATH
Переменная
$env:PATH
среды содержит список расположений папок, которые операционная система ищет исполняемые файлы. В Windows список расположений папок разделен символом с запятой (;
).PATHEXT
Переменная
$env:PATHEXT
содержит список расширений файлов, которые Windows считает исполняемыми файлами. Если файл скрипта с одним из перечисленных расширений выполняется из PowerShell, скрипт выполняется в текущем сеансе консоли или терминала. Если расширение файла не указано, скрипт запускается в новом сеансе консоли.Чтобы убедиться, что скрипты для другого языка сценариев выполняются в текущем сеансе консоли, добавьте расширение файла, используемое языком сценариев. Например, чтобы запустить скрипты Python в текущей консоли, добавьте
.py
расширение в переменную среды. Для поддержки.py
расширения в виде исполняемого файла необходимо зарегистрировать расширение с помощьюftype
командной оболочки CMD иassoc
команд. PowerShell не имеет прямого метода регистрации обработчика файлов. Дополнительные сведения см. в документации по команде ftype .Скрипты PowerShell всегда начинаются в текущем сеансе консоли. Вам не нужно добавлять
.PS1
расширение.
См. также
PowerShell