About_scopes

Группы, захваты и подстановки

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

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

'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
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: