about_Assignment_Operators

簡単な説明

演算子を使用して変数に値を割り当てる方法について説明します。

長い説明

代入演算子は、1つまたは複数の値を変数に代入します。 割り当ての前に、値に対して数値演算を実行できます。

PowerShell では、次の代入演算子がサポートされています。

演算子 説明
= 変数の値を指定された値に設定します。
+= 指定された値で変数の値を増やします。
指定された値を既存の値に追加します。
-= 指定された値で変数の値を減らします。
*= 変数の値を指定した値で乗算します。
指定された値を既存の値に追加します。
/= 指定された値で変数の値を除算します。
%= 変数の値を指定された値で除算します。
次に、剰余 (剰余) を変数に代入します。
++ 変数の値を増やすか、割り当て可能なプロパティを増やします。
配列要素を1つ。
-- 変数の値、割り当て可能なプロパティ、またはを減らします。
配列要素を1つ。

構文

代入演算子の構文は次のとおりです。

<assignable-expression> <assignment-operator> <value>

割り当て可能な式には、変数とプロパティがあります。 値には、単一の値、値の配列、またはコマンド、式、またはステートメントを指定できます。

インクリメント演算子とデクリメント演算子は単項演算子です。 各には、プレフィックスと後置バージョンがあります。

<assignable-expression><operator> <operator><assignable-expression>

割り当て可能な式は数値であるか、数値に変換可能である必要があります。

値の割り当て

変数は、値を格納するメモリ空間という名前が付けられます。 変数に値を格納するには、代入演算子 = を使用します。 新しい値を使用すると、変数の既存の値を置き換えることができます。また、既存の値に新しい値を追加することもできます。

基本代入演算子は等号 = (ASCII 61) です。 たとえば、次のステートメントは、値 PowerShell を変数に $MyShell 割り当てます。

$MyShell = "PowerShell"

PowerShell で変数に値を割り当てると、変数がまだ存在しない場合は作成されます。 たとえば、次の2つの代入ステートメントの最初のステートメントは、変数を作成 $a し、値6をに $a 割り当てます。 2番目の代入ステートメントでは、12の値をに $a 代入します。 最初のステートメントは、新しい変数を作成します。 2番目のステートメントは、値のみを変更します。

$a = 6
$a = 12

PowerShell の変数には、キャストしない限り、特定のデータ型はありません。 変数に1つのオブジェクトしか含まれていない場合、変数はそのオブジェクトのデータ型を受け取ります。 変数にオブジェクトのコレクションが含まれている場合、変数には System.object データ型があります。 そのため、任意の型のオブジェクトをコレクションに割り当てることができます。 次の例は、エラーを生成せずに、変数にプロセスオブジェクト、サービスオブジェクト、文字列、および整数を追加できることを示しています。

$a = Get-Process
$a += Get-Service
$a += "string"
$a += 12

代入演算子 = はパイプライン演算子 | よりも優先順位が低いため、コマンドパイプラインの結果を変数に割り当てるためにかっこは必要ありません。 たとえば、次のコマンドは、コンピューター上のサービスを並べ替え、並べ替えられたサービスを変数に $a 割り当てます。

$a = Get-Service | Sort-Object -Property name

次の例のように、ステートメントによって作成された値を変数に割り当てることもできます。

$a = if ($b -lt 0) { 0 } else { $b }

この例では、の値が0未満の $b 場合、 $a 変数に0が割り当てられます。 の $b 値が0未満でない場合は、の $b 値をに $a 代入します。

代入演算子

代入演算子 = は、変数に値を代入します。 変数に既に値がある場合、代入演算子 = は警告なしで値を置換します。

次のステートメントでは、変数に $a 整数値6が割り当てられます。

$a = 6

文字列値を変数に割り当てるには、次のように文字列値を引用符で囲みます。

$a = "baseball"

変数に配列 (複数値) を割り当てるには、次のように、値をコンマで区切ります。

$a = "apple", "orange", "lemon", "grape"

ハッシュテーブルを変数に割り当てるには、PowerShell で標準のハッシュテーブル表記を使用します。 アットマーク @ の後に、セミコロン ; で区切られ、中かっこ { } で囲まれたキーと値のペアを入力します。 たとえば、ハッシュテーブルを変数に $a 割り当てるには、次のように入力します。

$a = @{one=1; two=2; three=3}

16進値を変数に割り当てるには、値 0x の前にを指定します。 PowerShell は、16進数値 (0x10) を10進値 (この場合は 16) に変換し、その値を変数に $a 代入します。 たとえば、変数に $a 0x10 の値を割り当てるには、次のように入力します。

$a = 0x10

指数値を変数に割り当てるには、ルート番号、文字 e 、および10の倍数を表す数値を入力します。 たとえば、3.1415 の値を変数に $a 1000 の累乗に割り当てるには、次のように入力します。

$a = 3.1415e3

PowerShell では、キロ KB バイト、メガ MB バイト、ギガ GB バイトをバイトに変換することもできます。 たとえば、変数に $a 10 kb の値を割り当てるには、次のように入力します。

$a = 10kb

加算演算子による代入

加算演算子 += による代入では、変数の値がインクリメントされるか、または指定した値が既存の値に追加されます。 アクションは、変数に数値型または文字列型があるかどうか、および変数に1つの値 (スカラー) または複数の値 (コレクション) が含まれているかどうかによって異なります。

演算子は、2つの += 操作を結合します。 まず、を追加してから、を割り当てます。 したがって、次のステートメントは同等です。

$a += 2
$a = ($a + 2)

変数に1つの数値が含まれている場合、演算子は += 、演算子の右辺にある量だけ既存の値をインクリメントします。 次に、演算子は、結果の値を変数に代入します。 次の例では、演算子を使用 += して変数の値を増やす方法を示します。

$a = 4
$a += 2
$a
6

変数の値が文字列の場合、演算子の右側の値が文字列に追加されます。次に例を示します。

$a = "Windows"
$a += " PowerShell"
$a
Windows PowerShell

変数の値が配列の場合、演算子は += 演算子の右側にある値を配列に追加します。 キャストによって配列が明示的に型指定されない限り、次のように任意の型の値を配列に追加できます。

$a = 1,2,3
$a += 2
$a
1
2
3
2

および

$a += "String"
$a
1
2
3
2
String

変数の値がハッシュテーブルの場合、演算子は += 演算子の右側にある値をハッシュテーブルに追加します。 ただし、ハッシュテーブルに追加できる型はもう1つのハッシュテーブルだけなので、他のすべての割り当ては失敗します。

たとえば、次のコマンドは、ハッシュテーブルを変数に $a 割り当てます。 次に、演算子を使用 += して、既存のハッシュテーブルに別のハッシュテーブルを追加します。これにより、新しいキーと値のペアが既存のハッシュテーブルに実質的に追加されます。 出力に示されているように、このコマンドは成功します。

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

次のコマンドは、変数のハッシュテーブル $a に整数 "1" を追加しようとします。 このコマンドは失敗します。

$a = @{a = 1; b = 2; c = 3}
$a += 1
You can add another hash table only to a hash table.
At line:1 char:6
+ $a += <<<<  1

減算演算子による代入

減算による代入演算子 -= は、演算子の右辺に指定されている値によって変数の値をデクリメントします。 この演算子は、文字列変数と共に使用することはできません。また、この演算子を使用してコレクションから要素を削除することはできません。

演算子は、2つの -= 操作を結合します。 まず、を減算してから、を割り当てます。 したがって、次のステートメントは同等です。

$a -= 2
$a = ($a - 2)

次の例では、演算子を使用 -= して変数の値を小さくする方法を示します。

$a = 8
$a -= 2
$a
6

また、代入演算子を使用 -= して、数値配列のメンバーの値を小さくすることもできます。 これを行うには、変更する配列要素のインデックスを指定します。 次の例では、配列の3番目の要素の値 (要素 2) が1ずつ減少しています。

$a = 1,2,3
$a[2] -= 1
$a
1
2
2

演算子を使用 -= して変数の値を削除することはできません。 変数に割り当てられているすべての値を削除するには、 Clear Itemまたはclear variableコマンドレットを使用して、変数にまたは ""$null 値を割り当てます。

$a = $null

特定の値を配列から削除するには、配列表記を使用して、特定の $null 項目に値を割り当てます。 たとえば、次のステートメントは、配列から2番目の値 (インデックス位置 1) を削除します。

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

変数を削除するには、 変数の削除 コマンドレットを使用します。 このメソッドは、変数が特定のデータ型に明示的にキャストされ、型指定されていない変数を必要とする場合に便利です。 次のコマンドを実行すると、変数が $a 削除されます。

Remove-Variable -Name a

乗算演算子による代入

乗算演算子 *= による代入では、数値を乗算するか、変数の文字列値の指定された数のコピーを追加します。

変数に1つの数値が含まれている場合、その値には演算子の右側の値が乗算されます。 たとえば、次の例では、演算子を使用 *= して変数の値を乗算する方法を示しています。

$a = 3
$a *= 4
$a
12

この場合、演算子は *= 2 つの操作を結合します。 まず、とを乗算し、次にを割り当てます。 したがって、次のステートメントは同等です。

$a *= 2
$a = ($a * 2)

変数に文字列値が含まれている場合、PowerShell は次のように、指定された数の文字列を値に追加します。

$a = "file"
$a *= 4
$a
filefilefilefile

配列の要素を乗算するには、インデックスを使用して、乗算する要素を指定します。 たとえば、次のコマンドは、配列の最初の要素 (インデックス位置 0) を2で乗算します。

$a[0] *= 2

除算演算子による代入

除算による代入演算子 /= は、演算子の右辺に指定されている値で数値を除算します。 演算子は、文字列変数と共に使用することはできません。

演算子は、2つの /= 操作を結合します。 まず、を分割し、次にを割り当てます。 したがって、次の2つのステートメントは同等です。

$a /= 2
$a = ($a / 2)

たとえば、次のコマンドでは、演算子を使用 /= して変数の値を除算しています。

$a = 8
$a /=2
$a
4

配列の要素を分割するには、インデックスを使用して、変更する要素を識別します。 たとえば、次のコマンドは、配列内の2番目の要素 (インデックス位置 1) を2で除算します。

$a[1] /= 2

剰余演算子による代入

剰余演算子 %= による代入では、変数の値が演算子の右辺の値によって除算されます。 次に、演算子は %= 剰余 (剰余と呼ばれる) を変数に代入します。 この演算子は、変数に1つの数値が含まれている場合にのみ使用できます。 変数に文字列変数または配列が含まれている場合、この演算子は使用できません。

演算子は、2つの %= 操作を結合します。 まず、剰余を分割して決定し、その剰余を変数に代入します。 したがって、次のステートメントは同等です。

$a %= 2
$a = ($a % 2)

次の例は、演算子を使用 %= して商の剰余を保存する方法を示しています。

$a = 7
$a %= 4
$a
3

インクリメント演算子とデクリメント演算子

インクリメント演算子 ++ は、変数の値を1つ増やします。 単純なステートメントでインクリメント演算子を使用すると、値は返されません。 結果を表示するには、次のように変数の値を表示します。

$a = 7
++$a
$a
8

値を強制的に返すには、次のように、変数と演算子をかっこで囲みます。

$a = 7
(++$a)
8

インクリメント演算子は、変数の前 (プレフィックス) または後 (後置) に配置できます。 プレフィックスバージョンの演算子は、次のように、ステートメントでその値が使用される前に変数をインクリメントします。

$a = 7
$c = ++$a
$a
8
$c
8

後置バージョンの演算子は、その値がステートメントで使用された後に変数をインクリメントします。 次の例では、値が変更前 $a にに $c 割り当てられているため、変数と $a 変数の $c 値が異なります。

$a = 7
$c = $a++
$a
8
$c
7

デクリメント演算子 -- は、変数の値を1つ減らします。 インクリメント演算子と同様に、単純なステートメントで演算子を使用した場合、値は返されません。 次のように、かっこを使用して値を返します。

$a = 7
--$a
$a
6
(--$a)
5

前置バージョンの演算子は、次のように、ステートメントでその値が使用される前に変数をデクリメントします。

$a = 7
$c = --$a
$a
6
$c
6

後置バージョンの演算子は、その値がステートメントで使用された後に変数をデクリメントします。 次の例では、値が変更前 $a にに $d 割り当てられているため、変数と $a 変数の $d 値が異なります。

$a = 7
$d = $a--
$a
6
$d
7

Microsoft .NET の種類

既定では、変数に値が1つしかない場合、変数に割り当てられた値によって変数のデータ型が決まります。 たとえば、次のコマンドでは、"Integer" (system.string) 型の変数が作成されます。

$a = 6

変数の .NET 型を検索するには、次のように GetType メソッドとその FullName プロパティを使用します。 メソッド呼び出しに引数がない場合でも、必ず GetType メソッド名の後にかっこを含めてください。

$a = 6
$a.GetType().FullName
System.Int32

文字列を含む変数を作成するには、変数に文字列値を割り当てます。 値が文字列であることを示すには、次のように引用符で囲みます。

$a = "6"
$a.GetType().FullName
System.String

変数に割り当てられた最初の値が文字列の場合、PowerShell はすべての操作を文字列操作として扱い、新しい値を文字列にキャストします。 これは、次の例のようになります。

$a = "file"
$a += 3
$a
file3

最初の値が整数の場合、PowerShell はすべての操作を整数演算として扱い、新しい値を整数にキャストします。 これは、次の例のようになります。

$a = 6
$a += "3"
$a
9

変数名または最初の代入値の前に型名を角かっこで囲んで、任意の .NET 型として新しいスカラー変数をキャストできます。 変数をキャストするときに、変数に格納できるデータの種類を決定できます。 また、変数を操作するときの動作を決定することもできます。

たとえば、次のコマンドは、変数を文字列型としてキャストします。

[string]$a = 27
$a += 3
$a
273

次の例では、変数をキャストするのではなく、最初の値をキャストしています。

$a = [string]27

変数を特定の型にキャストする場合、一般的な規則として、値ではなく変数をキャストします。 ただし、既存の変数の値を新しいデータ型に変換できない場合は、その変数のデータ型を再キャストすることはできません。 データ型を変更するには、次のように値を置き換える必要があります。

$a = "string"
[int]$a
Cannot convert value "string" to type "System.Int32". Error: "Input string was
not in a correct format." At line:1 char:8 + [int]$a <<<<
[int]$a = 3

さらに、変数名の前にデータ型を指定した場合は、別のデータ型を指定して明示的に型をオーバーライドしない限り、その変数の型はロックされます。 既存の型と互換性のない値を割り当てようとし、明示的に型をオーバーライドしていない場合は、次の例に示すように、PowerShell によってエラーが表示されます。

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:3
+ $a <<<<  = "string"
[string]$a = "string"

PowerShell では、配列内の複数の項目を含む変数のデータ型は、1つの項目を含む変数のデータ型とは異なる方法で処理されます。 データ型が明示的に配列変数に代入されていない限り、データ型は常に System.Object [] になります。 このデータ型は配列に固有です。

場合によっては、別の型を指定することで既定の型をオーバーライドできます。 たとえば、次のコマンドは、変数を配列型として string [] キャストします。

[string []] $a = "one", "two", "three"

PowerShell 変数は、任意の .NET データ型にすることができます。 さらに、現在のプロセスで使用可能な完全修飾 .NET データ型を割り当てることができます。 たとえば、次のコマンドはデータ型を指定し System.DateTime ます。

[System.DateTime]$a = "5/31/2005"

変数には、データ型に System.DateTime 準拠した値が割り当てられます。 変数の $a 値は次のようになります。

Tuesday, May 31, 2005 12:00:00 AM

複数の変数の割り当て

PowerShell では、1つのコマンドを使用して、複数の変数に値を割り当てることができます。 代入値の最初の要素が最初の変数に割り当てられ、2番目の要素が2番目の変数に割り当てられ、3番目の要素が3番目の変数に代入されます。 これは、"複数の代入" と呼ばれます。

たとえば、次のコマンドでは、変数に値 1 $a 、値2を $b 変数に、値 3 $c を変数に代入しています。

$a, $b, $c = 1, 2, 3

代入値に変数よりも多くの要素が含まれている場合は、残りのすべての値が最後の変数に代入されます。 たとえば、次のコマンドには、3つの変数と5つの値が含まれています。

$a, $b, $c = 1, 2, 3, 4, 5

したがって、PowerShell は変数に値 1 $a を代入し、値2を変数に $b 割り当てます。 変数に $c 値3、4、および5が割り当てられます。 変数の値 $c を他の3つの変数に割り当てるには、次の形式を使用します。

$d, $e, $f = $c

このコマンドは、変数に値 3 $d を代入し、値4を $e 変数に、値5を変数に $f 代入します。

代入値に含まれる要素の数が変数の数よりも多い場合、残りの変数には値 $null が割り当てられます。 たとえば、次のコマンドには、3つの変数と2つの値が含まれています。

$a, $b, $c = 1, 2

したがって、PowerShell は変数に値 1 $a を代入し、値2を変数に $b 割り当てます。 $c変数は $null です。

変数を連結することによって、複数の変数に1つの値を割り当てることもできます。 たとえば、次のコマンドでは、4つの変数すべてに "3" という値が割り当てられます。

$a = $b = $c = $d = "three"

代入演算を使用して変数の値を設定するだけでなく、変数の 設定 コマンドレットを使用することもできます。 たとえば、次のコマンドでは、を使用 Set-Variable して、変数に $a 1、2、3の配列を割り当てます。

Set-Variable -Name a -Value 1, 2, 3

関連項目