Сравнение powershell: Операторы Windows PowerShell | Windows IT Pro/RE

Содержание

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

С помощью операторов сравнения в 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

Операторы сравнения в PowerShell | Заметки системного администратора

По умолчанию все операторы сравнения не являются чувствительными к регистру.
-eqEqualРавно
-neNot equalНе Равно
-geGreater than or equalБольше или Равно
-gtGreater thanБольше
-ltLess thanМеньше
-leLess than or equalМеньше или Равно
-likeWildcard comparisonИспользование символов подстановки для поиска соответствия образцу
-notlikeWildcard comparisonИспользование символов подстановки для поиска несоответствия образцу
-matchRegular expression comparisonИспользование регулярных выражений для поиска соответствия образцу
-notmatchRegular expression comparisonИспользование регулярных выражений для поиска несоответствия образцу
-replaceReplace operatorЗаменяет часть или все значение слева от оператора
-containsContainment operatorОпределение, содержит ли значение слева от оператора значение справа. В отличие от предыдущих операторов, результатом является булево значение
-notcontainsContainment operatorОпределение того, что значение слева от оператора не содержит значение справа. Результатом является булево значение

 

Для сравнения с учетом регистра к команде подставляется префикс «c». Для примера, оператор -eq с зависимостью от регистра изменяется на «-ceq».

Для явно заданного независящего от регистра сравнения к команде подставляется префикс «i». Пример: оператор -replace без зависимости от регистра будет -ireplace

Типы

-isЯвляется типом
-isnotНе является типом
-asКак тип, без ошибки если возникает неудача преобразования
Логические операторы PowerShell
-andОба условия должны быть истины, чтобы выражение было истинно
-orОдно или оба условия должны быть истины, чтобы выражение было истинно
-xorОдно условие должно быть истинно, а второе должно иметь значение «ложь», чтобы выражение было истинно
-notУказанные условия должны иметь значение «ложь», чтобы выражение было истинно
!Указанное условие должно иметь значение «ложь», чтобы выражение было истинно

Оригинал статьи

Сайт работает на WordPress

Операторы сравнения PowerShell -eq, -lt, -gt, -contains, -like, -match – 4sysops

Для условных операторов или циклов необходимо сравнивать значения, чтобы контролировать ход выполнения скрипта. Как и все современные языки сценариев, PowerShell поддерживает операторы if/else, switch и соответствующие операторы сравнения. Однако здесь PowerShell отличается от других популярных языков программирования для Windows и Интернета.

Содержание

  1. Сравнение различных типов данных
  2. Сравнение строк
  3. -like и подстановочные знаки
  4. Поиск в коллекциях с -contains
  5. Поиск подстроки с -match
  • Автор
  • Последние сообщения

Вольфганг Зоммергут

Вольфганг Зоммергут имеет более чем 20-летний опыт работы в IT журналистика. Он также работал системным администратором и техническим консультантом. Сегодня он руководит немецким изданием WindowsPro.de.

Последние сообщения Вольфганга Зоммергута (посмотреть все)

Если вы привыкли к таким операторам, как > или < или =, вам придется переосмыслить их. Как и в пакетных сценариях, PowerShell использует сокращения соответствующих английских слов.

-экв Равно
-ne Не равно
-lt Менее
-ле Меньше или равно
-gt Больше
-ge Больше или равно

Вам не нужен оператор if для проверки результата операции сравнения. Без оператора if результатом сравнения будет просто TRUE или FALSE. Например:

 "Оператор".length -gt 7 

дает ИСТИНА, так как слово «Оператор» состоит более чем из семи букв.

Сравнение различных типов данных

Как и в большинстве языков сценариев, в PowerShell вы можете применять операторы сравнения к различным типам данных. Однако это имеет смысл в первую очередь для числовых значений, хотя возможно сравнение и для строк. В случае струн только — eq и -ne полезны для определения равенства или неравенства. Сравнение размеров строк требуется редко.

 "Peter" -gt "Paul" 

дает TRUE, но не потому, что «Peter» является более длинной строкой, чем «Paul». Вместо этого операция сравнивает строки посимвольно, пока не обнаружит два разных символа. Тот, у которого большее значение ASCII, определяет, считается ли строка большей или меньшей. В приведенном выше примере «Петр» больше, чем «Пол», потому что «е» имеет большее значение ASCII, чем «а».

Опасность путаницы с оператором присваивания

Одной из возможных ловушек, с которой можно столкнуться, является путаница -eq с «=». В PowerShell знак равенства служит оператором присваивания, а не оператором сравнения. Если вы неправильно используете его в операторе if, это может привести к нежелательным результатам, если переменная находится в левой части оператора:

 if($a = "Peter"){
…
} 

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

Сравнение строк

Несмотря на то, что вы можете применять вышеуказанные операторы к строкам, для этой цели следует использовать другие операторы. По сути, операторы, описанные ниже, выполняют поиск подстрок и сопоставление с образцом.

-подобные и подстановочные знаки

Вы можете легко выполнить поиск подстроки с помощью оператора -подобного , определяя, содержится ли строка в другой строке. Если строки не идентичны, вам нужны подстановочные знаки:

 "PowerShell" - как "Pow*" 

Результатом этого выражения является ИСТИНА; однако без подстановочного знака это было бы FALSE. Если вы хотите найти строку внутри другой строки, вы должны использовать подстановочные знаки в начале и в конце. В приведенном выше примере вы можете искать «она» в «PowerShell» с помощью *she*. Альтернативой «*» является «?», которую вы можете использовать в качестве заполнителя для одного символа. Сравнение с — , например и –eq игнорирует символы верхнего и нижнего регистра. Как и -eq , — как имеет аналог, который называется — не как .

Поиск в коллекциях с -contains

Другой оператор, который может быть ошибочно воспринят как оператор поиска подстроки, это -contains . Однако его цель — решить, содержит ли массив определенный элемент:

 $w = "Декабрь", "Январь", "Февраль"
$w -содержит "Февраль" 

Результат сравнения ИСТИНА. Однако, если вы хотите использовать подстановочные знаки в строках — как и , сравнение не удастся, так как подстановочные знаки не поддерживаются. Подстроки без подстановочных знаков также приводят к FALSE, поскольку требуется точное совпадение с элементом коллекции. Чтобы проверить, не содержит ли определенный массив определенный элемент, вы можете использовать оператор -notcontains .

Поиск подстроки с помощью -match

Третий оператор, называемый -match , полезен для поиска подстроки и сопоставления с образцом с помощью регулярных выражений. Если вы не используете RegEx, вы можете легко определить, содержится ли строка во второй строке:

Подпишитесь на рассылку 4sysops!

 "PowerShell" - соответствует "ower" 

приводит к TRUE. Тест не требует подстановочных знаков, даже если искомая строка содержится в другой строке. Оператор -match также имеет аналог: -notmatch .

Что такое операторы сравнения PowerShell?

Abhilash

Бесплатный курс собеседования по проектированию систем

Многим кандидатам отказывают в приеме на работу или понижают их уровень из-за плохой успеваемости на собеседовании по проектированию систем. Выделитесь на собеседованиях по проектированию систем и получите работу в 2023 году благодаря этому популярному бесплатному курсу.

Операторы сравнения PowerShell используются для сравнения значений. В PowerShell существует четыре различных категории операторов сравнения. Они следующие:

  1. Операторы равенства
  2. Операторы сопоставления
  3. Сменные приводы
  4. Операторы защитной оболочки
  5. Операторы проверки типа

Операторы равенства

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

Оператор Описание
-экв Проверяет, равны ли два значения
-не Проверяет, не равны ли два значения
-gt Проверяет, больше ли левая часть, чем правая
Проверяет, меньше ли левая часть, чем правая
-ге Проверяет, больше ли левая часть или равна правой части
-ле Проверяет, меньше ли левая часть или равна правой части

Синтаксис

 <левая часть> <оператор> <правая часть>
 

Сравнение может быть чувствительным к регистру или нечувствительным к регистру. Следовательно, чтобы выполнить сравнение с учетом регистра, добавьте к вышеуказанным операторам префикс 9.0194 c , например -ceq , -cne , -clt , -cgt и т.д. 0195 т.е. -ieq , -ine , -ilt , -igt и т. д.

Пример кода

Следующий код выполняется в терминале ниже:

 $a=10
$b=5
($а -экв $б)
($a -gt $b)
($b -ле $а)
 

Здесь мы определяем две переменные, a и b и применять разные операторы равенства.

Терминал 1

Терминал

Загрузка…

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

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

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

Синтаксис

  [-like | -notlike] <выражение-шаблона>
<строка[]> [-match | -notmatch] <регулярное-выражение>
 

Сопоставление может быть чувствительным к регистру или нечувствительным к регистру. Следовательно, для выполнения префикса с учетом регистра используйте указанные выше операторы с c , например -clike , -cnotlike , -cmatch , -cnotmatch .

Аналогичным образом, чтобы выполнить префикс сопоставления без учета регистра, используйте вышеуказанные операторы с i , например -ilike , -inotlike , -imatch , -inotmatch .

Пример кода

Следующий код выполняется на следующем терминале:

 pwsh
$a="Образовательный"
$b="образование*"
$а-подобный$б
$b="Обучение*"
$а - как $б
$а - не похоже $б
$a="понедельник", "вторник", "среда"
$b="ср"
$а - совпадение $б
 

Здесь мы определяем две переменные, a и b , и применяем разные операторы сопоставления.

Терминал 1

Терминал

Загрузка…

Операторы замены

Операторы замены используются для замены строки, соответствующей данному регулярному выражению, на значение замены.

Оператор Описание
-заменить Проверяет, соответствует ли строка подстановочному шаблону

Синтаксис

  -replace , 
 

Замена может быть чувствительной к регистру или нечувствительной к регистру. Следовательно, чтобы выполнить замену с учетом регистра, добавьте к вышеуказанным операторам префикс c 9019.5 таких как -заменить .

Аналогичным образом, для выполнения замены без учета регистра перед вышеуказанными операторами следует добавить префикс i , например -ireplace .

Пример кода

Следующий код выполняется в терминале ниже.

 $a="Образовательный и педагогический"
$a - заменить "edpresso", "Ответы"
 

Здесь мы определяем две переменные, a и b , и применяем разные операторы замены.

Терминал 1

Терминал

Загрузка...

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

Операторы включения используются для проверки того, содержит ли коллекция значение или нет.

Оператор Описание
-содержит Проверяет, содержит ли коллекция значение
-не содержит Проверяет, содержит ли коллекция значение
Проверяет, содержится ли значение в коллекции
- кроме Проверяет, не содержится ли значение в коллекции

Синтаксис

 <Коллекция> [-содержит | -notcontains] <тест-объект>
<тестовый объект> [-in | -notin] <Коллекция>
 

Сдерживание может быть чувствительным к регистру или нечувствительным к регистру. Следовательно, чтобы выполнить проверку включения с учетом регистра, добавьте к вышеуказанным операторам префикс 9. 0194 c , например -c содержит , -cnot содержит , -cin , cnotin .

Аналогичным образом, для выполнения нечувствительного к регистру префикса contains вышеуказанных операторов с i , например -icontains , -inotcontains , -iin , inotin .

Пример кода

Следующий код выполняется в терминале ниже.

 $a="понедельник", "вторник", "среда"
$b="среда"
$а - содержит $б
$а - не содержит $б
$б -в$а
$б -нотин $а
 

Здесь мы определяем две переменные, a и b , и применяем разные операторы сдерживания.

Терминал 1

Терминал

Загрузка…

Операторы проверки типов

Операторы проверки типов используются для проверки того, относятся ли оба заданных объекта к одному типу или нет.

Оператор Описание
-есть Проверяет, относятся ли оба объекта к одному типу
-не Проверяет, не относятся ли оба объекта к одному типу

Синтаксис

 <объект> -is <ссылка на тип>
<объект> - не <ссылка на тип>
 

Пример кода

Следующий код выполняется в следующем терминале:

 $a="hello"
$a -is [Int]
$a - не [Int]
$a -is [строка]
 

Здесь мы определяем переменные и и применяем различные операторы проверки типов.