Env powershell: Работа с переменными окружения в Powershell Env

Работа с переменными окружения в Powershell Env

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



Get-PSDrive -PSProvider "Environment"



Мы можем в него перейти и увидеть все переменные окружения:



cd ENV:\
ls


Если мы попробуем изменить переменные следующим способом, то они будут работать только в рамках PS и до окончания сеанса (перезагрузки например):



$variable = (Get-Item -Path 'Env:\Path').Value
$new_path = $variable + ';C:\Git\'
Set-Item -Path Env:\Path -Value $new_path


Способ выше аналогичен этому:



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


Если нам нужно сделать переменную среды постоянной есть решение для компьютера и конкретного пользователя.


 


Изменение переменных окружения пользователя в Powershell


У нас есть ветка реестра, которая отвечает за область пользователя:



HKEY_CURRENT_USER\Environment\Path


В деталях мы уже рассматривали как работать в powershell с реестром и не будем разбирать в деталях. Способом ниже мы обратимся к Path и добавим значение «C:\Git\»:



$variable = Get-ItemPropertyValue -Path 'HKCU:\Environment\' -Name 'Path'
$new_path = $variable + ';C:\Git\'
Set-ItemProperty -Path 'HKCU:\Environment\' -Name 'Path' -Value $new_path


Обращайте внимание, что у вас стоит ; перед новым значением (если вы изменяете Path), и что вы сохраняете предыдущее значение путем сложения.



Вам так же будет интересно:

Получение списка USB устройств в Powershell


Изменение переменных Env компьютера в Powershell


У нас есть другая ветка реестра, которая хранит значения переменных компьютера:



HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment


Изменяются они так же, как и в случае с пользователем:



$reg = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\'
$variable = Get-ItemPropertyValue -Path $reg -Name 'Path'
$new_path = $variable + ';C:\Git\'
Set-ItemProperty -Path $reg -Name 'Path' -Value $new_path


 


Создание новых переменных Environment в Powershell


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


Для компьютера:



$var = 'siteName'
$znachenie = 'fixmypc.ru'
[System.Environment]::SetEnvironmentVariable($var,$znachenie,[System.EnvironmentVariableTarget]::Machine)


И для пользователя:



[System.Environment]::SetEnvironmentVariable($var,$znachenie,[System.EnvironmentVariableTarget]::User)


Рекомендую

Подписывайтесь на наш Telegram канал

Теги:

#powershell

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

Переменные среды Windows — PowerShell — SS64.com

  • SS64
  • PowerShell
  • Практическое руководство

Переменные среды Windows видны как диск PS с именем Env:

Чтобы получить список всех переменных среды, используйте: Get-Childitem env: (или просто dir env:)

Каждая переменная среды — это объект, который можно получить с помощью Get-Childitem (или Get-Item) и перечислить с помощью Get-Member

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

Показать значения всех переменных среды:

Get-Childitem-path env:

или

gci env: | имя сортировки

Показать значение переменной среды COMPUTERNAME:

Get-Childitem env: имя_компьютера

Это можно упростить, если сначала установить местоположение (cd) в Env: Drive

компакт-диск env:

Затем для отображения переменной: get-childitem имя_компьютера

Возврат строкового значения с $env:
PowerShell также может обращаться к переменным среды, используя синтаксис $env: имя-переменной , это имело то преимущество, что возвращало system. string, а не объект DictionaryEntry, возвращаемый get-item или gci.

$env:имя_компьютера

$Компьютер = $env: имя_компьютера
$AppDataFolder = « $env: appdata»
«Папка данных приложения на компьютере $Computer — $AppDataFolder»

$full_path_to_FC = «$( $env: системный корень)\System32\fc.exe»

Аналогично перечислению среды PATH:

$windows_path = $env: Путь
$windows_path -разделить ‘;’

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

$ powershell_path = $ env: PSModulePath

Установка переменных среды

В выражении используйте следующий синтаксис: $env: VariableName = ‘ новое значение

Например, чтобы добавить «финансы» к значению переменной среды TEAMS:

$env:КОМАНДЫ = $env:КОМАНДЫ + «финансы»

Вы также можете изменить переменные среды с помощью Set-Item, Remove-Item и Copy-Item.

Set-Item -путь env: TEAMS -значение ( $env: TEAMS + ‘финансы’)

Обратите внимание на скобки.

Когда вы изменяете переменные среды, это изменение влияет только на текущий сеанс , так же, как при использовании команды SET в Windows. Чтобы сделать изменения постоянными, вы можете изменить их в реестре или с помощью такой утилиты, как SETX, или с помощью функции .Net. Вы также должны иметь разрешение на изменение значений. Постоянные изменения повлияют только на будущие сеансы.

Добавить C:\Batch в текущую ПУТЬ (только для текущего сеанса)

$env:path +=’;c:\Batch’

Удалить переменные среды

Установка переменной = пустая строка полностью удалит ее:

$env: VariableName = »

Команда SET (функция PowerShell)

Вот функция для быстрого вывода списка или установки переменной среды с использованием синтаксиса, подобного команде Windows CMD SET (автор Wes Haggard) 9(\S*?)\s*=\s*(. *)$»)
{set-item -force -path « env: $($matches[1])» -value $matches[2];}
еще
{ошибка записи «ОШИБКА использования: ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ»}
}
}

PS C:\> Установите testing=abc

Поставщики PowerShell

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

Встроенные провайдеры

Псевдоним — псевдонимы Windows PowerShell {Псевдоним}
Сертификат — сертификаты X509 для цифровых подписей {cert}
Окружающая среда — переменные среды Windows {Env}
FileSystem — файловая система дисков, каталогов и файлов {filesystem}
Функция — функции Windows PowerShell {Функция}
Реестр — реестр Windows {HKLM, HKCU}
Переменная — переменные Windows PowerShell {Переменная}

В PowerShell полное имя пути принимает следующую форму:

файловая система::c:\windows\system32\shell. dll

Также могут быть созданы и установлены дополнительные поставщики — Get-PsProvider выведет их список.
Перечислите свойства поставщика с помощью Get-psdrive: Функция Get-psdrive | список форматов *

напр. чтобы перечислить все сертификаты, используйте: Get-Childitem cert:

сертификат компакт-диска:
гки

«Большинство переменных могут демонстрировать восходящий или нисходящий тренд, в зависимости от выбранного базового года» ~ Томас Соуэлл

Связанные командлеты PowerShell

Практическое руководство: автоматические переменные — переменные, созданные и поддерживаемые PowerShell $_, $Args, $Error, $Home и т. д.
Практическое руководство: переменные и операторы — создание переменной, прибавление к значению, вычитание, деление.
Практическое руководство: Переменные предпочтений — Настройки: Детализация, Подтверждения, ErrorAction, $Debug.
Get-PSDrive — Получить информацию о диске (DriveInfo)
Эквивалент Windows CMD: список встроенных переменных среды (включая переменные оболочки CMD).
класс: System.Collections.DictionaryEntry
[Среда]::SetEnvironmentVariable (метод .Net)


 

Copyright © 1999-2023 SS64.com
Некоторые права защищены

Переменные среды в PowerShell | Opensource.com

Автор изображения:

Чат WOCinTech. Изменено Opensource.com. СС BY-SA 4.0

Переменные среды — это глобальные настройки для вашего компьютера с Linux, Mac или Windows, сохраненные для использования системной оболочкой при выполнении команд. Многие устанавливаются по умолчанию во время установки или создания пользователя.

Например, ваш домашний каталог задается как переменная среды при входе в систему. То, как он выглядит в PowerShell, зависит от вашей операционной системы.

В Windows:

 PS C:\Users\bogus> Get-Variable HOME -valueOnly
C:\Пользователи\подделка
 

В Linux:

 pwsh> Get-Variable HOME -valueOnly
HOME=/дом/Сет
 

На Mac:

 pwsh> Get-Variable HOME -valueOnly
HOME=/Пользователи/подделка
 

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

Эта статья посвящена переменным среды в среде PowerShell с открытым исходным кодом, поэтому она применима к PowerShell, работающему в Windows, Linux и Mac. Пользователям оболочки Bash следует обратиться к моей статье о переменных среды Bash.

Для этой статьи я запустил PowerShell в операционной системе Linux с открытым исходным кодом. Команды одинаковы независимо от вашей платформы, хотя вывод будет отличаться (например, статистически маловероятно, что ваше имя пользователя сет ).

Что такое переменные среды?

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

В PowerShell переменные среды хранятся на «диске» Env: , доступном через поставщика среды PowerShell — подсистема PowerShell. Это не физический диск, а виртуальная файловая система.

Поскольку переменные среды существуют на диске Env: , вы должны добавлять Env: к имени переменной при ссылке на них. Кроме того, вы можете установить рабочее местоположение на диск Env: с помощью команды Set-Location , чтобы вы могли обрабатывать все переменные среды как локальные переменные:

 PS> Set-Location Env:
ПС> пвд
Путь
----
Окружение:/
 

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

Вы можете просмотреть все переменные среды, установленные в вашей системе, с помощью Get-ChildItem из диска Env: . Список длинный, поэтому направьте вывод через out-host -paging , чтобы его было легко читать:

 PS> Get-ChildItem | вне-хост-пейджинг
LOGNAME set
LS_COLORS rs=0:mh=00:bd=48;5;232;38;5;
ПОЧТА /var/spool/mail/seth
МОДУЛЬПУТЬ /etc/scl/modulefiles:/etc/scl/modulefiles
MODULESHOME /usr/share/Модули
OLDPWD /дом/сет
ПУТЬ /opt/microsoft/powershell/6:/usr/доля/модули/бен
PSModulePath /home/seth/.local/share/powershell/Modules
PWD /дом/Сет
[...]
 

Если вы не находитесь в диске Env: , вы можете сделать то же самое, добавив Env:  к вашей команде:

 PS> Get-ChildItem Env: | вне-хост-пейджинг
LOGNAME set
LS_COLORS rs=0:mh=00:bd=48;5;232;38;5;
ПОЧТА /var/spool/mail/seth
МОДУЛЬПУТЬ /etc/scl/modulefiles:/etc/scl/modulefiles
 

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

Если вы хотите внести постоянные изменения в переменную, вы должны изменить их в реестре Windows в Windows или в файле конфигурации оболочки (например, ~/.bashrc ) в Linux или Mac. Если вы не знакомы с использованием переменных в PowerShell, прочитайте мою статью о переменных в PowerShell, прежде чем продолжить.

Для чего используются переменные среды?

Различные переменные среды используются несколькими различными системами вашего компьютера. Ваша переменная PATH жизненно важна, например, для вашей оболочки, но гораздо менее важна, скажем, для Java (у которой тоже есть пути, но это пути к важным библиотекам Java, а не к общим системным папкам). Тем не менее, Переменная USER используется несколькими различными процессами для определения того, кто запрашивает услугу.

Мастер установки, такой как платформа Nullsoft Scriptable Install System (NSIS) с открытым исходным кодом, обновляет переменные среды при установке нового приложения. Иногда, когда вы устанавливаете что-то за пределами предполагаемого набора инструментов вашей операционной системы, вам, возможно, придется самостоятельно управлять переменной среды. Или вы можете добавить переменную среды в соответствии со своими предпочтениями.

Чем они отличаются от обычных переменных?

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

Например, создайте переменную:

 PS> Set-Variable -Name VAR -Value "example"
PS> gv VAR -valueOnly
пример
 

Запустить новую оболочку даже из текущей оболочки:

 PS> pwsh
PS c:\> gv VAR -valueOnly
gv : Не удается найти переменную с именем «пример».
 

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

Как установить переменную среды?

При установке переменной среды вы должны указать, что это переменная среды, используя нотацию $Env: :

 PS Env:/> $Env:FOO = "hello world"
PS Env:/> Get-ChildItem FOO
Привет, мир
 

В качестве теста запустите новый сеанс и получите доступ к только что созданной переменной. Однако, поскольку эта переменная является переменной среды, перед ней необходимо поставить 9.0211 $Env: :

 PS Env:/> pwsh
PS c:\> $Env.FOO
Привет, мир
 

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

Как вы устанавливаете переменные среды в своем профиле?

Чтобы заставить переменную среды сохраняться между сеансами, вы должны добавить ее в свой профиль PowerShell, например в свой CurrentUser, AllHosts Профиль , расположенный в HOME/Documents/Profile.ps1 :

 PS> Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:FOO = "hello world"'
 

После добавления этой строки любой запущенный сеанс PowerShell создает экземпляр переменной среды FOO и устанавливает для нее значение hello world .

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

Как вы находите новые переменные среды?

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

Итак, вопрос: как узнать, какие переменные окружения имеют смысл? Ответ лежит в документации приложения.

Python, например, предлагает добавить соответствующий путь Python в переменную среды Path во время установки. [Примечание: ПУТЬ?] Если вы откажетесь, вы можете установить значение самостоятельно, теперь, когда вы знаете, как изменять переменные среды.

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