Поделиться через


about_Environment_Variables

Краткое описание

Сведения о доступе к переменным среды и управлении ими в PowerShell.

Подробное описание

Переменные среды хранят данные, используемые операционной системой и другими программами. Например, WINDIR переменная среды содержит расположение каталога установки Windows. Программы могут запрашивать значение этой переменной, чтобы определить, где находятся файлы операционной системы Windows.

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!

Так как переменная среды не может быть пустой строкой, при установке для нее $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.

Использование поставщика среды и командлетов item

Поставщик среды 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".

Дополнительные сведения об использовании поставщика среды для управления переменными среды см. в разделе 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 существует три способа внесения постоянного изменения в переменную среды: установка их в профиле, использование метода 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')

Сохранение переменных среды с помощью system панель управления

В системном панель управления можно добавлять или изменять существующие переменные среды в областях Пользователь и Система (компьютер). Windows записывает эти значения в реестр, чтобы они сохранялись в сеансах и перезапусках системы.

Чтобы внести постоянное изменение переменной среды в Windows с помощью системного панель управления:

  1. Откройте системный панель управления.
  2. Выберите Система.
  3. Выберите Дополнительные параметры системы.
  4. Перейдите на вкладку Дополнительно .
  5. Выберите Переменные среды....
  6. Внесите нужные изменения.

Переменные среды PowerShell

Функции PowerShell могут использовать переменные среды для хранения пользовательских настроек. Эти переменные работают как переменные предпочтения, но наследуются дочерними сеансами сеансов, в которых они создаются. Дополнительные сведения о переменных предпочтения см. в разделе about_Preference_Variables.

К переменным среды, в которых хранятся предпочтения, относятся:

  • PSExecutionPolicyPreference

    Хранит политику выполнения, заданную для текущего сеанса. Эта переменная среды существует только в том случае, если вы задали политику выполнения для одного сеанса. Это можно сделать двумя разными способами.

    • Запустите сеанс из командной строки, используя параметр ExecutionPolicy , чтобы задать политику выполнения для сеанса.

    • Используйте командлет Set-ExecutionPolicy. Используйте параметр Scope со значением "Process".

      Подробнее см. в разделе about_Execution_Policies.

  • 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 cannot 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 }
    
  • PSDisableModuleAnalysisCacheCleanup

    При записи кэша анализа модулей PowerShell проверяет наличие модулей, которые больше не существуют, чтобы избежать неоправданно большого кэша. Иногда эти проверки не желательны. В этом случае их можно отключить, задав для этой переменной среды значение 1.

    Установка этой переменной среды вступает в силу сразу же в текущем процессе.

  • 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, расположением область Пользователя является $HOME/.local/share/powershell/Modules папка. Расположение область AllUsers/usr/local/share/powershell/Modules.

    Кроме того, программы установки, устанавливающие модули в других каталогах, таких как каталог Program Files, могут добавлять свои расположения к значению $env:PSModulePath.

    Дополнительные сведения см. здесь: about_PSModulePath.

  • POWERSHELL_UPDATECHECK

    Настроить уведомления об обновлениях можно с помощью переменной среды POWERSHELL_UPDATECHECK. Поддерживаются следующие значения.

    • Off отключает функцию уведомления об обновлении
    • Default то же самое, что и не определение POWERSHELL_UPDATECHECK:
      • В общедоступных выпусках выводятся уведомления об обновлениях для общедоступных выпусков.
      • В предварительных выпусках и релизах-кандидатах выводятся уведомления об обновлениях для общедоступных и предварительных выпусков.
    • LTS только уведомляет об обновлениях общедоступных выпусков долгосрочного обслуживания (LTS)

    Дополнительные сведения см. в разделе about_Update_Notifications.

  • POWERSHELL_TELEMETRY_OPTOUT

    Чтобы отказаться от телеметрии, задайте для переменной trueсреды значение , yesили 1.

    Дополнительные сведения см. в разделе about_Telemetry.

Другие переменные среды, используемые PowerShell

Сведения о пути

  • PATHEXT

    Переменная $env:PATHEXT содержит список расширений файлов, которые Windows считает исполняемыми файлами. Когда файл скрипта с одним из перечисленных расширений выполняется из PowerShell, скрипт выполняется в текущей консоли или сеансе терминала. Если расширение файла отсутствует в списке, скрипт выполняется в новом сеансе консоли.

    Чтобы убедиться, что скрипты для другого языка сценариев выполняются в текущем сеансе консоли, добавьте расширение файла, используемое языком сценариев. Например, чтобы запустить скрипты Python в текущей консоли, добавьте .py расширение в переменную среды. Чтобы Windows поддерживала .py расширение в качестве исполняемого файла, необходимо зарегистрировать его с помощью ftype команд и assoc командной оболочки CMD. В PowerShell нет прямого метода для регистрации обработчика файлов. Дополнительные сведения см. в документации по команде ftype .

    Сценарии PowerShell всегда запускают в текущем сеансе консоли. Добавлять расширение не нужно .PS1 .

  • Переменные XDG

    На платформах, отличных от Windows, PowerShell использует следующие переменные среды XDG в соответствии со спецификацией базового каталога XDG.

    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

См. также раздел