Поиск по сайту:

Операторы PowerShell [Полное руководство]


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

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

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

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

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

ОператорПримерОписание
=$a=5Присваивает значение справа слева.
+=$a += 3Добавляет правый операнд к левому и присваивает его.
-=$a -= 2Вычитает правый операнд из левого и присваивает результат.
*=$a *= 4Умножает левый операнд на правый и присваивает результат.
/=$a /= 2Делит левый операнд на правый и присваивает результат.
Операторы присваивания PowerShell

Например, мы можем присвоить значению 10 переменной $count и добавить к нему 5, в итоге получив 15:

$count = 10
$count += 5
Write-Output $count  # Outputs 15

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

Операторы сравнения в PowerShell можно разделить на 4 группы. У нас есть операторы для сравнения значений, например, чтобы проверить, больше ли $a, чем $b, с помощью ($a -gt $b), операторы для поиска и даже замены шаблонов, для проверки, присутствует ли значение в наборе, и для проверки, является ли объект конкретным типом.

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

ОператорПримерОписание
-eq5 -eq $aВозвращает True, если оба операнда равны.
-ne5 -не $aВозвращает True, если операнды не равны.
-gt$a -gt 5Возвращает True, если левый операнд больше.
-lt$a -lt 5Возвращает True, если левый операнд меньше.
-ge5 -ge $aВозвращает True, если левый операнд больше или равен.
-le5 -ле $aВозвращает True, если левый операнд меньше или равен.
базовые операторы сравнения

Как вы можете видеть в таблице выше, переменная находится справа при использовании операторов равенства. Это происходит потому, что когда вы используете оператор -eq между массивом и скалярным значением (например, числом), PowerShell не возвращает True или False.

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

$a = 0,1,2,3
$a -eq 0 # Returns 0
0 -eq $a # Returns False

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

ОператорПримерОписание
-match$string - совпадает с “foo”Возвращает True, если строка соответствует шаблону regex.
-notmatch$string -не соответствует “foo”Возвращает True, если строка не соответствует шаблону регулярного выражения.
-replace$строка -заменить “foo”, “bar”Заменяет текст, который совпадает с шаблоном регулярного выражения.
-like$string -like "foo*"Возвращает True, если строка соответствует шаблону подстановки.
-notlike$string -не соответствует “foo*”Возвращает True, если строка не соответствует шаблону с подстановочными знаками.
Операторы сравнения строк

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

Единственное отличие между ними — это место значения и коллекции. Какой из них использовать, действительно зависит от контекста.

ОператорПримерОписание
-contains$array содержит 5Возвращает True, если массив содержит указанное значение.
-notcontains$array -не содержит 5Возвращает True, если массив не содержит это значение.
-in5 -в $массивеВозвращает True, если левый операнд находится в массиве.
-notin5 -нет в $массивеВозвращает True, если левый операнд не находится в массиве.
операторы сравнения по содержанию
$numbers = 2, 4, 6, 8, 10

if ($numbers -contains 4) {
    Write-Output "The array contains 4."
}

Последними операторами сравнения, которые мы можем использовать в PowerShell, являются операторы -is. Этот оператор не используется часто, но позволяет проверить, является ли объект указанного типа или нет.

ОператорПримерОписание
-is$object -является [Тип]Возвращает True, если объект является указанного типа.
-isnot$object -не [Type]Возвращает True, если объект не является указанным типом.

Логические операторы

Логические операторы используются для соединения условных операторов в PowerShell в одно выражение.

ОператорПримерОписание
-and(5 больше 3) -и (6 больше 2)Возвращает True, если оба условия истинны.
-or(5 больше 7) - или (8 больше 2)Возвращает True, если любое из условий истинно.
-not-не (5=5)Обращает логику своего операнда.
!!(3 - равно 4)Короткая форма -not.
Логические операторы

Например, мы можем использовать оператор -and, чтобы проверить, находится ли значение меньше 10 и больше 2, с помощью следующей команды:

$val = 5
if ($val -lt 10 -and $val -gt 2)  {
    Write-Output "Both conditions are met"
}

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

Операторы перенаправления в PowerShell имеют некоторые сходства с операторами из Командной строки. Но у PowerShell также есть и свои собственные.

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

ОператорПримерОписание
>Получить-Процесс > процессы.txtПеренаправляет стандартный вывод в файл.
>>Получить-Процесс >> лог.txtДобавляет стандартный вывод в файл.
2>Получить-команду xyz 2> ошибки.txtПеренаправляет вывод ошибок в файл.
2>>Получить команду xyz 2>> errors.logДобавляет вывод ошибок в файл.
2>&1Получить-Процесс 2>&1 alloutput.txtПеренаправляет поток ошибок в поток успеха
*>Получить-Процесс *> alloutput.txtПеренаправляет все потоки в файл
Операторы перенаправления

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

Write only the error to the file:
Get-ProcessCpu -name "explorer2" 2> C:\temp\process-error-log.txt

Операторы Split и Join

Операторы split и join используются для разбиения или объединения строк.

ОператорПримерОписание
-split'один, два, три' -разделить ','Разделяет строку на массив на основе разделителя.
-join(‘один’,’два’) -присоединить ‘,’Объединяет элементы массива в одну строку.
Операторы Split и Join

Операторы типа

Мы также видели оператор типа -is в разделе операторов сравнения. Этот оператор используется для проверки, является ли переменная определенного типа. Но помимо оператора -is, мы также можем использовать оператор -as для преобразования переменной в определенный тип.

ОператорПримерОписание
-is$var -is [int]Проверяет, является ли переменная заданного типа.
-as$var -as [строка]Пытается преобразовать переменную в указанный тип.
[Тип][int]$varПриводит переменную к указанному типу.
Операторы типа

Оператор -as особенно полезен, когда вам нужно преобразовать строку в целое число, например.

$number = "123"
if ($number -is [string]) {
    $converted = $number -as [int]
    Write-Output "Converted: $converted"
}

Унарные операторы

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

ОператорПримерОписание
--$varОтрицает значение операнда.
++++$varУвеличивает значение операнда на 1.
—-$varУменьшает значение операнда на 1.
Унарные операторы

Специальные операторы

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

ОператорПримерОписание
&& script.ps1Выполняет скрипт или команду.
.. скрипт.ps1Выполняет скрипт в текущей области видимости.
()(а + б) * cУбедитесь, что выражения оцениваются в определённом порядке
$()$(Получить-дату)Оператор подвыражения; выполняет команду в подвыражении.
`«Это обратная кавычка `n»Экранирующий символ; используется для включения специальных символов в строки.
..$a=1..10Создайте массив с диапазоном целых чисел от 1 до 10.
Специальные операторы

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

$path = "C:\MyScripts\script.ps1"
if ((Get-Item $path).Length -gt 100) {
 Write-Host "Long path"
}

Таблица тернарного оператора

Тернарный оператор был введен в PowerShell 7. Он упрощает операторы if-else, делая их более читабельными. Я рекомендую использовать тернарный оператор только для коротких операторов if-else, которые помещаются на одной строке.

ОператорПримерОписание
?$result=($x > 10) ? 'Высокий' : 'Низкий'Возвращает Высоко, если $x больше 10,
иначе возвращает Низко.
Тернарный оператор

В примере ниже мы проверяем, больше ли переменная $x, чем 10. Если это так, мы устанавливаем статус на высокий, иначе - на низкий:

Define a variable
$x = 15

Use the ternary operator to assign a value based on a condition
$status = ($x -gt 10) ? 'High' : 'Low'

Output the result
Write-Output "The status is $status"

Операторы объединения с нулем

Оператор объединения по нулю ?? в PowerShell 7 позволяет быстро проверить, является ли данная переменная нулевой, и установить значение по умолчанию вместо этого.

Если значение с левой стороны оператора равно null, то возвращается значение с правой стороны (которое также может быть переменной). Вы также можете объединить несколько операторов объединения с null, чтобы найти первое ненулевое значение.

ОператорПримерОписание
??$result=$value ?? DefaultValueВозвращает $value, если он не равен null; в противном случае возвращает DefaultValue.
??=$value ??= DefaultValueПрисваивает DefaultValue переменной $value, если $value равно null.
?$result=$object?.СвойствоПолучает Свойство $object только если $object не равен null.
?$element=$array?[index]Получает элемент по index в $array только если $array не равен null.
Операторы объединения с нулем

Одно из приятных аспектов операторов объединения с нулем заключается в том, что они позволяют вам, например, получать доступ к свойству объекта только в том случае, если этот объект не равен нулю:

Define an object with a property
$person = [PSCustomObject]@{ Name = "Alice" }

Access the 'Name' property only if $person is not null
$name = $person?.Name

Заключение

В PowerShell есть много операторов, которые мы можем использовать. Большинство из них довольно распространены и также используются в других языках программирования. Но если вы относительно новы в сценариях или программировании, убедитесь, что вы уделяете особое внимание операторам объединения с нулем и тернарным операторам в PowerShell 7.

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