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


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

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

Переменные среды 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это .

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

См. также