about_Assignment_Operators
簡単な説明
演算子を使用して変数に値を割り当てる方法について説明します。
長い説明
代入演算子は、変数に 1 つ以上の値を割り当てます。 割り当て前に値に対して数値演算を実行できます。
PowerShell では、次の代入演算子がサポートされています。
演算子 | 説明 |
---|---|
= | 変数の値を指定した値に設定します。 |
+= | 変数の値を指定した値だけ増やします。 |
は、指定した値を既存の値に追加します。 | |
-= | 変数の値を指定した値だけ小さくします。 |
*= | 変数の値に指定した値を乗算するか、または |
は、指定した値を既存の値に追加します。 | |
/= | 変数の値を指定した値で除算します。 |
%= | 変数の値を指定した値で除算し、 |
次に、剰余 (剰余) を変数に割り当てます。 | |
++ | 変数、代入可能なプロパティ、または の値を増やします。 |
array 要素を 1 で指定します。 | |
-- | 変数、代入可能なプロパティ、または の値を小さくします。 |
array 要素を 1 で指定します。 |
構文
代入演算子の構文は次のとおりです。
<assignable-expression>
<assignment-operator>
<value>
代入可能な式には、変数とプロパティが含まれます。 値には、1 つの値、値の配列、またはコマンド、式、またはステートメントを指定できます。
インクリメント演算子とデクリメント演算子は単項演算子です。 それぞれにプレフィックスと後置バージョンがあります。
<assignable-expression><operator>
<operator><assignable-expression>
代入可能な式は数値であるか、数値に変換できる必要があります。
値の割り当て
変数は、値を格納する名前付きメモリ空間です。 代入演算子 を使用して、変数に値を格納します =
。 新しい値は変数の既存の値を置き換えることができます。または、既存の値に新しい値を追加することもできます。
基本的な代入演算子は等号 =
(ASCII 61)
です。 たとえば、次のステートメントでは、値 PowerShell を変数に $MyShell
割り当てます。
$MyShell = "PowerShell"
PowerShell で変数に値を割り当てると、変数がまだ存在していない場合は作成されます。 たとえば、次の 2 つの代入ステートメントの 1 つ目では、 変数が $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 }
次の使用例は、 の値が $a
0 未満の $b
場合に変数に 0 を割り当てます。 の値$b
が 0 より小さい場合は、 の$b
値が に$a
割り当てられます。
代入演算子
代入演算子 =
は、変数に値を割り当てます。 変数に既に値がある場合、代入演算子 =
は警告なしで値を置き換えます。
次のステートメントは、整数値 6 を変数に $a
割り当てます。
$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
割り当てます。 たとえば、0x10 の値を変数に割り当てるには、次のように $a
入力します。
$a = 0x10
変数に指数値を割り当てるには、ルート番号、文字 e
、および 10 の倍数を表す数値を入力します。 たとえば、変数に 3.1415 の値を 1,000 の累乗に割り当てるには、次のように $a
入力します。
$a = 3.1415e3
PowerShell では、キロバイト、 KB
メガバイト MB
、ギガバイト GB
をバイトに変換することもできます。 たとえば、変数に 10 キロバイトの値を割り当てるには、次のように $a
入力します。
$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
変数の値がハッシュ テーブルの場合、演算子の +=
右側の値がハッシュ テーブルに追加されます。 ただし、ハッシュ テーブルに追加できる型は別のハッシュ テーブルだけなので、他のすべての割り当ては失敗します。
たとえば、次のコマンドはハッシュ テーブルを変数に $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
変数を削除するには、 Remove-Variable コマンドレットを使用します。 このメソッドは、変数が特定のデータ型に明示的にキャストされていて、型指定されていない変数が必要な場合に便利です。 次のコマンドは、変数を $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
後置バージョンの 演算子は、 ステートメントでその値が使用された後に変数をインクリメントします。 次の例では、値が$c
変更される前$a
に に割り当てられる$c
ため、 変数と $a
変数の値は異なります。
$a = 7
$c = $a++
$a
8
$c
7
デクリメント演算子 --
は、変数の値を 1 ずつ小さくします。 インクリメント演算子と同様に、単純なステートメントで 演算子を使用しても値は返されません。 次のように、かっこを使用して値を返します。
$a = 7
--$a
$a
6
(--$a)
5
演算子のプレフィックス バージョンは、次のように、 ステートメントで値が使用される前に変数をデクリメントします。
$a = 7
$c = --$a
$a
6
$c
6
演算子の後置バージョンでは、 ステートメントでその値が使用された後に変数がデクリメントされます。 次の例では、値が$d
変更される前$a
に に割り当てられる$d
ため、 変数と $a
変数の値は異なります。
$a = 7
$d = $a--
$a
6
$d
7
Microsoft .NET 型
既定では、変数に値が 1 つしかない場合、変数に割り当てられる値によって変数のデータ型が決まります。 たとえば、次のコマンドは、"Integer" (System.Int32) 型の変数を作成します。
$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
割り当てます。 変数に値 3、4、5 を $c
割り当てます。
変数内の値を他の $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 コマンドレットを使用することもできます。 たとえば、次のコマンドでは、 を使用 Set-Variable
して 1、2、3 の配列を変数に $a
割り当てます。
Set-Variable -Name a -Value 1, 2, 3