Powershell переменные окружения windows

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

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

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

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

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

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

Точно такой же результат будет получен при использовании сокращённой записи этой команды:

Командлет Get-Item даст точно такой же результат — выведет все переменные окружения:

Для постраничного вывода информации с возможностью пролистывания используйте следующую команду:

Для сохранения вывода в файл output.txt, который можно открыть в любом редакторе, например в Notepad.:

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

Как показать значение переменной окружения в PowerShell

Чтобы показать значение только одной переменной, используйте конструкцию:

К примеру, чтобы показать значение только PROCESSOR_ARCHITECTURE:

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

Например, чтобы показать значения всех переменных, чьё имя начинается на «Pro»:

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

Следующая команда выведет содержимое WINDIR:

Эта команда также покажет значение переменной окружения WINDIR (обратите внимание на разницу в форматировании):

Как установить или поменять значение переменной окружения в PowerShell

Для установки новой переменной окружения используется команда вида:

Например, чтобы установить значение переменной servpath на c:/Server:

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

На Linux или MacOS в качестве разделителя используйте двоеточие (:), чтобы отделить новый путь от имеющихся путей.

Вы также можете использовать командлеты PowerShell, такие как Set-Item, Remove-Item и Copy-Item для изменения значений переменных окружения.

Пример использования командлета Set-Item для добавления ;c:\temp к значению переменной окружения Path

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

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

Эта команда удаляет переменную окружения USERROLE2 из текущей сессии:

Читайте также:  Bitdefender antivirus free edition для windows

Эта команда удаляет переменную окружения USERROLE очищая её значение:

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

09 августа 2019

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Переменные Powershell

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

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

Давайте создадим несколько новых переменных и проверим что все получилось

Мы видим что успешно созданы 3 переменные: $a, $b, $d . Переменная $c не создалась и вылезла ошибка. Дело в том что в переменной $c при объявлении мы добавили пробел но не поставили кавычки. Если необходимо занести в переменную текст с пробелом нужно обязательно использовать кавычки. Посмотрим тип созданных переменных.

Переменная $a и $b имеют тип строка (System.String). Если с $a все понятно, там использовались буквы и цифра, то $b стала строкой только потому что мы занесли цифры в кавычки. А в переменной $d мы использовали цифры без кавычек, поэтому тип переменной стал число (System.Int32). Переменная $c выпала с ошибкой NULL потому как её не существует.

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

Читайте также:  Linux с чтение строк

Хорошо, а если нам необходимо изменить тип переменной на нужный нам? Например сделать из переменной $d строку. Это возможно:

Мы просто указываем в квадратных скобках переменную string и на выходе получаем уже System.String

Типы данных Powershell

Рассмотрим какие типы данных бывают в Powershell

Тип Класс .NET Описание
[string] System.String Строка
[char] System.Char Символ (как элемент кода UTF-16)
[bool] System.Boolean Булево (принимает значение $true или $false)
[int] System.Int32 32-разрядное целое число
[long] System.Int64 64-разрядное целое число
[decimal] System.Decimal 128 битное десятичное число. В конце числа буква d обязательна
[single] System.Single Число одиночной точности с плавающей запятой
[double] System.Double Число двойной точности с плавающей запятой
[DateTime] System.DateTime Представляет текущее время выраженное датой и временем суток.
[array] System.Object[] Массив. Предоставляет методы для создания, изменения, поиска и сортировки массивов
[hashtable] System.Collections.Hashtable Хеш-таблицы. Представляет коллекцию пар «ключ-значение», которые упорядочены по хэш-коду ключа. Отличие от массивов это использование именованных ключей вместо индексов.

Типы данных Powershell

Давайте присвоим переменной $e булево значение

Теперь $e имеет тип System.Boolean, добавим кавычки и посмотрим что будет

Переменная стала System.String. Сделаем из нее снова булево, но кавычки убирать не будем

С датой также можно работать сделав преобразование из строки. Давайте создадим переменную $data и добавим текст “01/01/2001” это будет в формате строки

И теперь можно преобразовать эту строку в формат даты и посмотреть на вывод

Тут уже и без GetType видно что Powerhell преобразовал строку в дату, даже время поставил :). Данное преобразование может быть удобно для работы с таблицами. Когда необходимо импортировать таблицу с данными и позже преобразовать их из строк в другие типы данных.

Массив имеет тип System.Object[] и каждый элемент в массиве может иметь свой тип. Создадим переменную $massiv и добавим в неё 3 значения: два строковых и одно число. Затем определим тип каждого элемента обратившись к нему по очереди. Обратиться к элементу массива можно указав его порядковый номер в скобках []. Расчет начинается с 0.

Рассмотрим последний тип данных это hashtable. Хеш-таблицы отличаются от массива тем что вместо индекса используют пару “ключ-значение”. Объявляется в таком формате: @. Давайте создадим переменную $hash и занесем в нее хеш-таблицу

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

Область действия

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

Существует две области действия переменных: глобальная и локальная. Глобальная область действия используется на весь сеанс Powershell. Она состоит из переменных Powershell, системных переменных и переменных определенных в консоли (в рамках текущего сеанса Powershell). Локальные переменные работаю только в той области для которой они определены (функция или скрипт) не выходя за ее пределы.

Рассмотрим работу глобальной и локальной переменной на небольшом примере:

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

Работа с переменными

Для работы с переменными существует 5 командлетов. Давайте посмотрим какие

Для удобства сведем по ним данные в таблицу

Название Назначение Описание
Get-Variable Получить значение переменой Позволяет получить значение переменной со всеми дополнительными параметрами. Если не указать название переменной, командлет выведет список всех текущих переменных Powershell.
New-Variable Создать новую переменную Создает новую переменную с возможностью задать дополнительные параметры. Можно создать переменную только для чтения, скрытую переменную или переменную с пробелом в имени
Set-Variable Изменить переменную Изменение значений в переменной. В случае отсутствия переменной с указанным именем, она будет создана.
Clear-Variable Очистить переменную Удаляет все значения в переменной, но не саму переменную. Тип переменой остается тот же что был до очистки значений.
Remove-Variable Удалить переменную Удаляет переменную со всеми ее значениями

Работа с переменными

Запустим командлет Get-Variable

Мы видим список всех переменных Powershell, большая часть из них это системные переменные. Давайте посмотрим параметры переменной hash, та что чуть выше мы создали для хеш-таблицы.

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

Попробуем изменить в ней значение

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

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

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

Мы можем продолжать дальше работать с этой переменной, можем выделить первый ее элемент

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

Переменные окружения Windows также доступны из Powershell. Доступ к ним можно получить через диск ENV:

Читайте также:  Как создать восстановительную флешку для windows 10
Оцените статью