about_Comparison_Operators
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
Вставьте сюда введение.
РАЗДЕЛ
about_Comparison_Operators
КРАТКОЕ ОПИСАНИЕ
Содержит описание операторов сравнения, используемых в Windows PowerShell®.
ПОДРОБНОЕ ОПИСАНИЕ
Операторы сравнения позволяют указать условия сравнения и поиска значений, удовлетворяющих указанным шаблонам. При использовании оператора сравнения необходимо указать значения, которые нужно сравнить, а также оператор, который будет разделять эти значения.
В Windows PowerShell имеются следующие операторы сравнения:
-eq
-ne
-gt
-ge
-lt
-le
-Like
-NotLike
-Match
-NotMatch
-Contains
-NotContains
-In
-NotIn
-Replace
По умолчанию во всех операторах сравнения не учитывается регистр символов. Для учета регистра символов в операторе сравнения необходимо указать перед именем оператора букву «c». Например, «-ceq» — это версия оператора «-eq», учитывающая регистр символов. Чтобы отменить учет регистра символов в явном виде, укажите перед именем оператора букву «i». Например, «-ieq» — это версия оператора «-eq», в которой явно отключен учет регистра символов.
Если входными данными является скалярное значение, операторы сравнения возвращают логическое значение. Если в качестве входных данных используется коллекция значений, операторы сравнения возвращают все соответствующие значения. Если в коллекции не найдено соответствий, эти операторы не вернут ничего.
Исключениями являются операторы вложения (-Contains, -NotContains), операторы In (-In, -NotIn) и операторы типа (-Is, -IsNot), которые всегда возвращают логическое значение.
В Windows PowerShell поддерживаются перечисленные ниже операторы сравнения.
-eq
Описание: равенство. Содержит совпадающее значение.
Пример:
PS C:\> "abc" -eq "abc"
True
PS C:\> "abc" -eq "abc", "def"
False
PS C:\> "abc", "def" -eq "abc"
abc
-ne
Описание: неравенство. Содержит несовпадающее значение.
Пример:
PS C:\> "abc" -ne "def"
True
PS C:\> "abc" -ne "abc"
False
PS C:\> "abc" -ne "abc", "def"
True
PS C:\> "abc", "def" -ne "abc"
def
-gt
Описание: больше.
Пример:
PS C:\> 8 -gt 6
True
PS C:\> 7, 8, 9 -gt 8
9
-ge
Описание: больше или равно.
Пример:
PS C:\> 8 -ge 8
True
PS C:\> 7, 8, 9 -ge 8
8
9
-lt
Описание: меньше.
Пример:
PS C:\> 8 -lt 6
False
PS C:\> 7, 8, 9 -lt 8
7
-le
Описание: меньше или равно.
Пример:
PS C:\> 6 -le 8
True
PS C:\> 7, 8, 9 -le 8
7
8
-Like
Описание: соответствие с использованием подстановочного знака (*).
Пример:
PS C:\> "Windows PowerShell" -like "*shell"
True
PS C:\> "Windows PowerShell", "Server" -like "*shell"
Windows PowerShell
-NotLike
Описание: несоответствие с использованием подстановочного знака (*).
Пример:
PS C:\> "Windows PowerShell" -NotLike "*shell"
False
PS C:\> "Windows PowerShell", "Server" -NotLike "*shell"
Server
-Match
Описание: соответствие строк с учетом регулярных выражений. Если в качестве входных данных используется скалярное значение, оператор заносит результат в автоматическую переменную $Matches.
Пример:
PS C:\> "Sunday" -Match "sun"
True
PS C:\> $matches
Name Value
---- -----
0 Sun
PS C:\> "Sunday", "Monday" -Match "sun"
Sunday
-NotMatch
Описание: несоответствие строк. Используются регулярные выражения. Если в качестве входных данных используется скалярное значение, оператор заносит результат в автоматическую переменную $Matches.
Пример:
PS C:\> "Sunday" -NotMatch "sun"
False
PS C:\> $matches
Name Value
---- -----
0 sun
PS C:\> "Sunday", "Monday" -NotMatch "sun"
Monday
-Contains
Описание: оператор вложения. Указывает, входит ли отдельное проверяемое значение в коллекцию контрольных значений. Всегда возвращает логическое значение. Возвращает значение TRUE только в том случае, если проверяемое значение точно совпадает по крайней мере с одним из контрольных значений.
Если тестовое значение является коллекцией, оператор Contains проверяет равенство ссылок. Значение TRUE возвращается только в том случае, если одно из контрольных значений является экземпляром объекта контрольного значения.
Синтаксис:
<Reference-values> -Contains <Test-value>
Примеры:
PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
# Does the list of computers in $domainServers
# include $thisComputer?
# -------------------------------------------
PS C:\> $domainServers -Contains $thisComputer
True
PS C:\> "abc", "def", "ghi" -Contains "abc", "def"
False
PS C:\> $a = "abc", "def"
PS C:\> "abc", "def", "ghi" -Contains $a
False
PS C:\> $a, "ghi" -Contains $a
True
-NotContains
Описание: оператор вложения. Указывает, входит ли отдельное проверяемое значение в коллекцию контрольных значений. Всегда возвращает логическое значение. Возвращает значение TRUE в том случае, если проверяемое значение не совпадает в точности по крайней мере с одним из контрольных значений.
Если тестовое значение является коллекцией, оператор NotContains проверяет равенство ссылок.
Синтаксис:
<Reference-values> -NotContains <Test-value>
Примеры:
PS C:\> "Windows", "PowerShell" -NotContains "Shell"
True #Not an exact match
# Get cmdlet parameters, but exclude common parameters
function get-parms ($cmdlet)
{
$Common = "Verbose", "Debug", "WarningAction", "WarningVariable", `
"ErrorAction", "ErrorVariable", "OutVariable", "OutBuffer"
$allparms = (Get-Command $Cmdlet).parametersets | foreach {$_.Parameters} | `
foreach {$_.Name} | Sort-Object | Get-Unique
$allparms | where {$Common -NotContains $_ }
}
# Find unapproved verbs in the functions in my module
# -------------------------------------------
PS C:\> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS C:\> $myVerbs = Get-Command -Module MyModule | foreach {$_.verb}
PS C:\> $myVerbs | where {$ApprovedVerbs -NotContains $_}
ForEach
Sort
Tee
Where
-In
Описание: оператор вхождения. Указывает, имеется ли контрольное значение в коллекции контрольных значений. Всегда возвращает логическое значение. Возвращает значение TRUE только в том случае, если проверяемое значение точно совпадает по крайней мере с одним из контрольных значений.
Если тестовое значение является коллекцией, оператор In проверяет равенство ссылок. Значение TRUE возвращается только в том случае, если одно из контрольных значений является экземпляром объекта контрольного значения.
Оператор In появился в Windows PowerShell 3.0.
Синтаксис:
<Test-value> -in <Reference-values>
Примеры:
PS C:\> "def" -in "abc", "def"
True
PS C:\> "Shell" -in "Windows", "PowerShell"
False #Not an exact match
PS C:\> "Windows" -in "Windows", "PowerShell"
True #An exact match
PS C:\> "Windows", "PowerShell" -in "Windows", "PowerShell", "ServerManager"
False #Using reference equality
PS C:\> $a = "Windows", "PowerShell"
PS C:\> $a -in $a, "ServerManager"
True #Using reference equality
# Does the list of computers in $domainServers
# include $thisComputer?
# -------------------------------------------
PS C:\> $thisComputer -in $domainServers
True
-NotIn
Описание: оператор NotIn. Указывает, имеется ли контрольное значение в коллекции контрольных значений. Всегда возвращает логическое значение. Возвращает значение TRUE в том случае, если проверяемое значение не совпадает в точности по крайней мере с одним из контрольных значений.
Если тестовое значение является коллекцией, оператор In проверяет равенство ссылок. Значение TRUE возвращается только в том случае, если одно из контрольных значений является экземпляром объекта контрольного значения.
Оператор NotIn появился в Windows PowerShell 3.0.
Синтаксис:
<Test-value> -NotIn <Reference-values>
Примеры:
PS C:\> "def" -NotIn "abc", "def"
False
PS C:\> "ghi" -NotIn "abc", "def"
True
PS C:\> "Shell" -NotIn "Windows", "PowerShell"
True #Not an exact match
PS C:\> "Windows" -NotIn "Windows", "PowerShell"
False #An exact match
# Find unapproved verbs in the functions in my module
# -------------------------------------------
PS C:\> $ApprovedVerbs = Get-Verb | foreach {$_.verb}
PS C:\> $myVerbs = Get-Command -Module MyModule | foreach {$_.verb}
PS C:\> $myVerbs | where {$_ -NotIn $ApprovedVerbs}
ForEach
Sort
Tee
Where
-Replace
Описание: оператор замены. Изменяет указанные элементы значения.
Пример:
PS C:\> "Get-Process" -Replace "Get", "Stop"
Stop-Process
# Change all .GIF file name extension to .JPG
PS C:\> dir *.gif | foreach {$_ -Replace ".gif", ".jpg"}
ОПЕРАТОРЫ РАВЕНСТВА
Операторы равенства (-eq, -ne) возвращают значение TRUE или соответствующие элементы, если одно или несколько входных значений совпадают с указанным шаблоном. Весь шаблон должен соответствовать всему значению.
C:PS> 2 -eq 2
True
C:PS> 2 -eq 3
False
C:PS> 1,2,3 -eq 2
2
C:PS> "PowerShell" -eq "Shell"
False
C:PS> "Windows", "PowerShell" -eq "Shell"
C:PS>
PS C:\> "abc", "def", "123" -eq "def"
def
PS C:\> "abc", "def", "123" -ne "def"
abc
123
ОПЕРАТОРЫ ВЛОЖЕНИЯ
Операторы вложения (-Contains и -NotContains) сходны с операторами равенства. Однако операторы вложения всегда возвращают логическое значение, даже если в качестве входных данных использовалась коллекция.
Кроме того, в отличие от операторов равенства, операторы вложения возвращают значение при обнаружении первого совпадения. Операторы равенства оценивают все входные данные и затем возвращают все совпадения в коллекции. В примерах ниже показано функционирование оператора -Contains.
C:PS> 1,2,3 -contains 2
True
C:PS> "PowerShell" -contains "Shell"
False
C:PS> "Windows", "PowerShell" -contains "Shell"
False
PS C:\> "abc", "def", "123" -contains "def"
True
PS C:\> "true", "blue", "six" -contains "true"
True
В примере ниже продемонстрировано отличие операторов вложения от оператора равенства. Операторы вложения всегда возвращают значение TRUE при первом совпадении.
PS C:\> 1,2,3,4,5,4,3,2,1 -eq 2
2
2
PS C:\> 1,2,3,4,5,4,3,2,1 -contains 2
True
При обработке коллекции очень большого объема оператор -Contains возвращает результаты быстрее, чем оператор равенства.
Операторы совпадения
Операторы совпадения (-Match и -NotMatch) выполняют поиск элементов, которые соответствуют или не соответствуют указанному шаблону при использовании регулярных выражений.
Синтаксис:
<string[]> -Match <regular-expression>
<string[]> -NotMatch <regular-expression>
Ниже показаны примеры использования оператора -Match.
PS C:\> "Windows", "PowerShell" -Match ".shell"
PowerShell
PS C:\> (Get-Command Get-Member -Syntax) -Match "-view"
True
PS C:\> (Get-Command Get-Member -Syntax) -NotMatch "-path"
True
PS C:\> (Get-Content Servers.txt) -Match "^Server\d\d"
Server01
Server02
Операторы совпадения выполняют поиск только в строках. Они не могут выполнять поиск по массивам целых чисел и другим объектам.
Операторы -Match и -NotMatch заполняют автоматическую переменную $Matches, если входные данные (аргумент с левой стороны) оператора представляют собой один скалярный объект. Если входные данные являются скалярными, операторы -Match и -NotMatch возвращают логическое значение и устанавливают в качестве значения автоматической переменной $Matches совпавшие компоненты аргумента.
Если входные данные являются коллекцией, операторы -Match и -NotMatch возвращают соответствующие элементы коллекции, но не изменяют значение переменной $Matches.
Например, приведенная ниже команда отправляет коллекцию строк в оператор -Match. Оператор -Match возвращает элементы коллекции, которые соответствуют шаблону. При этом значение автоматической переменной $Matches не изменяется.
PS C:\> "Sunday", "Monday", "Tuesday" -Match "sun"
Sunday
PS C:\> $matches
PS C:\>
Напротив, приведенная ниже команда отправляет в оператор -Match одну строку. Оператор -Match возвращает логическое значение и изменяет значение автоматической переменной $Matches.
PS C:\> "Sunday" -Match "sun"
True
PS C:\> $matches
Name Value
---- -----
0 Sun
Оператор -NotMatch устанавливает значение автоматической переменной $Matches, если входные данные являются скалярными, а результат выполнения оператора равняется False, т. е. при обнаружении совпадения.
PS C:\> "Sunday" -NotMatch "rain"
True
PS C:\> $matches
PS C:\>
PS C:\> "Sunday" -NotMatch "day"
False
PS C:\> $matches
PS C:\>
Name Value
---- -----
0 day
ОПЕРАТОР ЗАМЕНЫ
Оператор -Replace заменяет часть исходного значения или все значение целиком на указанное значение с использованием регулярных выражений. Оператор -Replace может оказаться полезным при выполнении многих административных задач, например при переименовании файлов. Например, приведенная ниже команда изменяет расширения всех файлов GIF на JPG.
Get-ChildItem | Rename-Item -NewName { $_ -Replace '.gif$','.jpg$' }
Ниже описан синтаксис оператора -Replace, при этом <оригинал> соответствует символам, которые необходимо заменить, а <замена> — символам, которыми необходимо заменить оригинал.
<input> <operator> <original>, <substitute>
По умолчанию оператор -Replace не учитывает регистр символов. Для учета регистра символов используйте -cReplace. Для явного отключения учета регистра символов используйте -iReplace. Рассмотрим следующие примеры:
PS C:\> "book" -Replace "B", "C"
Cook
PS C:\> "book" -iReplace "B", "C"
Cook
PS C:\> "book" -cReplace "B", "C"
book
PS C:\> '<command:parameter required="false" variableLength="true" globbing="false"'`
| foreach {$_ -replace 'globbing="false"', 'globbing="true"'}
<command:parameter required="false" variableLength="true" globbing="true"
Побитовые операторы
Windows PowerShell поддерживает стандартные побитовые операторы, включая побитовое И (-bAnd), побитовое ИЛИ и побитовое исключающее ИЛИ (-bOr и -bXor), а также побитовое НЕ (-bNot).
Начиная с версии Windows PowerShell 2.0 все побитовые операторы работают с 64-разрядными целыми числами.
Начиная с версии Windows PowerShell 3.0 появились операторы -shr (сдвиг вправо) и -shl (сдвиг влево) для поддержки побитовых арифметических операций в Windows PowerShell.
В Windows PowerShell поддерживаются перечисленные ниже побитовые операторы.
Operator Description Example
-------- ---------------------- -------------------
-bAnd Bitwise AND PS C:\> 10 -band 3
2
-bOr Bitwise OR (inclusive) PS C:\> 10 -bor 3
11
-bXor Bitwise OR (exclusive) PS C:\> 10 -bxor 3
9
-bNot Bitwise NOT PS C:\> -bNot 10
-11
-shl Shift-left PS C:\> 100 -shl 2
400
-shr Shift-right PS C:\> 100 -shr 1
50
Побитовые операторы используют двоичный формат значений. Например, для числа 10 используется битовая структура 00001010 (на основе 1 байта), а для числа 3 — 00000011. При использовании побитового оператора для сравнения 10 и 3 выполняется сравнение отдельных битов в каждом байте.
При операции побитового И результирующий бит устанавливается в 1 только в том случае, если оба входных бита равняются 1.
1010 (10)
0011 ( 3)
-------------- bAND
0010 ( 2)
При операции побитового ИЛИ (включающего) результирующий бит устанавливается в 1, если любой из входных битов или они оба равняются 1. Результирующий бит устанавливается в 0 только в том случае, если оба входных бита равняются 0.
1010 (10)
0011 ( 3)
-------------- bOR (inclusive)
1011 (11)
При операции побитового ИЛИ (исключающего) результирующий бит устанавливается в 1 только в том случае, если один из входных битов равняется 1.
1010 (10)
0011 ( 3)
-------------- bXOR (exclusive)
1001 ( 9)
Побитовый оператор НЕ — это унарный оператор, результатом выполнения которого является дополнение до двоичного значения. Бит 1 устанавливается в 0, а бит 0 устанавливается в 1.
Например, двоичным дополнением 0 является –1, т. е. максимальное целое число без знака (0xffffffff), а двоичным дополнением –1 — 0.
PS C:\> -bNOT 10
-11
0000 0000 0000 1010 (10)
------------------------- bNOT
1111 1111 1111 0101 (-11, xfffffff5)
В побитовой операции сдвига влево все биты перемещаются на «n» позиций влево, где «n» — значение правого операнда. Оставшиеся позиции заполняются нулями.
Если левый операнд является значением Integer (32-разрядным), 5 младших битов правого операнда определяют количество битов сдвига левого операнда.
Если левый операнд является значением Long (64-разрядным), 6 младших битов правого операнда определяют количество битов сдвига левого операнда.
PS C:\> 21 -shl 1
42
00010101 (21)
00101010 (42)
PS C:\> 21 -shl 2
84
00010101 (21)
00101010 (42)
01010100 (84)
При выполнении побитовой операции сдвига вправо все биты перемещаются на n позиций вправо, где n — это значение правого операнда. Оператор сдвига вправо (-shr) вставляет нуль в самую левую позицию, если выполняется сдвиг вправо положительного значения или значения без знака.
Если левый операнд является значением Integer (32-разрядным), 5 младших битов правого операнда определяют количество битов сдвига левого операнда.
Если левый операнд является значением Long (64-разрядным), 6 младших битов правого операнда определяют количество битов сдвига левого операнда.
PS C:\> 21 -shr 1
10
00010101 (21)
00001010 (10)
PS C:\> 21 -shr 2
5
00010101 (21)
00001010 (10)
00000101 ( 5)
СМ. ТАКЖЕ
about_Operators
about_Regular_Expressions
about_Wildcards
Compare-Object
Foreach-Object
Where-Object