Как и в любом языке программирования в 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
Комментарии