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


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 панель управления:

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

Создание постоянных переменных среды на платформах, отличных от 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это .

    Кроме того, программы установки, устанавливающие модули в других каталогах, например каталог 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
    }
    
  • 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/.

См. также