Группы, захваты и подстановки
Конструкции группирования разделяют входную строку на подстроки, которые можно использовать в этом же регулярном выражении или игнорировать. Сгруппированные подстроки называются подвыражениями. По умолчанию подвыражения записываются в пронумерованные группы, хотя вы также можете присвоить им имена.
Группирующая конструкция — это регулярное выражение, заключённое в круглые скобки. Любой текст, совпадающий с заключённым в него регулярным выражением, захватывается. В следующем примере вводимый текст разбивается на две группы захвата.
'The last logged on user was CONTOSO\jsmith' -match '(.+was )(.+)' True
Используйте автоматическую переменную $Matches для получения захваченного текста. Текст, представляющий всё совпадение, сохраняется под ключом 0.
$Matches.0 The last logged on user was CONTOSO\jsmith
Захваты сохраняются в числовых ключах INTEGER, которые увеличиваются слева направо. Захват 1 содержит весь текст до имени пользователя, захват 2 содержит только имя пользователя.
$Matches Name Value ---- ----- 2 CONTOSO\jsmith 1 The last logged on user was 0 The last logged on user was CONTOSO\jsmith
Ключ 0 — это ЦЕЛОЕ число. Вы можете использовать любой метод HASHTABLE для доступа к сохранённому значению.
'Good Dog' -match 'Dog' True $Matches Dog $Matches.Item(0) Dog $Matches.0 Dog
Именованные захваты
По умолчанию захваты хранятся в возрастающем числовом порядке слева направо. Вы также можете назначить ИМЯ группе захвата. Это ИМЯ становится ключом в автоматической переменной $Matches.
Внутри группы захвата используйте ?<keyname> для хранения захваченных данных под именованным ключом.
$string = 'The last logged on user was CONTOSO\jsmith' $string -match 'was (?<domain>.+)\\(?<user>.+)' True $Matches Name Value ---- ----- domain CONTOSO user jsmith 0 was CONTOSO\jsmith $Matches.domain CONTOSO $Matches.user jsmith
В следующем примере сохраняется последняя запись журнала в журнале безопасности Windows. Предоставленное регулярное выражение извлекает имя пользователя и домен из сообщения и сохраняет их под ключами: N для имени и D для домена.
$log = (Get-WinEvent -LogName Security -MaxEvents 1).message $r = '(?s).*Account Name:\s*(?<N>.*).*Account Domain:\s*(?<D>*)' $log -match $r True $Matches Name Value ---- ----- D CONTOSO N jsmith 0 A process has exited....
Подстановки в регулярных выражениях
Использование регулярных выражений с оператором -replace позволяет динамически заменять текст с помощью захваченного текста.
ВВОД -replace ОРИГИНАЛ, ПОДСТАНОВКА
Здесь:
- ВВОД: строка по которой выполняется поиск
- ОРИГИНАЛ: регулярное выражение, используемое для поиска входной строки.
- ПОДСТАНОВКА: выражение подстановки для замены совпадения, найденные во входной строке.
Операнды ОРИГИНАЛ и ПОДСТАНОВКА подчиняются правилам обработчика регулярных выражений, таким как экранирование символов.
На группы захвата можно ссылаться в строке ПОДСТАНОВКА. Замена выполняется с помощью символа $ перед идентификатором группы.
Два способа ссылаться на группы захвата – по НОМЕРУ и по ИМЕНИ.
По НОМЕРУ — Группы захвата нумеруются слева направо.
'John D. Smith' -replace '(\w+) (\w+)\. (\w+)', '[email protected]' [email protected]
По ИМЕНИ — На группы захвата также можно ссылаться по имени.
'CONTOSO\Administrator' -replace '\w+\\(?<user>\w+)', 'FABRIKAM\${user}' FABRIKAM\Administrator
Выражение $& представляет весь совпавший текст:
'Gobble' -replace 'Gobble', '$& $&' Gobble Gobble
Поскольку символ $ имеет специальное значение, вам нужно использовать строки с одинарными кавычками, либо экранировать символ $ при использовании двойных кавычек.
'Hello World' -replace '(\w+) \w+', '$1 Universe' Hello Universe "Hello World" -replace "(\w+) \w+", "`$1 Universe" Hello Universe
Кроме того, если вы хотите использовать символ $ в качестве буквального символа, используйте $$ вместо обычных escape-символов. При использовании двойных кавычек всё равно экранируйте все экземпляры $, чтобы избежать неправильной трактовки.
'5.72' -replace '(.+)', '$$$1' $5.72 "5.72" -replace "(.+)", "`$`$`$1" $5.72
Подробное описание
PowerShell защищает доступ к переменным, псевдонимам, функциям и дискам PowerShell (PSDrive), ограничивая их чтение и изменение. PowerShell использует правила области, чтобы непреднамеренно не изменять элемент, который не следует изменять.
Ниже приведены основные правила области.
-
Области могут вложиться. Внешняя область называется родительской. Все вложенные области являются дочерними областями этого родительского элемента.
-
Элемент отображается в области, в которой он был создан, и в любых дочерних областях, если вы явно не сделаете его закрытым.
-
Вы можете объявить переменные, псевдонимы, функции и диски PowerShell для области за пределами текущей области.
-
Элемент, созданный в области, можно изменить только в области, в которой он был создан, если только вы явно не укажет другую область.
Если вы создаете элемент в области, а элемент разделяет его имя с элементом в другой области, исходный элемент может быть скрыт под новым элементом, но он не переопределяется или не изменяется.
Операторы
Операторы в PowerShell также эффективны для массивов. Некоторые из них работают несколько иначе.
-join
Оператор является самым очевидным примером, поэтому давайте рассмотрим его первым. Мне нравится оператор , я его часто использую. Он объединяет все элементы в массиве с помощью заданного символа или строки.
В операторе мне особенно нравится то, что он обрабатывает единичные элементы.
Я использую его для ведения журнала и подробных сообщений.
-join $array
Вот еще один полезный прием, о котором мне рассказал Ли Дейли. Если нужно объединить все без использования разделителя, вместо этого:
Можно использовать с массивом в качестве параметра без префикса. Этот пример наглядно демонстрирует то, о чем я говорил.
-replace и -split
Другие операторы, такие как и , выполняются для каждого элемента в массиве. Не скажу, что я их когда-нибудь таким образом использовал, но вот пример этого.
-in
Если одно значение, которое вам нужно проверить, совпадает с одним или несколькими значениями, можно использовать оператор . Значение должно быть в левой, а массив — в правой части оператора.
Такой способ может оказаться дорогостоящим, если список достаточно велик. Я часто использую шаблон регулярного выражения, если проверяется большое количество значений.
-eq и -ne
Равенство и массивы могут оказаться достаточно сложными. Если массив располагается в левой части, выполняется сравнение всех элементов. Вместо возврата возвращается совпадающий объект.
Если используется оператор , вы получаете все значения, которые не равны имеющемуся.
При использовании в операторе возвращается значение . Если значение не возвращается, то речь о значении . Оба этих оператора оцениваются как .
Я еще вернусь к этому вопросу позднее, когда мы будем говорить о тестировании .
-match
Оператор пытается сопоставить все элементы в коллекции.
При использовании с одним значением специальная переменная заполняется сведениями о соответствии. Этого не происходит, если массив обрабатывается таким образом.
Этот же подход можно использовать в случае с .
Я подробно расскажу о переменных , и в другой публикации под названием Множество способов использования регулярных выражений (Множество способов использования регулярных выражений).
$null или empty
Проверка на наличие или пустых массивов может быть непростой задачей. Далее описаны самые распространенные проблемы, связанные с массивами.
На первый взгляд этот оператор выглядит вполне работоспособным.
Однако я только что рассказал, как проверяет каждый элемент в массиве. Таким образом, у нас может быть массив из нескольких элементов с одним значением $null и результатом вычисления будет
Именно поэтому рекомендуется размещать в левой части оператора. Благодаря этому сценарий выполняется без проблем.
Массив не равен пустому массиву. Если вы уверены, что у вас есть массив, проверьте количество объектов в нем. Если это массив , число объектов равно .
Однако есть еще одна сложность, которую нужно учитывать в этом случае. Можно использовать даже при наличии одного объекта, если только этот объект не является . Эта ошибка исправлена в PowerShell 6.1.
Это хорошая новость, однако многие люди по-прежнему используют версию 5.1, так что им стоит иметь в виду указанную ошибку.
Если вы по-прежнему используете PowerShell 5.1, можно перенести объект в массив перед проверкой количества объектов, чтобы получить точное число.
Чтобы безопасно воспроизвести этот сценарий, проверьте , а затем проверьте число объектов.
Недавно кто-то спрашивал, как проверить, соответствует ли каждое значение в массиве заданному значению.
Пользователь Reddit /u/bis предложил это разумное решение, которое проверяет наличие некорректных значений, а затем инвертирует результат.
Определение класса командлета
первым шагом при создании командлета является именование командлетов и объявление класса платформа .NET Framework, который реализует командлет. Этот командлет извлекает сведения о процессе, поэтому выбранное здесь имя команды — «Get». (Практически любой командлет, который способен получить информацию, может обрабатывать входные данные командной строки.) Дополнительные сведения о утвержденных командах командлетов см. в разделе имена глаголов командлетов.
Ниже приведено объявление класса для командлета. Сведения об этом определении приведены в статье Создание первого командлета.
Параметры
-Confirm
Запрос подтверждения перед выполнением командлета.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Description
Указывает описание переменной.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Force
Указывает, что командлет создает переменную с тем же именем, что и существующая переменная, доступная только для чтения.
По умолчанию переменную можно перезаписать, если только переменная не имеет значения параметра или . Дополнительные сведения см. в параметре Option .
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Указывает имя новой переменной.
Type: | String |
Position: | |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Option
Задает значение свойства Options переменной. Допустимые значения для этого параметра:
- — не задает параметров. Значение по умолчанию — .
- — Может быть удален. Нельзя изменить, за исключением использования параметра Force .
- — переменная доступна только в текущей области.
- — переменная копируется во все новые области, которые создаются.
- — невозможно удалить или изменить. является допустимым только при создании переменной. Нельзя изменить параметры существующей переменной на .
Эти значения определяются как перечисление на основе флагов. С помощью этого параметра можно объединить несколько значений, чтобы задать несколько флагов. Значения могут передаваться параметру Option в виде массива значений или строки этих значений, разделенной запятыми. Командлет объединит значения с помощью операции binary-OR. Передача значений в виде массива является самым простым вариантом, а также позволяет использовать для значений заполнение табуляции.
Чтобы просмотреть свойство Options всех переменных в сеансе, введите .
Type: | ScopedItemOptions |
Accepted values: | None, ReadOnly, Constant, Private, AllScope, Unspecified |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Возвращает объект, представляющий элемент, с которым вы работаете. По умолчанию этот командлет не создает выходные данные.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Scope
Указывает область действия новой переменной. Допустимые значения для этого параметра:
- — Переменные, созданные в глобальной области, доступны везде в процессе PowerShell.
- — Локальная область ссылается на текущую область. Это может быть любая область в зависимости от контекста. — это область по умолчанию, если параметр области не указан.
- — Переменные, созданные в области скрипта, доступны только в файле скрипта или модуле, в которых они созданы.
- Число относительно текущей области (от 0 до числа областей, где 0 — текущая область, 1 — родительская область, 2 — родитель родительской области и т. д.). Отрицательные числа нельзя использовать.
Примечание
Параметр также принимает значение . на самом деле не является областью, а необязательным параметром для переменной. Однако использование значения с этим командлетом не изменяет видимость переменной. Дополнительные сведения см. в разделе about_Scopes.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Value
Указывает первоначальное значение переменной.
Type: | Object |
Position: | 1 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Visibility
Определяет, видима ли переменная вне сеанса, в котором она была создана. Этот параметр предназначен для использования в скриптах и командах, которые будут доставляться другим пользователям. Допустимые значения для этого параметра:
- — переменная видна. Значение по умолчанию — .
- — переменная не видна.
Если переменная является частной, она не отображается в списках переменных, таких как те, которые возвращаются , или в дисплеях диска. Команды чтения или изменения значения частной переменной возвращают ошибку. Однако пользователь может выполнять команды, использующие частную переменную, если они были написаны в сеансе, в котором определена переменная.
Type: | SessionStateEntryVisibility |
Accepted values: | Public, Private |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Объявление параметров как позиционированного или именованного
Командлет должен задавать каждый параметр как либо Позиционированный, либо именованный параметр. Оба типа параметров принимают одиночные аргументы, несколько аргументов, разделенных запятыми, и логические параметры. Логический параметр, также называемый параметром, обрабатывает только логические параметры. Параметр используется для определения наличия параметра. Рекомендуемое значение по умолчанию — .
Образец командлета определяет параметр как параметр с положением
0. Это означает, что первый аргумент, вводимый пользователем в командной строке, автоматически вставляется для этого параметра. Если необходимо определить именованный параметр, для которого пользователь должен указать имя параметра из командной строки, оставьте ключевое слово за пределами объявления атрибута.
Примечание
Если параметры не должны быть именованы, рекомендуется использовать наиболее часто используемые параметры, чтобы пользователи не могли вводить имя параметра.
Подробное описание
Переменные среды хранят данные, используемые операционной системой и другими программами. Например, переменная среды содержит расположение каталога установки Windows. Программы могут запрашивать значение этой переменной, чтобы определить, где находятся файлы операционной системы Windows.
PowerShell может получать доступ к переменным среды и управлять ими на любой из поддерживаемых платформ операционной системы. Поставщик среды PowerShell позволяет получать, добавлять, изменять, очищать и удалять переменные среды в текущей консоли.
Примечание
В отличие от Windows, в именах переменных среды в macOS и Linux учитывается регистр. Например, и — это разные переменные среды на платформах, отличных от Windows.
Переменные среды, в отличие от других типов переменных в PowerShell, всегда хранятся в виде строки и не могут быть пустыми. Кроме того, в отличие от других переменных, они наследуются дочерними процессами, такими как локальные фоновые задания и сеансы, в которых выполняются члены модуля. Благодаря этому переменные среды хорошо подходят для хранения значений, необходимых как в родительских, так и в дочерних процессах.
В Windows переменные среды можно определить в трех областях:
- Область компьютера (или системы)
- Область пользователей
- Область процесса
Область процесса содержит переменные среды, доступные в текущем процессе или сеансе PowerShell. Этот список переменных наследуется от родительского процесса и создается из переменных в областях Компьютер и Пользователь .
Изменение переменных среды в PowerShell влияет только на текущий сеанс. Это поведение похоже на поведение команды в командной оболочке Windows и команды в средах на основе UNIX. Чтобы изменить значения в области Компьютер или Пользователь, необходимо использовать методы класса System.Environment .
Чтобы внести изменения в переменные уровня компьютера, необходимо также иметь разрешение. Если вы попытаетесь изменить значение без достаточных разрешений, команда завершается ошибкой, и PowerShell отобразит ошибку.
PowerShell предоставляет несколько различных методов использования переменных среды и управления ими.
- Синтаксис переменной
- Командлеты поставщика среды и элемента
- Класс .NET System.Environment
Примеры
Пример 1. Изменение значения переменной только в скрипте
Следующая команда изменяет значение переменной в скрипте. Это изменение не влияет на глобальную область.
Во-первых, чтобы отобразить значение переменной в локальной области, используйте следующую команду:
Создайте скрипт Scope.ps1, содержащий следующие команды:
Выполните скрипт. Скрипт изменяет значение переменной , а затем сообщает о его значении в области скрипта. Выходные данные должны выглядеть примерно так:
Затем проверьте текущее значение переменной в текущей области.
В этом примере показано, что изменения значения переменной в области скрипта не влияют на значение переменной в родительской области.
Пример 2. Просмотр значения переменной в разных областях
Модификаторы области можно использовать для просмотра значения переменной в локальной области и родительской области.
Сначала определите переменную в глобальной области.
Затем создайте скрипт Sample.ps1, определяющий переменную. В скрипте используйте модификатор области для ссылки на глобальные или локальные версии переменной .
В Sample.ps1:
При запуске Sample.ps1 выходные данные должны выглядеть примерно так:
По завершении скрипта в сеансе определяется только глобальное значение .
Пример 3. Изменение значения переменной в родительской области
Если вы не защищаете элемент с помощью закрытого параметра или другого метода, вы можете просматривать и изменять значение переменной в родительской области.
Сначала определите переменную в глобальной области.
Затем создайте скрипт Sample.ps1, определяющий переменную. В скрипте используйте модификатор области для ссылки на глобальные или локальные версии переменной .
В Sample.ps1:
После завершения скрипта глобальное значение изменяется.
Пример 4. Создание частной переменной
Частная переменная — это переменная, которая имеет свойство Option со значением . переменные наследуются дочерней областью, но их можно просматривать или изменять только в области, в которой они были созданы.
Следующая команда создает частную переменную, вызываемую в локальной области.
Вы можете отобразить и изменить значение в локальной области.
Затем создайте скрипт Sample.ps1, содержащий следующие команды. Команда пытается отобразить и изменить значение .
В Sample.ps1:
Переменная не отображается в области скрипта, выходные данные пусты.
Пример 5. Использование локальной переменной в удаленной команде
Для переменных в удаленной команде, созданной в локальном сеансе, используйте модификатор области. PowerShell предполагает, что переменные в удаленных командах были созданы в удаленном сеансе.
Синтаксис:
Например, следующие команды создают переменную в локальном сеансе, а затем используют ее в удаленной команде:
Область использования появилась в PowerShell 3.0. В PowerShell 2.0, чтобы указать, что переменная была создана в локальном сеансе, используйте следующий формат команды.
Переопределение метода обработки входных данных
Если командлет обрабатывает входные данные командной строки, он должен переопределять соответствующие методы обработки входных данных. Основные методы обработки ввода представлены при создании первого командлета.
Командлет переопределяет метод System. Management. Automation. командлет. ProcessRecord для управления входными параметрами, предоставленными пользователем или сценарием. Этот метод получает процессы для каждого запрошенного имени процесса или все для процессов, если имя не указано
Обратите внимание, что в System. Management
Automation. командлет. ProcessRecordвызов является механизмом вывода для отправки выходных объектов в конвейер. вторым параметром этого вызова является значение, чтобы информировать среду выполнения Windows PowerShell о перечислении выходного массива объектов процессов и записи одного процесса в командную строку.
Строка форматирования
.NET позволяет отформатировать строки, с которыми довольно легко работать. Сначала позвольте продемонстрировать статический метод, после чего я покажу, как сделать то же самое с помощью ярлыка PowerShell.
В этом случае строка анализируется на наличие токенов и , а затем этот номер используется для выбора среди предоставленных значений. Если вы хотите повторить одно значение в строке, можно повторно использовать его номер.
При таком подходе чем сложнее строка, тем больше значений будет получено.
Форматирование значений в виде массивов
Если строка форматирования слишком длинная, можно сначала поместить значения в массив.
Это не сплаттинг, поскольку я передаю весь массив, но идея аналогична.
Типы Microsoft .NET
По умолчанию, если переменная имеет только одно значение, то значение, назначенное переменной, определяет тип данных переменной. Например, следующая команда создает переменную с типом System.Int32 :
Чтобы найти тип переменной .NET, используйте метод GetType и его свойство FullName . Не забудьте включить скобки после имени метода GetType , даже если вызов метода не имеет аргументов:
Чтобы создать переменную, содержащую строку, присвойте переменной строковое значение. Чтобы указать, что значение является строкой, заключите ее в кавычки следующим образом:
Если первое значение, назначенное переменной, является строкой, PowerShell обрабатывает все операции как строковые операции и приводит новые значения к строкам.
Это происходит в следующем примере:
Если первое значение является целым числом, PowerShell обрабатывает все операции как целые операции и приводит новые значения к целым числам. Это происходит в следующем примере:
Можно привести новую скалярную переменную как любой тип .NET, поместив имя типа в квадратные скобки, предшествующие имени переменной или первому значению присваивания.
При приведение переменной определяет тип данных, которые могут храниться в переменной.
Например, следующая команда приводит переменную в виде строкового типа:
В следующем примере выполняется приведение первого значения вместо приведения переменной:
Невозможно переадресовать тип данных существующей переменной, если его значение не может быть преобразовано в новый тип данных.
Чтобы изменить тип данных, необходимо заменить его значение следующим образом:
Кроме того, при указании имени переменной с типом данных тип этой переменной блокируется, если явно не переопределить тип, указав другой тип данных. Если вы пытаетесь назначить значение, несовместимое с существующим типом, и вы не переопределяете его явным образом, PowerShell отображает ошибку, как показано в следующем примере:
В PowerShell типы данных переменных, содержащих несколько элементов в массиве, обрабатываются по-разному от типов данных переменных, содержащих один элемент. Если тип данных не назначен переменной массива, он всегда имеет тип данных. Этот тип данных зависит от массивов.
Иногда можно переопределить тип по умолчанию, указав другой тип. Например, следующая команда приводит переменную в качестве типа массива:
Переменные PowerShell могут быть любым типом данных .NET. Кроме того, можно назначить любой полный тип данных .NET, доступный в текущем процессе. Например, следующая команда указывает тип данных:
Переменной будет присвоено значение, соответствующее типу данных. Значение переменной будет следующим:
Использование оператора присваивания
Переменные называются пространствами памяти, в которых хранятся значения. Значения хранятся в переменных с помощью оператора присваивания. Новое значение может заменить существующее значение переменной или добавить новое значение к существующему значению. Например, следующая инструкция присваивает переменной значение PowerShell:
При назначении значения переменной в PowerShell она создается, если она еще не существует. Например, первая из следующих двух инструкций присваивания создает переменную и присваивает значение 6 . Вторая инструкция присваивания присваивает значение 12 . Первая инструкция создает новую переменную. Вторая инструкция изменяет только его значение:
Переменные в PowerShell не имеют определенного типа данных, если они не приведены.
Если переменная содержит только один объект, переменная принимает тип данных этого объекта. Если переменная содержит коллекцию объектов, переменная имеет тип данных System.Object . Таким образом, вы можете назначить коллекции любой тип объекта. В следующем примере показано, что можно добавлять объекты обработки, объекты службы, строки и целые числа в переменную, не создавая ошибку:
Поскольку оператор присваивания имеет более низкий приоритет, чем оператор конвейера, круглые скобки не требуются для назначения результата конвейера команд переменной. Например, следующая команда сортирует службы на компьютере, а затем назначает отсортированные службы переменной :
Можно также назначить значение, созданное инструкцией переменной, как показано в следующем примере:
Этот пример присваивает переменной ноль, если значение меньше нуля. Он присваивает значение, равное значению , если значение не меньше нуля.
Чтобы назначить массив (несколько значений) переменной, разделите значения запятыми следующим образом:
Чтобы назначить хэш-таблицу переменной, используйте стандартную нотацию хэш-таблицы в PowerShell. Введите знак , за которым следуют пары «ключ-значение», разделенные точкой с запятой и заключенные в фигурные скобки . Например, чтобы назначить хэш-строку переменной , введите:
Чтобы назначить шестнадцатеричные значения переменной, предшествуйте значению .
PowerShell преобразует шестнадцатеричное значение (0x10) в десятичное значение (в данном случае 16) и присваивает это значение переменной . Например, чтобы присвоить переменной значение 0x10 , введите:
Чтобы назначить экспоненциальное значение переменной, введите корневое число, букву и число, представляющее кратное 10. Например, чтобы присвоить переменной значение 3,1415, равное 1000 , введите:
PowerShell также может преобразовывать килобайты, мегабайты и гигабайты в байты. Например, чтобы присвоить переменной значение в 10 килобайт , введите:
Подробное описание
Переменные среды хранят данные, используемые операционной системой и другими программами. Например, переменная среды содержит расположение каталога установки Windows. Программы могут запрашивать значение этой переменной, чтобы определить, где находятся файлы операционной системы Windows.
PowerShell может получать доступ к переменным среды и управлять ими на любой из поддерживаемых платформ операционной системы. Поставщик среды PowerShell позволяет получать, добавлять, изменять, очищать и удалять переменные среды в текущей консоли.
Примечание
В отличие от Windows, в именах переменных среды в macOS и Linux учитывается регистр. Например, и — это разные переменные среды на платформах, отличных от Windows.
Переменные среды, в отличие от других типов переменных в PowerShell, всегда хранятся в виде строки и не могут быть пустыми. Кроме того, в отличие от других переменных, они наследуются дочерними процессами, такими как локальные фоновые задания и сеансы, в которых выполняются члены модуля. Благодаря этому переменные среды хорошо подходят для хранения значений, необходимых как в родительских, так и в дочерних процессах.
В Windows переменные среды можно определить в трех областях:
- Область компьютера (или системы)
- Область пользователей
- Область процесса
Область процесса содержит переменные среды, доступные в текущем процессе или сеансе PowerShell. Этот список переменных наследуется от родительского процесса и создается из переменных в областях Компьютер и Пользователь .
Изменение переменных среды в PowerShell влияет только на текущий сеанс. Это поведение похоже на поведение команды в командной оболочке Windows и команды в средах на основе UNIX. Чтобы изменить значения в области Компьютер или Пользователь, необходимо использовать методы класса System.Environment .
Чтобы внести изменения в переменные уровня компьютера, необходимо также иметь разрешение. Если вы попытаетесь изменить значение без достаточных разрешений, команда завершается ошибкой, и PowerShell отобразит ошибку.
PowerShell предоставляет несколько различных методов использования переменных среды и управления ими.
- Синтаксис переменной
- Командлеты поставщика среды и элемента
- Класс .NET System.Environment