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


Сведения о переменных среды

КРАТКОЕ ОПИСАНИЕ

Описывает, как получить доступ к переменным среды Windows в Windows PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

Переменные среды хранят сведения о среде операционной системы. Эти сведения включают в себя такие сведения, как путь к операционной системе, количество процессоров, используемых операционной системой, и расположение временных папок.

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

PowerShell позволяет просматривать и изменять переменные среды Windows, включая переменные, заданные в реестре, и переменные, заданные для определенного сеанса. Поставщик среды PowerShell упрощает этот процесс, упрощая просмотр и изменение переменных среды.

В отличие от других типов переменных в PowerShell переменные среды и их значения наследуются дочерними сеансами, такими как локальные фоновые задания и сеансы, в которых выполняются члены модуля. Это делает переменные среды хорошо подходят для хранения значений, необходимых как в родительском, так и в дочернем сеансах.

Поставщик среды PowerShell

Поставщик среды PowerShell позволяет получить доступ к переменным среды Windows в PowerShell на диске PowerShell (диск Env: ). Этот диск во многом похож на диск файловой системы. Чтобы перейти к диску Env:, введите:

Set-Location Env:

Затем, чтобы отобразить содержимое диска Env:, введите:

Get-ChildItem

Вы можете просмотреть переменные среды на диске Env: с любого другого диска PowerShell, а также перейти к диску Env: для просмотра и изменения переменных среды.

Объекты переменных среды

В PowerShell каждая переменная среды представлена объектом , который является экземпляром класса System.Collections.DictionaryEntry.

В каждом объекте DictionaryEntry именем переменной среды является ключ словаря. Значение переменной является значением словаря.

Чтобы отобразить переменную среды в PowerShell, получите объект, представляющий переменную, а затем отобразите значения свойств объекта. При изменении переменной среды в PowerShell используйте методы, связанные с объектом DictionaryEntry.

Чтобы отобразить свойства и методы объекта, представляющего переменную среды в PowerShell, используйте командлет Get-Member. Например, чтобы отобразить методы и свойства всех объектов на диске Env:, введите:

Get-Item -Path Env:* | Get-Member

Отображение переменных среды

Для отображения и изменения значений переменных среды можно использовать командлеты, содержащие существительное Item (командлеты Item). Так как переменные среды не имеют дочерних элементов, выходные данные Get-Item и Get-ChildItem одинаковы.

При ссылке на переменную среды введите имя диска Env: и имя переменной. Например, чтобы отобразить значение переменной среды COMPUTERNAME, введите следующее:

Get-ChildItem Env:Computername

Чтобы отобразить значения всех переменных среды, введите:

Get-ChildItem Env:

По умолчанию PowerShell отображает переменные среды в том порядке, в котором они извлекаются. Чтобы отсортировать список переменных среды по имени переменной, передайте выходные данные команды Get-ChildItem в командлет Sort-Object. Например, на любом диске PowerShell введите:

Get-ChildItem Env: | Sort Name

Вы также можете перейти к диску Env: с помощью командлета Set-Location:

Set-Location Env:

Если вы находитесь на диске Env:, вы можете опустить имя диска Env: в пути. Например, чтобы отобразить все переменные среды, введите:

Get-ChildItem

Чтобы отобразить значение переменной COMPUTERNAME из диска Env:, введите:

Get-ChildItem ComputerName

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

$Env:<variable-name>

Например, чтобы отобразить значение переменной среды WINDIR, введите следующую команду в командной строке PowerShell:

$Env:windir

В этом синтаксисе знак доллара ($) обозначает переменную, а имя диска — переменную среды.

Изменение переменных среды

Чтобы внести постоянное изменение в переменную среды, используйте system in панель управления (вкладка "Дополнительно" или элемент "Дополнительные системные параметры") для сохранения изменений в реестре.

Изменение переменных среды в PowerShell влияет только на текущий сеанс. Это поведение похоже на поведение команды Set в средах под управлением Windows и команды Setenv в средах на основе UNIX.

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

Значения переменных можно изменить без использования командлета с помощью следующего синтаксиса:

$Env:<variable-name> = "<new-value>"

Например, чтобы добавить "; c:\temp" для значения переменной среды Path используйте следующий синтаксис:

$Env:path = $env:path + ";c:\temp"

Для изменения значений переменных среды можно также использовать командлеты Item, такие как Set-Item, Remove-Item и Copy-Item. Например, чтобы использовать командлет Set-Item для добавления "; c:\temp" для значения переменной среды Path используйте следующий синтаксис:

Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

В этой команде значение заключено в круглые скобки, поэтому оно интерпретируется как единица.

Сохранение изменений в переменных среды

Чтобы создать или изменить значение переменной среды в каждом сеансе Windows PowerShell, добавьте это изменение в профиль PowerShell.

Например, чтобы добавить каталог C:\Temp в переменную среды Path в каждом сеансе PowerShell, добавьте следующую команду в профиль Windows PowerShell.

$Env:Path = $Env:Path + ";C:\Temp"

Чтобы добавить команду в существующий профиль, например Профиль CurrentUser,AllHosts, введите следующую команду:

Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:Path = `
$Env:Path + ";C:\Temp"'

Переменные среды, в которой хранятся настройки

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

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

  • PSExecutionPolicyPreference

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

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

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

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

  • PSModulePath

    Сохраняет пути к каталогам модулей по умолчанию. PowerShell ищет модули в указанных каталогах, если не указан полный путь к модулю.

    Значение по умолчанию $Env:PSModulePath:

    $HOME\Documents\WindowsPowerShell\Modules; $PSHOME\Modules
    

PowerShell задает значение "$PSHOME\Modules" в реестре. Он задает значение "$HOME\Documents\WindowsPowerShell\Modules" при каждом запуске PowerShell.

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

Чтобы изменить каталоги модулей по умолчанию для текущего сеанса, используйте следующий формат команды, чтобы изменить значение переменной среды PSModulePath.

Например, чтобы добавить каталог "C:\Program Files\Fabrikam\Modules" к значению переменной среды PSModulePath, введите следующее:

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

Точка с запятой (;) в этой команде отделяет новый путь от предыдущего пути в списке.

Чтобы изменить значение PSModulePath в каждом сеансе, добавьте предыдущую команду в профиль PowerShell или используйте метод SetEnvironmentVariable класса Environment.

Следующая команда использует метод GetEnvironmentVariable для получения параметра компьютера PSModulePath и метод SetEnvironmentVariable для добавления пути C:\Program Files\Fabrikam\Modules к значению.

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath",
 "Machine")
[System.Environment]::SetEnvironmentVariable("PSModulePath", $path +
";C:\Program Files\Fabrikam\Modules", "Machine")

Чтобы добавить путь к параметру пользователя, измените целевое значение на Пользователь.

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath",
 "User")
[System.Environment]::SetEnvironmentVariable("PSModulePath", $path +
";$home\Documents\Fabrikam\Modules", "User")

Дополнительные сведения о методах класса System.Environment см. в разделе Методы среды на сайте MSDN.

Вы также можете добавить команду, которая изменяет значение профиля или использовать System в панель управления, чтобы изменить значение переменной среды PSModulePath в реестре.

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

СМ. ТАКЖЕ