about_Comparison_Operators

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.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