Как работать с операторами сравнения в Powershell


08 июля 2019


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

С помощью операторов сравнения в powershell мы можем выяснить содержит ли значение какую-то строку, равно, больше или меньше какого-то значения и т.д. Обычно мы привыкли использовать <, >, !=, = и другие символы, но в 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

 

Оператор сравнения 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 операторы and eq и gt

 

Оператор сравнения 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"}

Оператор powershell not like

В этом случае вернется True:

"TestWord" -match "estW"

А в этом только строковые значения:

"Один", 1 ,"два", 2, "три", 3 -match "[А-я]"

Оператор Match powershell

В этом только значения, где есть числа от 2 до 9:

"Один1", 1, "два2", 2, "три3", 3 -match "[2-9]"

Оператор match powershell

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.