Как и в любом языке программирования в PowerShell также присутствуют операторы сравнения, при чём не в обычном для людей виде знаков <, >, =.
Вместо знаков в PowerShell используются буквы, которые обозначают сами слова сравнения, например -gt означает Greater than (Больше).
Таблица операторов сравнения
| Оператор | Значение | Описание | 
|---|---|---|
| -le | Less than or equal | Меньше или равно | 
| -lt | Less than | Меньше чем | 
| -ge | Greater than or equal | Больше или равно | 
| -gt | Greater than | Больше чем | 
| -ne | Not equal | Не равно | 
| -eq | Equal | Равно | 
| -like | Wildcard comparison | Поиск по шаблону | 
| -notlike | Wildcard comparison | Поиск по несоответствию шаблонов | 
| -match | Regular expression comparison | Поиск соответствия по регулярным выражениям | 
| -notmatch | Regular expression comparison | Поиск несоответствия по регулярным выражениям | 
| -in | Containment operator | Поиск по коллекции | 
| -notin | Containment operator | Поиск по коллекции (не содержит) | 
| -replace | Replace operator | Заменяет часть или всё значение | 
| -is | Type | Возвращает true если объекты одинаковы | 
| -isnot | Type | Возвращает true если объекты неодинаковы | 
le
Этот оператор означает меньше или равно и эквивалентен <=.
5 -le 8
5 -le 5
True
True
lt
Этот оператор означает меньше и эквивалентен <.
5 -le 8
True
ge
Этот оператор означает больше или равно и эквивалентен >=.
5 -ge 8
10 -ge 8
10 -ge 10
False
True
True
gt
Этот оператор означает больше и эквивалентен >.
5 -gt 8
12 -gt 8
False
True
ne
Этот оператор означает не равно и также может использоваться для сравнения буквенных значений.
2 -ne  2
"abc" -ne  "def"
"abc" -ne  "abc"
False
True
False
eq
Этот оператор означает равно и также может использоваться для сравнения буквенных значений.
2 -eq  2
"abc" -eq  "def"
"abc" -eq  "abc"
True
False
True
like
Этот оператор сопоставления и ведёт себя аналогично оператору -eq но работает только со словами и также может принимать регулярные выражения.
"my home here" -like "home"
"my home here" -like "*home*"
False
True
notlike
Этот оператор сопоставления и ведёт себя аналогично оператору -ne но работает только со словами и также может принимать регулярные выражения.
"my home here" -notlike "*home*"
"my home here" -notlike "*abc*"
False
True
match
Этот оператор сопоставления и ведёт себя аналогично оператору -like только с отличием того что он не обращает внимание на место символа поиска в строке.
Также при использовании -notmatch и -match создаётся автоматически переменная $Matches, к которой вы можете получить доступ.
"my home here" -like "home"
"my home here" -like "*home*"
"my home here" -match "home"
"my home here" -match "h[qoea]me"
False
True
True
True
Используя -match вы также можете разбивать какую-либо строку на переменные присваивая им значения слов из этого предложения используя регулярные выражения.
"I saw Helen yestrday" -match '.*\s(?<name>\w+)\s(?<date>\w+)'
$Matches
Name                           Value
----                           -----
date                           yestrday
name                           Helen
0                              I saw Helen yestrday
notmatch
Этот оператор сопоставления и ведёт себя аналогично оператору -notlike только с отличием того что он не обращает внимание на место символа поиска в строке.
"my home here" -notlike "*home*"
"my home here" -notlike "*abc*"
"my home here" -notmatch "home"
"my home here" -notmatch "h[aedb]me"
False
True
False
True
in and notin
Этот оператор себя как оператор -like только здесь вы можете для сравнения передать сразу коллекцию для сопоставления. Т.е. вместо того чтобы сопоставлять по одному значению вы делаете множественное сопоставление.
"avb" -in  "avb", "def"
"avb" -in  "asd", "def", "dasd", "derwerf", "grtg"
True
False
"avb" -notin  "avb", "def"
"avb" -notin  "asd", "def", "dasd", "derwerf", "grtg"
False
True
replace
Как уже понятно из названия этот оператор служит для замены значения. Например, вы можете переименовывать названия всех документов в папке используя регулярные выражения.
Пример с изменением расширения всех log файлов в текущей директории.
Get-ChildItem *.log | Rename-Item -NewName { $_.name -replace  '\.log$','.txt' }
Если вам важна чувствительность к регистру можно воспользоваться оператором -creplace.
"my home here" -replace "home", "****"
"my home here" -replace "\s(\w+)\s", " **** "
"my home here" -replace "HOME", "****"
"my home here" -creplace "HOME", "****"
my **** here
my **** here
my **** here
my home here
is and isnot
Операторы сравнения типов (-is и -isnot) используются для определения того, относится ли объект к определенному типу. Возвращает Boolean значение: true или false.
"abs" -is [int]
"abs" -isnot [int]
123 -is [int]
123 -isnot [int]
"abs" -is [string]
False
True
True
False
True


Комментарии