Поиск по сайту:

Как установить переменную окружения в PowerShell


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

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

В этой статье я объясню различные переменные окружения и как устанавливать переменные окружения с помощью PowerShell.

Переменные окружения

Прежде чем мы начнем рассматривать, как управлять переменными с помощью PowerShell, давайте сначала более внимательно посмотрим на переменные окружения (env), чтобы лучше их понять. Переменные окружения — это по сути пары «ключ-значение», которые являются частью окружения, в котором выполняется процесс.

Существует три области в Windows, где можно определить переменную окружения:

  • Область пользователя
  • Область применения машины (системы)
  • Область процесса

Область пользователя в основном содержит пути к папке профиля пользователя, такие как OneDrive, Appdata или временная папка. В области машины вы найдете информацию о устройстве и важные переменные, которые позволяют системе находить и выполнять команды или программы без необходимости указывать полный путь каждый раз.

Область процесса содержит переменные из текущего процесса (или сессии PowerShell). Она также будет перечислять все переменные из областей пользователя и машины. Пользовательские переменные, добавленные в область процесса, будут потеряны при закрытии сессии.

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

Получить переменные окружения с помощью PowerShell

Прежде чем мы добавим новые переменные окружения в нашу систему, давайте сначала посмотрим, как получить переменные в PowerShell. Мы можем использовать два метода для получения и установки переменных окружения в PowerShell: метод .NET [System.Environment] и провайдер окружения PowerShell $env:.

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

.NET method
[System.Environment]::GetEnvironmentVariables()

Environment provider, sorting them by name
Get-Item env:* | sort-object name

Or in short:
gi env:* | sort name

Using the drive method
dir env:

Преимуществом метода .NET является то, что вы можете указать область видимости для переменной. Таким образом, мы можем, например, перечислить только переменные окружения пользователя. Но когда вы знаете, какая переменная вам нужна, или хотите просмотреть все переменные, тогда провайдер среды, конечно, гораздо короче.

Таким образом, чтобы просмотреть только переменные среды пользователя, мы можем указать область пользователя в методе .NET. Другие варианты - это Machine или Process.

Replace User with Machine or Process to view the other scopes
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

Просмотреть конкретную переменную окружения

Если вы хотите проверить значение конкретной переменной, то вам необходимо хотя бы знать её название. Затем мы можем использовать метод $env:, чтобы увидеть значение переменной:

Get the OneDrive folder path
$env:OneDrive

Если вы не знаете точное имя переменной, или хотите просмотреть все переменные, связанные с OneDrive, вы можете использовать командлет Get-Item, сочетая его с подстановочным символом *:

Get all variables that start with OneDrive
Get-Item env:OneDrive*

Result
Name                           Value
----                           -----
OneDrive                       C:\Users\ruud\OneDrive - Pixel Supply
OneDriveConsumer               C:\Users\ruud\OneDrive
OneDriveCommercial             C:\Users\ruud\OneDrive - Pixel Supply

Or get all variables that contain the word Path
Get-Item env:*Path*

Мы также можем получить переменную окружения с помощью метода .NET. Для этого вам нужно будет использовать команду [System.Environment]::GetEnvironmentVariable. Обратите внимание, что эта команда выглядит почти идентично методу .NET, за исключением того, что в конце отсутствует s.

Чтобы перечислить значение переменной OneDrive, мы можем использовать следующую команду. Обратите внимание, что мы также можем указать область действия переменной, но это не обязательно.

[System.Environment]::GetEnvironmentVariable("OneDrive", "User")

Установить переменную окружения в PowerShell

Чтобы установить переменную окружения (env) в PowerShell, вы можете использовать два метода: поставщик Environment или метод [System.Environment]::SetEnvironmentVariable. Второй метод рекомендуется, потому что он позволяет устанавливать и изменять переменные также в области машины (системной).

Например, чтобы создать новую переменную среды TenantId с нашим идентификатором арендатора в качестве значения, мы можем использовать следующую команду:

[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6')

Теперь, если мы посмотрим на переменную, то увидим, что она установлена на требуемое значение:

Но есть одна проблема: если вы закроете PowerShell, то переменная окружения исчезнет. Причина этого в том, что любые переменные, которые вы добавляете, по умолчанию хранятся в пределах процесса. Мы можем решить эту проблему, добавив необходимую область, например, область машины:

Заметка

Чтобы добавить или изменить переменные в области машины, вам необходимо иметь повышенные права. Запустите PowerShell в режиме повышенных прав (администратор), иначе вы получите ошибку "Запрашиваемый доступ к реестру не разрешен."
[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6', 'Machine')

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

Другой вариант добавления постоянной переменной среды - это добавить переменную в ваш профиль PowerShell. Таким образом, переменная среды добавляется/обновляется каждый раз, когда вы открываете PowerShell.

Например, чтобы добавить новую переменную и обновить переменную Path по умолчанию, вы можете добавить следующие две строки в свой профиль Powershell:

$Env:UserPrincipalName = 'lab@a-d.site'
$Env:Path += ';C:\Tools

Добавление временных переменных окружения

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

Для этого мы можем использовать метод .NET, описанный ранее, или мы можем воспользоваться синтаксисом переменных или провайдером окружения. Синтаксис переменной $Env: - это самый простой способ быстро установить или обновить переменную:

$env:UserPrincipalName = 'lab@a-d.site'

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

Change the value of the variable
$env:UserPrincipalName = 'test@a-d.site'

Adding a value to the existing one:
$env:Path += ';d:\scripts'

Другой метод создания или обновления переменных заключается в использовании поставщика окружения. Например, чтобы быстро добавить переменную окружения, вы можете использовать командлет New-Item:

New-Item -Path Env:\UserPrincipalname -Value 'lab@a-d.site'

Result
Name                           Value
----                           -----
UserPrincipalname              lab@a-d.site

Чтобы обновить или изменить значение переменной, вы можете использовать командлет Set-Item:

Change the variable
Set-Item -Path Env:\UserPrincipalname -Value 'test@a-d.site'

Удаление переменных окружения

Переменная окружения не может быть пустой. Поэтому, чтобы удалить её, мы можем либо установить значение в пустую строку (или $null), либо можем использовать командлет Remove-Item для удаления переменной.

Чтобы установить переменную окружения в PowerShell в пустую строку, вы можете использовать один из методов, описанных выше:

Set the variable to $null
$env:UserPrincipalName = $null

Change it to an empty string
$env:UserPrincipalName = ''

Set it to an empty string with the .NET method
[Environment]::SetEnvironmentVariable('UserPrincipalName ', '', 'Machine')

Or use the Environment provider
Set-Item -Path Env:\UserPrincipalname -Value ''

Другим вариантом является использование командлета Remove-Item. Это будет иметь тот же эффект, что и вышеперечисленные методы, но может быть немного яснее, что вы действительно удаляете переменную.

Remove-Item -Path Env:\UserPrincipalname

Завершение

Существуют различные методы установки переменной окружения в PowerShell. Самый простой метод, конечно, — это использовать переменную окружения, $env:. Но если вы хотите создать постоянную переменную, то вам нужно будет использовать метод .Net и установить область действия на "машина".

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

Надеюсь, эта статья помогла вам. Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.