About_operators

Подробное описание

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

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

Начиная с PowerShell 2.0, все арифметические операторы работают с 64-разрядными числами.

Начиная с PowerShell 3.0, для поддержки битовой арифметики в PowerShell добавляются (shift-right) и (shift-left). Побитовые операторы работают только с целыми типами.

PowerShell поддерживает следующие арифметические операторы:

  • Добавление () — добавляет числа, объединяет строки, массивы и хэш-таблицы

  • Вычитание () — вычитание или отрицание чисел

  • Умножение () — умножение чисел или копирование строк и массивов указанное количество раз

  • Деление () — деление чисел

  • Модуль () — возвращает оставшуюся часть операции деления.

  • Побитовое И ()

  • Побитовое НЕ ()

  • Побитовое ИЛИ ()

  • Побитовое XOR ()

  • Сдвигает биты влево ()

  • Сдвигает биты вправо ()

Управление массивом

Вы можете изменить элементы в массиве, добавить элемент в массив и объединить значения из двух массивов в третий массив.

Чтобы изменить значение определенного элемента в массиве, укажите имя массива и индекс элемента, который требуется изменить, а затем используйте оператор присваивания () для указания нового значения элемента. Например, чтобы изменить значение второго элемента в массиве (позиция индекса 1) на 10, введите:

Для изменения значения можно также использовать метод SetValue массива. В следующем примере второе значение (позиция индекса 1) массива изменяется на 500:

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

Примечание

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

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

Чтобы объединить два массива в один массив, используйте оператор plus (). В следующем примере создаются два массива, объединяются и отображаются итоговые объединенные массивы.

В результате массив содержит 1, 3, 5 и 9.

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

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

Операторы совпадения

Операторы похожести (-like и -notlike) находят элементы, которые соответствуют или не соответствуют указанному шаблону, используя выражения с подстановочными знаками.

Синтаксис:

<string[]> -like <выражение-с-подстановочными-знаками>
<string[]> -notlike <выражение-с-подстановочными-знаками>

Операторы совпадения (-match и -notmatch) находят элементы, которые соответствуют или не соответствуют указанному шаблону, используя регулярные выражения.

Операторы совпадения заполняют автоматическую переменную $Matches, когда входные данные (левый аргумент) для оператора являются одним скалярным объектом. Когда вход является скалярным, операторы -match и -notmatch возвращают логическое значение и устанавливают значение автоматической переменной $Matches для совпавших компонентов аргумента.

Синтаксис:

<string[]> -match <регулярное-выражение>
<string[]> -notmatch <регулярное-выражение>

-like

Описание: совпадение выражению с подстановочными знаками (*).

Примеры:

"PowerShell" -like "*shell"
True

"PowerShell", "Server" -like "*shell"
PowerShell

-notlike

Описание: не совпадение выражению с подстановочными знаками (*).

Примеры:

"PowerShell" -notlike "*shell"
False

"PowerShell", "Server" -notlike "*shell"
Server

-match

Описание: совпадает с регулярным выражением. Когда вход является скалярным, он заполняет автоматическую переменную $Matches.

Операторы совпадения ищут только по строкам. Они не могут искать в массивах целых чисел или других объектах.

Если входом является коллекция, операторы -match и -notmatch возвращают соответствующие элементы этой коллекции, но оператор не заполняет переменную $Matches.

Например, следующая команда отправляет набор строк оператору -match. Оператор -match возвращает совпадающие элементы в коллекции. Он не заполняет автоматическую переменную $Matches.

"Sunday", "Monday", "Tuesday" -match "sun"
Sunday

$Matches

Напротив, следующая команда отправляет одну строку оператору -match. Оператор -match возвращает логическое значение и заполняет автоматическую переменную $Matches. Автоматическая переменная $Matches является HASHTABLE. Если группировка или захват не используются, заполняется только один ключ.

"Sunday" -match "sun"
    True

$Matches

    Name                           Value
    ----                           -----
    0                              Sun

Ключ 0 представляет весь совпавший текст. Дополнительные сведения о группировке и захвате с использованием регулярных выражений смотрите в разделе «Регулярные выражения в PowerShell».

Важно отметить, что хеш-таблица $Matches будет содержать только первое вхождение любого совпадению шаблона.

"Banana" -match "na"
    True

$Matches

    Name                           Value
    ----                           -----
    0                              na

Ключ 0 — это ЦЕЛОЕ число. Вы можете использовать любой метод HASHTABLE для доступа к сохранённому значению.

"Good Dog" -match "Dog"
True

$Matches
Dog

$Matches.Item(0)
Dog

$Matches.0
Dog

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

"Sunday" -notmatch "rain"
    True

$matches


"Sunday" -notmatch "day"
    False

$matches

    Name                           Value
    ----                           -----
    0                              day

-notmatch

Описание: не соответствует строке. Использует регулярные выражения. Когда вход является скалярным, он заполняет автоматическую переменную $Matches.

Примеры:

"Sunday" -notmatch "sun"
    False

$matches
    Name Value
    ---- -----
    0    sun

"Sunday", "Monday" -notmatch "sun"
    Monday

Использование оператора присваивания

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

При назначении значения переменной в PowerShell она создается, если она еще не существует. Например, первая из следующих двух инструкций присваивания создает переменную и присваивает значение 6 . Вторая инструкция присваивания присваивает значение 12 . Первая инструкция создает новую переменную. Вторая инструкция изменяет только его значение:

Переменные в PowerShell не имеют определенного типа данных, если они не приведены.
Если переменная содержит только один объект, переменная принимает тип данных этого объекта. Если переменная содержит коллекцию объектов, переменная имеет тип данных System.Object . Таким образом, можно назначить коллекции любой тип объекта. В следующем примере показано, что можно добавлять объекты процесса, объекты службы, строки и целые числа в переменную без создания ошибки:

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

Можно также назначить значение, созданное инструкцией переменной, как показано в следующем примере:

В этом примере значение переменной присваивается нулю, если значение меньше нуля. Он присваивает значение , равное значению , если значение не меньше нуля.

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

Чтобы назначить хэш-таблицу переменной, используйте стандартную нотацию хэш-таблицы в PowerShell. Введите знак , за которым следуют пары «ключ-значение», разделенные точкой с запятой и заключенные в фигурные скобки . Например, чтобы назначить хэш-файл переменной , введите:

Чтобы назначить шестнадцатеричные значения переменной, перед значением .
PowerShell преобразует шестнадцатеричное значение (0x10) в десятичное значение (в данном случае 16) и присваивает это значение переменной . Например, чтобы назначить значение 0x10 переменной , введите:

Чтобы назначить экспоненциальное значение переменной, введите корневое число, букву и число, представляющее кратное 10. Например, чтобы присвоить переменной значение 3,1415 значение 1000 , введите:

PowerShell также может преобразовывать килобайты , мегабайты и гигабайты в байты. Например, чтобы присвоить переменной значение 10 килобайт , введите:

Подробное описание

WQL — это язык запросов инструментария управления Windows (WMI), который используется для получения сведений из WMI.

Для выполнения запроса WMI в Windows PowerShell использовать WQL не требуется.
Вместо этого можно использовать параметры командлетов Get-WmiObject или Get-CimInstance. WQL-запросы выполняются несколько быстрее, чем стандартные команды Get-WmiObject, и улучшенная производительность очевидна при выполнении команд в сотнях систем. Тем не менее убедитесь, что время, затрачивается на запись успешного WQL-запроса, не перевешивает повышение производительности.

Основные инструкции WQL, необходимые для использования WQL: Select, Where и From.

Операторы равенства

-eq и -ne

Если левая сторона является скалярной, возвращает значение True, если правая сторона является точным совпадением. В противном случае возвращает значение False. делает обратное; он возвращает значение False , если обе стороны совпадают; в противном случае возвращает значение True.

Пример

Если левая часть является коллекцией, возвращает те элементы, которые соответствуют правой части, а отфильтровывает их.

Пример

Эти операторы обрабатывают все элементы коллекции. Пример

Оператор равенства может сравнивать объекты разных типов

Важно понимать, что значение находится в правой части сравнения, которое можно преобразовать в тип левого значения для сравнения

Например, строка преобразуется в целое число для сравнения со значением . В этом примере возвращается .

В этом примере значение преобразуется в строку для сравнения со строкой . В этом примере возвращается .

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

В этом примере мы создали два объекта с одинаковыми свойствами. Тем не менее результат проверки на равенство имеет значение False , так как они являются разными объектами. Чтобы создать сопоставимые классы, необходимо реализовать System.IEquatable<T> в классе. В следующем примере показана частичная реализация класса MyFileInfoSet , который реализует System.IEquatable<T> и имеет два свойства: File и Size. Метод возвращает значение True , если свойства File и Size двух объектов MyFileInfoSet совпадают.

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

Например, давайте представим собой массив, содержащий элементы NULL:

Следующие тесты не являются пустыми.

Однако следующий код выведет все элементы NULL из :

-gt, -ge, -lt и -le

, , и ведут себя очень аналогично. Если обе стороны являются скалярными, они возвращают значение True или False в зависимости от того, как обе стороны сравниваются:

Оператор Возвращает значение True, если…
Левая часть больше
Левая сторона больше или равна
Левая часть меньше
Левая сторона меньше или равна

В следующих примерах все операторы возвращают значение True.

Примечание

В большинстве языков программирования оператором больше, чем является . В PowerShell этот символ используется для перенаправления. Дополнительные сведения см . в разделе about_Redirection.

Если левая сторона является коллекцией, эти операторы сравнивают каждый элемент коллекции с правой стороной. В зависимости от логики они либо сохраняют, либо отменяют элемент.

Пример

Эти операторы работают с любым классом, реализующим System.IComparable.

Примеры:

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

Если обе стороны операторов недостаточно сопоставимы, эти операторы вызывают неустранимую ошибку.

Оператор замены

Замена регулярными выражениями

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

Синтаксис:

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

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

Примеры:

Подстановки регулярных выражений

Также можно использовать регулярные выражения для динамической замены текста с помощью захватывающих групп и подстановок. Группы отслеживания можно ссылаться в строке , используя знак доллара () перед идентификатором группы.

В следующем примере оператор принимает имя пользователя в формате и преобразуется в формат:

Предупреждение

Символ имеет синтаксические роли как в PowerShell, так и в регулярных выражениях:

  • В PowerShell между двойными кавычками она назначает переменные и выступает в качестве оператора подэкспрессии.
  • В строках поиска регулярных выражений он обозначает конец строки.
  • В строках подстановки регулярных выражений она обозначает захваченные группы. Обязательно поместите регулярные выражения между одними кавычками или вставьте перед ними символ обратной черты ().

Пример:

в regex обозначает литерал . Это в строке подстановки для включения литерала в результирующую замену. Пример:

Дополнительные сведения см. в разделе about_Regular_Expressions и .

Замена блоком скрипта

В PowerShell 6 и более поздних версий оператор также принимает блок скрипта, выполняющий замену. Блок скрипта выполняется один раз для каждого совпадения.

Синтаксис:

В блоке скрипта используйте автоматическую переменную для доступа к замещаемого входного текста и другой полезной информации. Тип класса этой переменной — System.Text.RegularExpressions.Match.

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

Функции с параметрами

С функциями можно использовать параметры, включая именованные параметры, позиционные параметры, параметры коммутатора и динамические параметры. Дополнительные сведения о динамических параметрах в функциях см. в about_Functions_Advanced_Parameters.

именованных параметров

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

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

Можно также определить параметры за пределами фигурных скобок без ключевого слова, как показано в следующем примере синтаксиса:

Ниже приведен пример альтернативного синтаксиса.

Хотя первый метод предпочтителен, между этими двумя методами нет никакой разницы.

При запуске функции значение, указанное для параметра, присваивается переменной, содержащей имя параметра. Значение этой переменной можно использовать в функции.

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

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

Чтобы использовать эту функцию, введите следующую команду:

Можно также ввести значение именованного параметра без имени параметра.
Например, следующая команда дает тот же результат, что и команда, которая присваивает имя параметру Size :

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

Если вы вводите без значения, функция присваивает 100 . Если указать значение, функция использует это значение.

При необходимости можно указать краткую строку справки, описывающую значение по умолчанию параметра, добавив атрибут PSDefaultValue в описание параметра и указав свойство HelppsDefaultValue. Чтобы предоставить строку справки, описывающую значение по умолчанию (100) параметра Size в функции, добавьте атрибут PSDefaultValue , как показано в следующем примере.

Дополнительные сведения о классе атрибутов PSDefaultValue см. в разделе «Элементы атрибутов PSDefaultValue».

Позиционные параметры

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

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

Следующая функция добавляет расширение имени файла в указанное имя файла:

Параметры переключателя

Параметр — это параметр, который не требует значения. Вместо этого следует ввести имя функции, за которым следует имя параметра switch.

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

При вводе параметра switch после имени функции функция отображается . Без параметра switch отображается .

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

Примеры

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

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

Это эквивалентно следующему примеру.

Поскольку оператор конвейера () имеет более высокий приоритет, чем оператор присваивания (), файлы, которые получает командлет, отправляются командлету для фильтрации до назначения переменной .

В следующем примере показано, что оператор индекса имеет приоритет над оператором приведения.

Это выражение создает массив из трех строк. Затем он использует оператор индекса со значением 0, чтобы выбрать первый объект в массиве, который является первой строкой. Наконец, он приводит выбранный объект в виде строки. В этом случае приведение не оказывает никакого влияния.

Это выражение использует круглые скобки, чтобы принудительно выполнить операцию приведения до выбора индекса. В результате весь массив приводится в виде (одной) строки. Затем оператор индекса выбирает первый элемент в строковом массиве, который является первым символом.

В следующем примере, так как оператор (больше) имеет более высокий приоритет, чем оператор (логического И), результатом выражения является FALSE.

Это эквивалентно следующему выражению.

Если оператор -and имеет более высокий приоритет, ответ будет true.

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

битовые операторы;

PowerShell поддерживает стандартные побитовые операторы, включая побитовое И (), инклюзивные и эксклюзивные побитовые операторы OR ( и), а также побитовые операторы NOT ().

Начиная с PowerShell 2.0, все побитовые операторы работают с 64-разрядными целыми числами.

Начиная с PowerShell 3.0, для поддержки побитовой арифметики в PowerShell вводятся (shift-right) и (shift-left).

PowerShell поддерживает следующие побитовые операторы.

Оператор Описание Выражение Результат
Побитовое И 2
Побитовое ИЛИ (включительно) 11
Побитовое ИЛИ (исключающее) 9
Побитовое НЕ -11
Shift-left 408
Shift-right 51

Побитовые операторы действуют в двоичном формате значения. Например, битовая структура для числа 10 00001010 (на основе 1 байта), а битовая структура для числа 3 00000011. При использовании побитового оператора для сравнения 10 и 3 отдельные биты в каждом байте сравниваются.

В побитовой операции AND результирующий бит имеет значение 1, только если оба входных бита равны 1.

В побитовой операции OR (включительно) результирующий бит имеет значение 1, если один или оба входных бита равны 1. Результирующий бит установлен в значение 0, только если для обоих входных битов задано значение 0.

В побитовой операции OR (исключающее) результирующий бит имеет значение 1 только в том случае, если один входной бит 1.

Побитовый оператор NOT — это унарный оператор, который создает двоичное дополнение значения. Бит 1 имеет значение 0, а бит 0 имеет значение 1.

Например, двоичное дополнение 0 равно -1, максимальное целое число без знака (0xffffffff), а двоичное дополнение -1 равно 0.

В побитовой операции сдвига влево все биты перемещаются влево, где «n» — значение правого операнда. Ноль вставляется в том месте.

Если левый операнд является целочисленным (32-разрядным) значением, нижние 5 бит правого операнда определяют, сколько битов левого операнда сдвигаются.

Если левый операнд является длинным (64-разрядным) значением, нижние 6 бит правого операнда определяют, сколько битов левого операнда сдвигаются.

Выражение Результат Двоичный результат
21 0001 0101
42 0010 1010
84 0101 0100

В побитовой операции сдвига вправо все биты перемещаются вправо, где «n» задается правым операндом. Оператор shift-right (-shr) вставляет ноль в левое место при перемещении положительного или неподписаемого значения вправо.

Если левый операнд является целочисленным (32-разрядным) значением, нижние 5 бит правого операнда определяют, сколько битов левого операнда сдвигаются.

Если левый операнд является длинным (64-разрядным) значением, нижние 6 бит правого операнда определяют, сколько битов левого операнда сдвигаются.

Выражение Результат Двоичные данные Hex
21 0001 0101 0x15
10 0000 1010 0x0A
5 0000 0101 0x05
0000 0000 0x00
21 0001 0101 0x15
21 0001 0101 0x15
10 0000 1010 0x0A
5 0000 0101 0x05
1073741823 0x3FFFFFFF
-1073741824 0xC0000000
-1 0xFFFFFFFF

Примеры

Пример 1. Получение остановленных служб

Эти команды получают список всех служб, которые в настоящее время остановлены. Автоматическая переменная представляет каждый объект, передаваемый командлету .

Первая команда использует формат блока скрипта, вторая — формат инструкции сравнения. Команды эквивалентны и взаимозаменяемы.

Пример 2. Получение процессов на основе рабочего набора

Эти команды перечисляют процессы с рабочим набором более 250 мегабайт (МБ). Синтаксис scriptblock и оператора эквивалентен и может использоваться взаимозаменяемо.

Пример 3. Получение процессов на основе имени процесса

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

Синтаксис scriptblock и оператора эквивалентен и может использоваться взаимозаменяемо.

Пример 4. Использование формата инструкции сравнения

В этом примере показано, как использовать новый формат инструкции сравнения командлета .

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

Вторая команда является более естественным способом использованием формата команды сравнения. Псевдоним заменяется именем командлета , а все необязательные имена параметров опущены.

Пример 5. Получение команд на основе свойств

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

Пример 6. Использование нескольких условий

В этом примере показано, как создать команду с несколькими условиями.

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

В примере используется формат команды блока сценария. Логические операторы, такие как And и Or, допустимы только в блоках скриптов. Их нельзя использовать в формате инструкции сравнения команды.

  • Дополнительные сведения о логических операторах PowerShell см. в разделе about_Logical_Operators.
  • Дополнительные сведения о функции обновляемой справки см. в разделе about_Updatable_Help.

Подробное описание

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

Равенство

  • , , — равно
  • , , — не равно
  • , , — больше
  • , , — больше или равно
  • , — меньше
  • , — меньше или равно

Соответствующие

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

Замена

-replace, — -ireplace-creplace заменяет строки, соответствующие шаблону регулярного выражения.

Сдерживания

  • , — коллекция содержит значение
  • , , — коллекция не содержит значения
  • — значение находится в коллекции.
  • — значение не находится в коллекции.

Тип

  • — оба объекта являются одинаковыми типами.
  • — объекты не совпадают с типом.

Подробное описание

Начиная с PowerShell 7, PowerShell реализует операторы и для условного связывания конвейеров. Эти операторы известны в PowerShell как операторы цепочки конвейеров и похожи на в оболочках POSIX, таких как bash, zsh и sh, а также в командной оболочке Windows (cmd.exe).

Оператор выполняет конвейер в правой части, если конвейер в левой части был выполнен успешно. И наоборот, оператор выполняет конвейер в правой части, если конвейер в левой части не удалось выполнить.

Для определения того, был ли выполнен конвейер, эти операторы используют переменные и . Это позволяет использовать их с собственными командами, а не только с командлетами или функциями. Пример:

Примеры

Первая команда завершается ошибкой, поэтому выполняется вторая команда

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

работает так же, как

и

работает так же, как

Назначение из цепочек конвейера

При назначении переменной из цепочки конвейера выполняется объединение всех конвейеров в цепочке:

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

Синтаксис и приоритет операторов

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

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

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

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

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

будет сгруппироваться как:

эквивалентно:

Взаимодействие с ошибками

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

Например:

Даже если ошибка перехватится, цепочка конвейера по-прежнему завершается:

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

Связывание конвейеров, а не команд

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

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

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

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