С помощью операторов сравнения в powershell мы можем выяснить содержит ли значение какую-то строку, равно, больше или меньше какого-то значения и т.д. Обычно мы привыкли использовать <, >, !=, = и другие символы, но в powershell все работает иначе.
У нас есть такие операторы в powershell:
Операторы возвращают True, если утверждение верно и False, если нет
Оператор сравнения Powershell EQ
На примере сравнения дат:
(Get-Date).Day -eq 8
Вернет True, т.к. сегодня 8-ой день месяца и оба значения равны. Даты, за исключением дня месяца, должны быть в специальном формате datetime.
Или иначе:
(Get-Date) -eq ((Get-Date).AddDays(-15))
Вернет False т.к. слева сегодняшняя дата с права 15 дней до.
Так мы можем найти файлы, которые были 7 дней назад:
Get-ChildItem | where {$_.CreationTime -eq ((Get-Date).AddDays(-7))}
Оператор сравнения Powershell LT и LE
Опять же сравним даты powershell:
$today = Get-Date
$next_week = Get-Date -Day 15 -Year 2019 -Month 7
$today -lt $next_week
Вернет False т.к. дата справа меньше чем слева.
$last_year = Get-Date -Year 2018
$today_year = (Get-Date).Year
$last_year.Year -lt $today_year
Вернет True.
Оператор LE в отличие от LT вернет True так же, если значение равно:
2018 -le 2018
Так мы найдем файлы, которые были созданы менее чем 7 дней назад или созданные в 18 день месяца:
Get-ChildItem | where {$_.CreationTime -le ((Get-Date).AddDays(-7)) -or ($_.CreationTime).Day -eq 18 }
Оператор сравнения Powershell GT и GE
Работает аналогично:
1 -GT 2
Вернет False т.к. 1 не больше 2
1 -GE 1
Вернут True т.к. мы проверяем еще и равенство.
"Four".length -GE 4
Тоже вернет True т.к. длина строки Four 4.
На примере поиска процессов:
Get-Process | where {$_.Processname -eq "svchost" -and $_.CPU -gt 5}
Т.е. мы ищем процессы, где имя равно svchost и значение CPU больше 5.
Оператор сравнения Powershell Like и Match
Like от Match отличается в тем, что в Like мы ищем строчки используя Wildcardr *, а в Match мы можем использовать регулярные выражения:
"fixmypc" -like "*fix*"
Вернет True, т.к. * говорит что слева и справа может находиться еще символы.
Если добавить букву c, получится -clike, что значит Case-Sensetive (чувствителен к регистру). В этом случае буква А и а будут разными. По умолчанию, в windows регистр не имеет значение:
"Fixmypc" -clike "fix"
Так мы уберем из вывода все процессы, которые не содержат sv в начале и t в конце строки:
Get-Process | where {$_.Name -notlike "sv*t"}
В этом случае вернется True:
"TestWord" -match "estW"
А в этом только строковые значения:
"Один", 1 ,"два", 2, "три", 3 -match "[А-я]"
В этом только значения, где есть числа от 2 до 9:
"Один1", 1, "два2", 2, "три3", 3 -match "[2-9]"
...
Подписывайтесь на наш Telegram канал
Теги: #powershell