about_Operators

簡単な説明

PowerShell でサポートされている演算子について説明します。

長い説明

演算子は、コマンドまたは式で使用できる言語要素です。 PowerShell では、値の操作に役立ついくつかの種類の演算子がサポートされています。

算術演算子

コマンドまたは式の値を-計算*するには%``/、算術演算子 (+、) を使用します。 これらの演算子を使用すると、値を加算、減算、乗算、または除算し、除算演算の剰余 (剰余) を計算できます。

加算演算子は要素を連結します。 乗算演算子は、各要素の指定したコピー数を返します。 算術演算子は、配列など、それらを実装する任意の .NET Int``String``DateTime型でHashtable使用できます。

ビット演算子 (-band、、-bor``-bxor、、-bnot-shl``-shr) は、値のビット パターンを操作します。

詳細については、「about_Arithmetic_Operators」 を参照してください

代入演算子

代入演算子 (=、、+=``-=、、*=/=) を%=使用して、変数に値を代入、変更、または追加します。 算術演算子と代入を組み合わせて、算術演算の結果を変数に代入できます。

詳細については、「about_Assignment_Operators」 を参照してください

比較演算子

比較演算子 (-eq、、 -ne-gt-lt-le) を -ge使用して、値とテスト条件を比較します。 たとえば、2 つの文字列値を比較して、等しいかどうかを判断できます。

比較演算子には、テキスト内のパターンを検索または置換する演算子も含まれます。 (、-match-notmatch) 演算子 -replaceは正規表現を使用し、(-like-notlike) はワイルドカード を使用します *

Containment 比較演算子は、テスト値が参照セット (-in、) に表示されるかどうかを -notin判断 -containsします -notcontains

型比較演算子 (-is-isnot) は、オブジェクトが特定の型であるかどうかを判断します。

詳細については、「about_Comparison_Operators」 を参照してください

論理演算子

論理演算子 (-and、、 -or-xor-not) を !使用して、条件ステートメントを 1 つの複雑な条件に接続します。 たとえば、論理演算子を使用して、 -and 2 つの異なる条件を持つオブジェクト フィルターを作成できます。

詳細については、「about_Logical_Operators」 を参照してください

リダイレクト演算子

リダイレクト演算子 (>、、>>``2>、、2>>および ) を使用2>&1して、コマンドまたは式の出力をテキスト ファイルに送信します。 リダイレクト演算子はコマンドレット (パラメーター Out-File なし) と同様に動作しますが、指定されたファイルにエラー出力をリダイレクトすることもできます。 コマンドレットを使用して出力 Tee-Object をリダイレクトすることもできます。

詳細については、次を参照 about_Redirection

分割演算子と結合演算子

演算子と -split 演算子 -join は、部分文字列を除算して結合します。 演算子 -split は、文字列を部分文字列に分割します。 演算子 -join は、複数の文字列を 1 つの文字列に連結します。

詳細については、「 about_Split と about_Joinを参照してください

型演算子

型演算子 (-is-isnot、) を-as使用して、オブジェクトの型.NET Frameworkを検索または変更します。

詳細については、「about_Type_Operators」 を参照してください

単項演算子

値をインクリメントまたはデ ++ クリ -- メントするには、および否定に対して、1 項演算子と 演算子 - を使用します。 たとえば、 から に変数をインクリメントするには$a、「 10``9 」と入力します$a++

詳細については、「about_Arithmetic_Operators」 を参照してください

特殊な演算子

特殊な演算子には、他の演算子グループに適合しない特定の使用例があります。 たとえば、特殊な演算子を使用すると、コマンドの実行、値のデータ型の変更、配列からの要素の取得を行います。

グループ化演算子 ( )

他の言語と同様に、 は (...) 式の演算子の優先順位をオーバーライドするために機能します。 例: (1 + 2) / 3

ただし、PowerShell には追加の動作があります。

  • (...) を使用すると、コマンドからの出力 式に含めできます。 次に例を示します。

    PS> (Get-Item *.txt).Count -gt 10
    True
    
  • パイプラインの最初のセグメントとして使用する場合、コマンドまたは式をかっこで囲むと、式の結果が列挙されます。 かっこでコマンドがラップ されている場合 は、パイプラインを介して結果が送信される前に、メモリ内で収集された出力はすべて完了まで実行されます。

注意

かっこで囲まれたコマンドをラップすると、$?``$true囲まれたコマンド自体が に設定されている場合でも、自動変数が に設定$?されます$false。 たとえば、 は予期 (Get-Item /Nosuch); $? せず True を生成 します。 の詳細については、「」を$?参照about_Automatic_Variables

Subexpression 演算子 $( )

1 つ以上の ステートメントの結果を返します。 1 つの結果の場合、 はスカラーを返します。 複数の結果の場合、 は配列を返します。 これは、別の式内で式を使用する場合に使用します。 たとえば、コマンドの結果を文字列式に埋め込む場合などです。

PS> "Today is $(Get-Date)"
Today is 12/02/2019 13:15:20

PS> "Folder list: $((dir c:\ -dir).Name -join ', ')"
Folder list: Program Files, Program Files (x86), Users, Windows

配列部分式演算子 @( )

1 つ以上のステートメントの結果を配列として返します。 結果は常に 0 以上のオブジェクトの配列になります。

PS> $list = @(Get-Process | Select-Object -First 10; Get-Service | Select-Object -First 10 )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
20
PS> $list = @(Get-Service | Where-Object Status -eq Starting )
PS> $list.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS> $list.Count
0

ハッシュ テーブルリテラル構文 @{}

配列の部分式と同様に、この構文はハッシュ テーブルを宣言するために使用されます。 詳細については、「about_Hash_Tables」 を参照してください

Call 演算子 &

コマンド、スクリプト、またはスクリプト ブロックを実行します。 呼び出し演算子 ("呼び出し演算子" とも呼ばれる) を使用すると、変数に格納され、文字列またはスクリプト ブロックで表されるコマンドを実行できます。 呼び出し演算子は、子スコープで実行されます。 スコープの詳細については、「スコープ」を about_Scopes

この例では、コマンドを文字列に格納し、呼び出し演算子を使用して実行します。

PS> $c = "get-executionpolicy"
PS> $c
get-executionpolicy
PS> & $c
AllSigned

呼び出し演算子は文字列を解析しません。 つまり、呼び出し演算子を使用する場合、文字列内でコマンド パラメーターを使用することはできません。

PS> $c = "Get-Service -Name Spooler"
PS> $c
Get-Service -Name Spooler
PS> & $c
& : The term 'Get-Service -Name Spooler' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:2
+ & $c
+  ~~
    + CategoryInfo          : ObjectNotFound: (Get-Service -Name Spooler:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Invoke-Expression コマンドレットは、呼び出し演算子を使用するときに解析エラーを引き起こすコードを実行できます。

PS> & "1+1"
& : The term '1+1' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:2
+ & "1+1"
+  ~~~~~
    + CategoryInfo          : ObjectNotFound: (1+1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
PS> Invoke-Expression "1+1"
2

呼び出し演算子を使用して、ファイル名を使用してスクリプトを実行できます。 次の例は、スペースを含むスクリプト ファイル名を示しています。 スクリプトを実行すると、PowerShell によって、ファイル名を含む引用符で囲まれた文字列の内容が表示されます。 呼び出し演算子を使用すると、ファイル名を含む文字列の内容を実行できます。

PS C:\Scripts> Get-ChildItem

    Directory: C:\Scripts


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/28/2018   1:36 PM             58 script name with spaces.ps1

PS C:\Scripts> ".\script name with spaces.ps1"
.\script name with spaces.ps1
PS C:\Scripts> & ".\script name with spaces.ps1"
Hello World!

スクリプト ブロックの詳細については、「スクリプト ブロック」 をabout_Script_Blocks

キャスト演算子 [ ]

オブジェクトを指定した型に変換または制限します。 オブジェクトを変換できない場合、PowerShell はエラーを生成します。

[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'

キャストは、変数がキャスト表記を使用して に割り当てられている場合 にも実行できます

コンマ演算子 ,

コンマは、バイナリ演算子として配列を作成するか、作成する配列に を追加します。 式モードでは、単項演算子として、コンマは 1 つのメンバーを持つ配列を作成します。 メンバーの前にコンマを配置します。

$myArray = 1,2,3
$SingleArray = ,1
Write-Output (,1)

Write-Object 引数を受け取るので、式をかっこで囲む必要があります。

ドット ソーシング演算子 .

現在のスコープでスクリプトを実行し、スクリプトによって作成される関数、エイリアス、変数が現在のスコープに追加され、既存のスコープをオーバーライドします。 スクリプトによって宣言されたパラメーターは変数になります。 値が指定されていないパラメーターは、値のない変数になります。 ただし、自動変数 $args は保持されます。

. c:\scripts\sample.ps1 1 2 -Also:3

注意

ドットソーシング演算子の後にスペースがあります。 現在のディレクトリを表すドット ( . ) 記号とドットを区別するには、スペースを使用します。

次の例では、現在のディレクトリの Sample.ps1 スクリプトが現在のスコープで実行されています。

. .\sample.ps1

Format 演算子 -f

文字列オブジェクトの format メソッドを使用して文字列の書式を設定します。 演算子の左側に書式文字列を入力し、演算子の右側に書式設定するオブジェクトを入力します。

"{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi
1 hello      3.14

書式設定された文字列で中かっこ ( {} ) を保持する必要がある場合は、中かっこを2倍にしてエスケープすることができます。

"{0} vs. {{0}}" -f 'foo'
foo vs. {0}

詳細については、「 Format メソッド」と「 複合書式指定」を参照してください。

Index 演算子 [ ]

配列やハッシュテーブルなどのインデックス付きコレクションからオブジェクトを選択します。 配列インデックスは0から始まるため、最初のオブジェクトはとして [0] インデックスが作成されます。 負のインデックスを使用して、最後の値を取得することもできます。 ハッシュテーブルには、キー値によってインデックスが付けられます。

インデックスの一覧を指定すると、インデックス演算子は、それらのインデックスに対応するメンバーの一覧を返します。

PS> $a = 1, 2, 3
PS> $a[0]
1
PS> $a[-1]
3
PS> $a[2, 1, 0]
3
2
1
(Get-HotFix | Sort-Object installedOn)[-1]
$h = @{key="value"; name="PowerShell"; version="2.0"}
$h["name"]
PowerShell
$x = [xml]"<doc><intro>Once upon a time...</intro></doc>"
$x["doc"]
intro
-----
Once upon a time...

オブジェクトがインデックス付きコレクションでない場合、index 演算子を使用して最初の要素にアクセスすると、オブジェクト自体が返されます。 最初の要素を超えるインデックス値はを返し $null ます。

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

パイプライン演算子 |

このコマンドの前に続くコマンドの出力を ("パイプ" で) 送信します。 出力に複数のオブジェクト ("コレクション") が含まれている場合、パイプライン演算子はオブジェクトを一度に1つずつ送信します。

Get-Process | Get-Member
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}

範囲演算子 ..

上限と下限を指定して、整数配列内の連続する整数を表します。

1..10
foreach ($a in 1..$max) {Write-Host $a}

範囲は逆順に作成することもできます。

10..1
5..-5 | ForEach-Object {Write-Output $_}

メンバーアクセス演算子 .

オブジェクトのプロパティおよびメソッドにアクセスします。 メンバー名は式にすることができます。

$myProcess.peakWorkingSet
(Get-Process PowerShell).kill()
'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }

PowerShell 3.0 を開始すると、メンバーが含まれていないリストコレクションオブジェクトに対して演算子を使用すると、PowerShell によってそのコレクション内の項目が自動的に列挙され、各項目に対して演算子が使用されます。 詳細については、「 about_Member-Access_Enumeration」を参照してください。

静的メンバー演算子 ::

.NET Framework クラスの静的プロパティおよびメソッドを呼び出します。 オブジェクトの静的なプロパティとメソッドを検索するには、コマンドレットの Get-Member static パラメーターを使用します。 メンバー名は式にすることができます。

[datetime]::Now
'MinValue', 'MaxValue' | Foreach-Object { [int]:: $_ }

関連項目