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" を付けます。たとえば、"-eq" の大文字と小文字を区別するには "-ceq" とします。大文字と小文字を区別しないことを明示するには、演算子の前に "i" を付けます。たとえば、"-eq" の大文字と小文字を区別しないことを明示するには、"-ieq" とします。
演算子への入力がスカラー値である場合、比較演算子はブール値を返します。入力が値のコレクションである場合、比較演算子は一致する値を返します。コレクション内に一致項目がない場合、比較演算子は何も返しません。
例外は包含演算子 (-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
説明: 包含演算子です。参照値のコレクションに 1 つのテスト値が含まれているかどうかを判別します。常にブール値を返します。テスト値が参照値の少なくとも 1 つと完全に一致する場合にのみ、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
説明: 包含演算子です。参照値のコレクションに 1 つのテスト値が含まれているかどうかを判別します。常にブール値を返します。テスト値が参照値の少なくとも 1 つと完全に一致しない場合に、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
説明: In 演算子です。テスト値が参照値のコレクション内にあるかどうかを判別します。常にブール値として返します。テスト値が参照値の少なくとも 1 つと完全に一致する場合にのみ、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 演算子です。テスト値が参照値のコレクション内にあるかどうかを判別します。常にブール値を返します。テスト値が参照値の少なくとも 1 つと完全に一致しない場合に、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) は、1 つ以上の入力値が指定したパターンと同じ場合に、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 演算子は、演算子への入力 (左辺の引数) が 1 つのスカラー オブジェクトである場合に、$Matches 自動変数を設定します。入力がスカラーである場合、-Match 演算子および -NotMatch 演算子はブール値を返し、$Matches 自動変数の値を引数と一致するコンポーネントに設定します。
入力がコレクションである場合、-Match 演算子および -NotMatch 演算子はそのコレクションの一致するメンバーを返しますが、$Matches 変数は設定しません。
たとえば、次のコマンドは文字列のコレクションを -Match 演算子に送ります。-Match 演算子は、一致するコレクションの項目を返します。$Matches 自動変数は設定しません。
PS C:\> "Sunday", "Monday", "Tuesday" -Match "sun"
Sunday
PS C:\> $matches
PS C:\>
これに対し、次のコマンドは 1 つの文字列を -Match 演算子に送ります。-Match 演算子は、ブール値を返し、$Matches 自動変数を設定します。
PS C:\> "Sunday" -Match "sun"
True
PS C:\> $matches
Name Value
---- -----
0 Sun
入力がスカラーで、結果が False である場合、つまり一致を検出した場合、-Notmatch 演算子は $Matches 自動変数を設定します。
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 演算子の構文は次のとおりです。<original> プレースホルダーは置換される文字を表し、<substitute> プレースホルダーは置換後の文字を表します。
<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 は、bitwise-AND (-bAnd)、包含と除外の bitwise-OR 演算子 (-bOr と -bXor)、bitwise-NOT (-bNot) など、標準のビットごとの演算子をサポートしています。
Windows PowerShell 2.0 以降では、すべてのビットごとの演算子が 64 ビットの整数を操作します。
Windows PowerShell 3.0 以降では、Windows PowerShell でビットごとの算術をサポートするために、-shr (右シフト) と -shl (左シフト) が導入されています。
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 を比較した場合、各バイトの個々のビットが比較されます。
ビットごとの AND 演算では、両方の入力ビットが 1 である場合にのみ、結果のビットが 1 に設定されます。
1010 (10)
0011 ( 3)
-------------- bAND
0010 ( 2)
ビットごとの OR (包括) 演算では、入力ビットのいずれかまたは両方が 1 の場合に、結果のビットが 1 に設定されます。両方の入力ビットが 0 に設定されている場合にのみ、結果のビットが 0 に設定されます。
1010 (10)
0011 ( 3)
-------------- bOR (inclusive)
1011 (11)
ビットごとの OR (除外) 演算では、1 つの入力ビットが 1 の場合にのみ、結果のビットが 1 に設定されます。
1010 (10)
0011 ( 3)
-------------- bXOR (exclusive)
1001 ( 9)
ビットごとの NOT 演算子は、値のバイナリ補数を生成する単項演算子です。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" は、右オペランドの値です。最下位の桁にはゼロが挿入されます。
左オペランドが整数 (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) は、正の値または符号なしの値を右にシフトするときに、一番左の位置にゼロを挿入します。
左オペランドが整数 (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