Меню

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



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

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

У нас есть такие операторы в powershell:

Операторы возвращают True, если утверждение верно и False, если нет

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

На примере сравнения дат:

Вернет True, т.к. сегодня 8-ой день месяца и оба значения равны. Даты, за исключением дня месяца, должны быть в специальном формате datetime.

Вернет False т.к. слева сегодняшняя дата с права 15 дней до.

Так мы можем найти файлы, которые были 7 дней назад:

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

Опять же сравним даты powershell:

Вернет False т.к. дата справа меньше чем слева.

Оператор LE в отличие от LT вернет True так же, если значение равно:

Так мы найдем файлы, которые были созданы менее чем 7 дней назад или созданные в 18 день месяца:

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

Вернет False т.к. 1 не больше 2

Вернут True т.к. мы проверяем еще и равенство.

Тоже вернет True т.к. длина строки Four 4.

На примере поиска процессов:

Т.е. мы ищем процессы, где имя равно svchost и значение CPU больше 5.

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

Like от Match отличается в тем, что в Like мы ищем строчки используя Wildcardr *, а в Match мы можем использовать регулярные выражения:

Вернет True, т.к. * говорит что слева и справа может находиться еще символы.

Если добавить букву c, получится -clike, что значит Case-Sensetive (чувствителен к регистру). В этом случае буква А и а будут разными. По умолчанию, в windows регистр не имеет значение:

Так мы уберем из вывода все процессы, которые не содержат sv в начале и t в конце строки:

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

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

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

Источник

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

В отличие от многих языков программирования, в 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 Поиск соответствия символов по заданному образцу, аналог SQL-ного LIKE
-notlike Wildcard comparison Поиска несоответствия символов образцу
-match Regular expression comparison Поиск соответствия образцу с использованием регулярных выражений
-notmatch Regular expression comparison Поиск несоответствия образцу с использованием регулярных выражений
-replace Replace operator Заменяет часть или все значение слева от оператора. Очень своеобразный оператор
-contains Containment operator Определение, содержит ли значение слева от оператора значение справа. Возвращает $true или $false
-notcontains Containment operator Определение того, что значение слева от оператора не содержит значение справа. Возвращает $true или $false

В результате будет выдано:

Результат: + This is an old string

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

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

Источник

Сведения об операторах сравнения About Comparison Operators

Краткое описание Short description

Операторы сравнения в PowerShell могут либо сравнивать два значения, либо фильтровать элементы коллекции по входному значению. The comparison operators in PowerShell can either compare two values or filter elements of a collection against an input value.

Подробное описание Long description

Операторы сравнения позволяют сравнивать значения или находить значения, соответствующие указанным шаблонам. Comparison operators let you compare values or finding values that match specified patterns. PowerShell содержит следующие операторы сравнения: PowerShell includes the following comparison operators:

Тип Type Оператор Operator Тест сравнения Comparison test
Равенство Equality -eq -eq equals equals
-ne -ne не равно not equals
-gt -gt больше чем greater than
-ge -ge больше или равно greater than or equal
-lt -lt меньше чем less than
-le -le меньше или равно less than or equal
Matching Matching -like -like строка соответствует шаблону шаблона string matches wildcard pattern
-notlike -notlike строка не соответствует шаблону шаблона string does not match wildcard pattern
-match -match строка соответствует шаблону регулярного выражения string matches regex pattern
-notmatch -notmatch строка не соответствует шаблону регулярного выражения string does not match regex pattern
Замена Replacement -Replace -replace заменяет строки, соответствующие шаблону регулярного выражения replaces strings matching a regex pattern
Containment Containment -contains -contains Коллекция содержит значение collection contains a value
-notcontains -notcontains Коллекция не содержит значение collection does not contain a value
-in -in значение находится в коллекции value is in a collection
-notin -notin значение не находится в коллекции value is not in a collection
Тип Type — имеет -is Оба объекта имеют одинаковый тип both objects are the same type
-IsNot -isnot объекты имеют разные типы the objects are not the same type

Общие возможности Common features

По умолчанию все операторы сравнения не учитывают регистр. By default, all comparison operators are case-insensitive. Чтобы выполнить оператор сравнения с учетом регистра, добавьте c после — . To make a comparison operator case-sensitive, add a c after the — . Например, -ceq — это версия с учетом регистра -eq . For example, -ceq is the case-sensitive version of -eq . Чтобы сделать явный учет регистра нечувствительным, добавьте i перед — . To make the case-insensitivity explicit, add an i before — . Например, -ieq является явной версией без учета регистра -eq . For example, -ieq is the explicitly case-insensitive version of -eq .

Если входные данные оператора являются скалярным значением, оператор возвращает логическое значение. When the input of an operator is a scalar value, the operator returns a Boolean value. Если входные данные являются коллекцией, оператор возвращает элементы коллекции, соответствующие правому значению выражения. When the input is a collection, the operator returns the elements of the collection that match the right-hand value of the expression. Если в коллекции нет совпадений, операторы сравнения возвращают пустой массив. If there are no matches in the collection, comparison operators return an empty array. Пример: For example:

Существует несколько исключений: There are a few exceptions:

  • Операторы включения и типа всегда возвращают логическое значение. The containment and type operators always return a Boolean value
  • -replace Оператор возвращает результат замены The -replace operator returns the replacement result
  • -match Операторы и -notmatch также заполняют $Matches автоматическую переменную, если левый операнд выражения не является коллекцией. The -match and -notmatch operators also populate the $Matches automatic variable unless the left-hand side of the expression is a collection.

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

-eq и -ne -eq and -ne

Если левая часть является скалярной, -eq возвращает значение true , если правая часть является точным совпадением, в противном случае -eq возвращает значение false. When the left-hand side is scalar, -eq returns True if the right-hand side is an exact match, otherwise, -eq returns False. -ne выполняет противоположный; При совпадении обоих сторон возвращается значение false . в противном случае -ne возвращает значение true. -ne does the opposite; it returns False when both sides match; otherwise, -ne returns True.

Если левая часть является коллекцией, -eq возвращает элементы, соответствующие правой части, и -ne отфильтровывает их. When the left-hand side is a collection, -eq returns those members that match the right-hand side, while -ne filters them out.

Эти операторы обрабатывают все элементы коллекции. These operators process all elements of the collection. Пример Example:

Операторы равенства принимают любые два объекта, а не только скаляр или коллекция. The equality operators accept any two objects, not just a scalar or collection. Однако результат сравнения не гарантируется для конечного пользователя. But the comparison result is not guaranteed to be meaningful for the end-user. В следующем примере показана эта ошибка. The following example demonstrates the issue.

В этом примере мы создали два объекта с одинаковыми свойствами. In this example, we created two objects with identical properties. Однако результат проверки равенства имеет значение false , так как они являются разными объектами. Yet, the equality test result is False because they are different objects. Чтобы создать сравнимые классы, необходимо реализовать System. IEquatable в своем классе. To create comparable classes, you need to implement System.IEquatable in your class. В следующем примере демонстрируется частичная реализация класса мифилеинфосет , который реализует System. IEquatable и имеет два свойства: File и size. The following example demonstrates the partial implementation of a MyFileInfoSet class that implements System.IEquatable and has two properties, File and Size. Equals() Метод возвращает значение true, если свойства File и size двух объектов мифилеинфосет одинаковы. The Equals() method returns True if the File and Size properties of two MyFileInfoSet objects are the same.

Заметным примером сравнения произвольных объектов является определение того, равны ли они значению NULL. A prominent example of comparing arbitrary objects is to find out if they are null. Но если необходимо определить, является ли переменная $null , необходимо разместить $null в левой части оператора равенства. But if you need to determine whether a variable is $null , you must put $null on the left-hand side of the equality operator. Размещение с правой стороны не делает то, что вы ждете. Putting it on the right-hand side does not do what you expect.

Например, пусть $a массив содержит элементы со значением NULL: For example, let $a be an array containing null elements:

Следующие тесты $a не имеют значение null. The following tests that $a is not null.

Однако в следующем примере фильтрами определенными все элементы NULL из $a : The following, however, filers out all null elements from $a :

-gt,-GE,-lt и-Le -gt, -ge, -lt, and -le

-gt , -ge , -lt и -le ведут себя точно так же. -gt , -ge , -lt , and -le behave very similarly. Если обе стороны скалярны, они возвращают значение true или false в зависимости от того, как сравниваются две стороны: When both sides are scalar they return True or False depending on how the two sides compare:

Оператор Operator Возвращает значение true, если. Returns True when.
-gt -gt Левая часть больше The left-hand side is greater
-ge -ge Левая часть больше или равна The left-hand side is greater or equal
-lt -lt Левый край меньше The left-hand side is smaller
-le -le Левая часть меньше или равна The left-hand side is smaller or equal

В следующих примерах все инструкции возвращают значение true. In the following examples, all statements return True.

В большинстве языков программирования оператор «больше» имеет значение > . In most programming languages the greater-than operator is > . В PowerShell этот символ используется для перенаправления. In PowerShell, this character is used for redirection. Дополнительные сведения см. в разделе about_Redirection. For details, see about_Redirection.

Если левая часть является коллекцией, эти операторы сравнивают каждый элемент коллекции с правой стороны. When the left-hand side is a collection, these operators compare each member of the collection with the right-hand side. В зависимости от логики они либо сохраняют, либо отклоняют элемент. Depending on their logic, they either keep or discard the member.

Эти операторы работают с любым классом, реализующим System. IComparable. These operators work with any class that implements System.IComparable.

В следующем примере показано, что на клавиатуре QWERTY для американского типа «а» нет символа, который сортируется после «a». The following example demonstrates that there is no symbol on an American QWERTY keyboard that gets sorted after ‘a’. Он передает набор, содержащий все символы -gt оператора, для сравнения их с «a». It feeds a set containing all such symbols to the -gt operator to compare them against ‘a’. Выходные данные представляют собой пустой массив. The output is an empty array.

Если две стороны операторов не являются достаточно сравнимыми, эти операторы вызывают неустранимую ошибку. If the two sides of the operators are not reasonably comparable, these operators raise a non-terminating error.

Соответствующие операторы Matching operators

Операторы сопоставления ( -like ,, -notlike -match и -notmatch ) находят элементы, которые соответствуют или не соответствуют указанному шаблону. The matching operators ( -like , -notlike , -match , and -notmatch ) find elements that match or do not match a specified pattern. Шаблон для -like и -notlike является выражением-шаблоном (содержащим * , ? и [ ] ), а -match также -notmatch принимает регулярное выражение (Regex). The pattern for -like and -notlike is a wildcard expression (containing * , ? , and [ ] ), while -match and -notmatch accept a regular expression (Regex).

Синтаксис: The syntax is:

Если входные данные этих операторов являются скалярным значением, они возвращают логическое значение. When the input of these operators is a scalar value, they return a Boolean value. Если входные данные являются коллекцией значений, операторы возвращают все совпадающие элементы. When the input is a collection of values, the operators return any matching members. Если в коллекции нет совпадений, операторы возвращают пустой массив. If there are no matches in a collection, the operators return an empty array.

-Like и-notlike -like and -notlike

-like и -notlike ведут себя аналогично -eq и -ne , но правая часть может быть строкой, содержащей подстановочные знаки. -like and -notlike behave similarly to -eq and -ne , but the right-hand side could be a string containing wildcards.

-Match и-notmatch -match and -notmatch

-match и -notmatch используют регулярные выражения для поиска шаблона в левой части значений. -match and -notmatch use regular expressions to search for pattern in the left-hand side values. Регулярные выражения могут сопоставлять сложные шаблоны, такие как адреса электронной почты, пути UNC или отформатированные номера телефонов. Regular expressions can match complex patterns like email addresses, UNC paths, or formatted phone numbers. Правая строка должна соответствовать правилам регулярных выражений . The right-hand side string must adhere to the regular expressions rules.

Скалярные примеры: Scalar examples:

Если входные данные являются коллекцией, операторы возвращают соответствующие члены этой коллекции, а $Matches Автоматическая переменная — $null . If the input is a collection, the operators return the matching members of that collection and the $Matches automatic variable is $null .

Примеры коллекций: Collection examples:

-match и -notmatch поддерживают регулярные выражения группы записи. -match and -notmatch support regex capture groups. При каждом запуске они перезапишут $Matches автоматическую переменную. Each time they run, they overwrite the $Matches automatic variable. Если является коллекцией, $Matches переменная имеет значение $null . When is a collection the $Matches variable is $null . $Matches — Это хэш-таблица , которая всегда содержит ключ с именем «0», в котором сохраняется все совпадение. $Matches is a Hashtable that always has a key named ‘0’, which stores the entire match. Если регулярное выражение содержит группы захвата, $Matches содержит дополнительные ключи для каждой группы. If the regular expression contains capture groups, the $Matches contains additional keys for each group.

Дополнительные сведения см. в разделе about_Regular_Expressions. For details, see about_Regular_Expressions.

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

Замена с помощью регулярных выражений Replacement with regular expressions

Например -match , -replace оператор использует регулярные выражения для поиска указанного шаблона. Like -match , the -replace operator uses regular expressions to find the specified pattern. Но в отличие от -match он заменяет совпадения другим указанным значением. But unlike -match , it replaces the matches with another specified value.

Оператор заменяет все или часть значения указанным значением с помощью регулярных выражений. The operator replaces all or part of a value with the specified value using regular expressions. Оператор можно использовать для многих административных задач, таких как переименование файлов. You can use the operator for many administrative tasks, such as renaming files. Например, следующая команда изменяет расширения имен файлов всех .txt файлов на .log : For example, the following command changes the file name extensions of all .txt files to .log :

По умолчанию -replace оператор не учитывает регистр. By default, the -replace operator is case-insensitive. Чтобы сделать его чувствительным к регистру, используйте -creplace . To make it case sensitive, use -creplace . Чтобы явно сделать регистр без учета регистра, используйте -ireplace . To make it explicitly case-insensitive, use -ireplace .

Подстановки регулярных выражений Regular expressions substitutions

Можно также использовать регулярные выражения для динамической замены текста с помощью захваченных групп и подстановок. It is also possible to use regular expressions to dynamically replace text using capturing groups, and substitutions. На группы записи можно ссылаться в строке, используя знак доллара ( $ ) перед идентификатором группы. Capture groups can be referenced in the string using the dollar sign ( $ ) character before the group identifier.

В следующем примере -replace оператор принимает имя пользователя в формате DomainName\Username и преобразует его в Username@DomainName Формат: In the following example, the -replace operator accepts a username in the form of DomainName\Username and converts to the Username@DomainName format:

Этот $ символ имеет синтатик роли в PowerShell и в регулярных выражениях: The $ character has syntatic roles in both PowerShell and regular expressions:

  • В PowerShell между двойными кавычками они обозначают переменные и действуют как операторы части выражения. In PowerShell, between double quotation marks, it designates variables and acts as a subexpression operator.
  • В строках поиска регулярных выражений это означает конец строки. In Regex search strings, it denotes end of the line
  • В строках подстановки Regex он означает захваченные группы. Не забудьте поместить регулярные выражения в одинарные кавычки или вставить ` символ обратной черты () перед ними. In Regex substitution strings, it denotes captured groups.Be sure to either put your regular expressions between single quotation marks or insert a backtick ( ` ) character before them.

Пример: For example:

$$ в регулярном выражении обозначает литерал $ . $$ in Regex denotes a literal $ . $$ В строке подстановки, чтобы включить литерал $ в результирующую замену. This $$ in the substitution string to include a literal $ in the resulting replacement. Пример: For example:

Подстановка в коллекции Substituting in a collection

Если -replace оператор to является коллекцией, PowerShell применяет замену к каждому значению в коллекции. When the to the -replace operator is a collection, PowerShell applies the replacement to every value in the collection. Пример: For example:

Операторы вложения Containment operators

Операторы вложения ( -contains , -notcontains , -in и -notin ) похожи на операторы равенства, за исключением того, что они всегда возвращают логическое значение, даже если входные данные являются коллекцией. The containment operators ( -contains , -notcontains , -in , and -notin ) are similar to the equality operators, except that they always return a Boolean value, even when the input is a collection. Эти операторы прекращают сравнение, как только они обнаруживают первое совпадение, в то время как операторы равенства оценивают все входные элементы. These operators stop comparing as soon as they detect the first match, whereas the equality operators evaluate all input members. В очень больших коллекциях эти операторы возвращают более быстрый результат, чем операторы равенства. In a very large collection, these operators return quicker than the equality operators.

-Contains и-notcontains -contains and -notcontains

Эти операторы определяют, включает ли набор определенный элемент. These operators tell whether a set includes a certain element. -contains Возвращает значение true, если правая часть (тестовый объект) соответствует одному из элементов в наборе. -contains returns True when the right-hand side (test object) matches one of the elements in the set. -notcontains Вместо этого возвращает значение false. -notcontains returns False instead. Если объект теста является коллекцией, эти операторы используют равенство ссылок, т. е. они проверяют, является ли один из элементов набора одним и тем же экземпляром тестового объекта. When the test object is a collection, these operators use reference equality, i.e. they check whether one of the set’s elements is the same instance of the test object.

Более сложные примеры: More complex examples:

-in и-notin -in and -notin

-in notin Операторы and были введены в PowerShell 3 в качестве синтаксических обратных contains -notcontain операторов и. The -in and — notin operators were introduced in PowerShell 3 as the syntactic reverse of the of contains and -notcontain operators. -in Возвращает значение true , если левая часть соответствует одному из элементов в наборе. -in returns True when the left-hand side matches one of the elements in the set. -notin Вместо этого возвращает значение false . -notin returns False instead. Если тестовый объект является набором, эти операторы используют равенство ссылок для проверки того, является ли один из элементов набора одним и тем же экземпляром тестового объекта. When the test object is a set, these operators use reference equality to check whether one of the set’s elements is the same instance of the test object.

Следующие примеры выполняют те же действия, что и примеры для -contain и -notcontain Do, но они записываются с помощью -in и -notin . The following examples do the same thing that the examples for -contain and -notcontain do, but they are written with -in and -notin instead.

Более сложные примеры: More complex examples:

Сравнение типов Type comparison

Операторы сравнения типов ( -is и -isnot ) используются для определения того, является ли объект конкретным типом. The type comparison operators ( -is and -isnot ) are used to determine if an object is a specific type.

Источник

Читайте также:  Как проводится расчет параметрических индексов при сравнении технико экономических показателей