Сравнение 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 | Заметки системного администратора
По умолчанию все операторы сравнения не являются чувствительными к регистру.
-eq | Equal | Равно |
-ne | Not equal | Не Равно |
-ge | Greater than or equal | Больше или Равно |
-gt | Greater than | Больше |
-lt | Less than | Меньше |
-le | Less than or equal | Меньше или Равно |
-like | Wildcard comparison | Использование символов подстановки для поиска соответствия образцу |
-notlike | Wildcard comparison | Использование символов подстановки для поиска несоответствия образцу |
-match | Regular expression comparison | Использование регулярных выражений для поиска соответствия образцу |
-notmatch | Regular expression comparison | Использование регулярных выражений для поиска несоответствия образцу |
-replace | Replace operator | Заменяет часть или все значение слева от оператора |
-contains | Containment operator | Определение, содержит ли значение слева от оператора значение справа. |
-notcontains | Containment 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 и Интернета.
Содержание
- Сравнение различных типов данных
- Сравнение строк
- -like и подстановочные знаки
- Поиск в коллекциях с -contains
- Поиск подстроки с -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 существует четыре различных категории операторов сравнения. Они следующие:
- Операторы равенства
- Операторы сопоставления
- Сменные приводы
- Операторы защитной оболочки
- Операторы проверки типа
Операторы равенства
Операторы равенства используются для проверки того, равны ли два значения, меньше или больше друг друга.
Оператор | Описание |
---|---|
-экв |
Проверяет, равны ли два значения |
-не |
Проверяет, не равны ли два значения |
-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 [строка]
Здесь мы определяем переменные и
и применяем различные операторы проверки типов.