02.12.2021
Logo

Операторы сравнения или логические операторы

Сегодня мы рассмотрим операторы сравнения – это часть синтаксиса, без которой не обойдется, пожалуй, ни один сколь-нибудь хороший скрипт. Они могут применяться как для ветвлений сценариев, различных проверок, так и фильтрации вывода.

Операторы сравнения. Общая конструкция

Мы не будем останавливаться на описании алгоритмов ветвления. А будем считать, что у Вас уже есть хотя бы базовое представление об этом. И рассмотрим только реализацию этих алгоритмов непосредственно в powershell.

Перейдем к наиболее используемым операторам сравнения:

Операторбез учета регистрас учетом регистра
Равно-eq-ceq
Не равно-ne-cne
Больше-gt-cgt
Меньше-lt-clt
Больше или равно-ge-cge
Меньше или равно-le-cle

Общая конструкция сравнения выглядит следующим образом:

Объект1 <Оператор сравнения> Объект2

Результатом сравнения двух и более объектов или их свойств в зависимости от условия является Истина или Ложь. В powershell эти значения содержатся в двух константах: $true и $false соответственно.

В качестве демонстрации рассмотрим следующие примеры:

"abcd" -eq "ABCD"
True

"abcd" -ceq "ABCD"
False

10 -lt 8
False

7 -ge 7
True

Операторы сравнения. Множественные критерии

Для более гибкого ветвления или фильтрации возможна проверка сразу нескольких условий. Для этого применяются булевы функции AND, NOT, OR, XOR или их комбинации.

Объект1 <Оператор сравнения> Объект2 -AND Объект3 <Оператор сравнения> Объект4 -OR Объект5 <Оператор сравнения> Объект6

Порядок проверки условий можно определять путем их заключения в круглые скобки. Рассмотрим пример:

3 -lt 5 -and 3 -eq 3 -or 6 -gt 2
True

3 -lt 5 -and (3 -eq 3 -or 6 -gt 2)
False

Все, что мы сделали – добавили скобки, тем самым изменив порядок отработки условий. И результат перевернулся с ног на голову.

Фильтрация и проверки

Логические операторы позволяют производить фильтрацию набора объектов по заданному условию. В большинстве случаев для этих целей применяется командлет Where-Object. Но некоторые команды могут иметь специальный параметр -filter. Он позволяет осуществлять фильтрацию объектов еще на этапе формирования списка объектов, а не после пайпа (“|”). Подробнее о Where-Object

Командлет Where-Object всегда должен принимать какой-нибудь набор объектов, т.к. он служит именно для фильтрации. Как получить справку по команде, можно узнать здесь. Для примера получим список всех процессов браузера Chrome

Chrome process
Процессы Chrome

и отфильтруем их по памяти и ЦПУ:

Get-Process chrome | Where-Object {$PSItem.CPU -gt 5 -and $PSItem.WS -gt 100000000}

Handles NPM(K) PM(K)  WS(K)  CPU(s) Id    SI ProcessName
------- ------ -----  -----  ------ --    -- -----------
351     20     116656 154096 13,53  3608  1  chrome
341     22     79636  122464 24,36  4284  1  chrome
2821    80     178392 283320 533,84 10492 1  chrome
307     21     92476  126928 8,27   12220 1  chrome
445     29     228544 268308 230,39 12608 1  chrome
239     15     141592 165592 53,23  12636 1  chrome
895     55     421084 249276 711,08 13040 1  chrome

Как мы видим командлет Where-Object содержит исполняемую часть, в которой и происходит проверка условий. Эта часть команды обозначается фигурными скобками. Но если фильтрация происходит только по одному условию, фигурные скобки можно опустить. Например:

Get-Service | Where-Object Status -eq "Running"

будет эквивалентно варианту

Get-Service | Where-Object {$_.Status -eq "Running"}

Переменная $PSItem означает текущий обрабатываемый объект. Так же она имеет более короткий и потому и более распространенный вариант – $_.

В процессе выполнения скрипта может возникать необходимость в проверке соответствия значения параметров объекта условиям. От которых может зависеть алгоритм дальнейшей работы скрипта. В такой ситуации так же применяются логические операторы, но уже с командлетами ветвления. Такими как If, Else и Switch, например.

Анонс следующей статьи: “Последовательная обработка списков и перечисления”.

Игорь Чердаков

Мне 32 года. На текущий момент я являюсь администратором систем Microsoft в одной из крупнейших компаний в России. За моими плечами практически 7 лет опыта работы в IT, последние 3 из которых в администрировании. Сопровождая немалую инфраструктуру, в ежедневной деятельности я сталкиваюсь с необходимостью автоматизации рутинных процессов, в чем мне успешно помогает Powershell. Данный блог основывается на моем личном опыте и знаниях. Мои статьи не являются истиной в последней инстанции и я положительно отношусь к обоснованной и конструктивной критике. По этому я приглашаю Вас обсуждать волнующие нас вопросы, связанные с Powershell.

Посмотреть все записи автора Игорь Чердаков →

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *