Операторы PowerShell [Полное руководство]
Используя PowerShell, вы можете использовать широкий спектр операторов в своем скрипте. Их можно использовать в командах или выражениях, и они служат для выполнения сравнений, определения условий или присвоения и манипулирования значениями.
Если вы используете PowerShell 7, вы также можете использовать новые тернарные операторы. Они позволяют вам создавать условные операторы в одной строке, делая ваш код более читабельным.
В этой статье мы рассмотрим разные операторы. Я разделил их на группы, чтобы вам было проще к ним обращаться.
Операторы присваивания
Наиболее часто используемыми операторами являются операторы присваивания. Эти операторы используются для присвоения, манипулирования или добавления значений к переменным.
| Оператор | Пример | Описание |
|---|---|---|
| = | $a=5 | Присваивает значение справа слева. |
| += | $a += 3 | Добавляет правый операнд к левому и присваивает его. |
| -= | $a -= 2 | Вычитает правый операнд из левого и присваивает результат. |
| *= | $a *= 4 | Умножает левый операнд на правый и присваивает результат. |
| /= | $a /= 2 | Делит левый операнд на правый и присваивает результат. |
Например, мы можем присвоить значению 10 переменной $count и добавить к нему 5, в итоге получив 15:
$count = 10
$count += 5
Write-Output $count # Outputs 15Операторы сравнения
Операторы сравнения в PowerShell можно разделить на 4 группы. У нас есть операторы для сравнения значений, например, чтобы проверить, больше ли $a, чем $b, с помощью ($a -gt $b), операторы для поиска и даже замены шаблонов, для проверки, присутствует ли значение в наборе, и для проверки, является ли объект конкретным типом.
Основные операторы сравнения в PowerShell:
| Оператор | Пример | Описание |
|---|---|---|
| -eq | 5 -eq $a | Возвращает True, если оба операнда равны. |
| -ne | 5 -не $a | Возвращает True, если операнды не равны. |
| -gt | $a -gt 5 | Возвращает True, если левый операнд больше. |
| -lt | $a -lt 5 | Возвращает True, если левый операнд меньше. |
| -ge | 5 -ge $a | Возвращает True, если левый операнд больше или равен. |
| -le | 5 -ле $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, если массив не содержит это значение. |
| -in | 5 -в $массиве | Возвращает True, если левый операнд находится в массиве. |
| -notin | 5 -нет в $массиве | Возвращает 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 | (‘один’,’два’) -присоединить ‘,’ | Объединяет элементы массива в одну строку. |
Операторы типа
Мы также видели оператор типа -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, чтобы не пропустить последние статьи.