about_Assignment_Operators

簡単な説明

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

詳細な説明

代入演算子は、1 つ以上の値を変数に割り当てます。 等号 (=) は PowerShell 割り当て演算子です。 PowerShell には、次の複合代入演算子もあります。 -=+=*=%=++--??= 複合代入演算子は、代入の前に値に対して操作を実行します。

構文

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

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

代入可能な式には、変数とプロパティが含まれます。 値には、1 つの値、値の配列、またはコマンド、式、またはステートメントを指定できます。

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

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

代入可能な式の値は数値であるか、数値に変換できる必要があります。

代入演算子の使用

変数は、値を格納する名前付きメモリ空間です。 代入演算子を使用して変数に値を格納します =。 新しい値は、変数の既存の値を置き換えたり、既存の値に新しい値を追加したりすることもできます。 たとえば、次のステートメントは値 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$a 0 未満でない場合は、その値が $b 割り当てられます。

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

$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、メガバイト、ギガバイトGBMBバイトに変換することもできます。 たとえば、変数に 10 KB の値を割り当てるには、次のように $a 入力します。

$a = 10kb

複合代入演算子の使用

複合代入演算子は、代入前の値に対して数値演算を実行します。

重要

複合代入演算子では、動的スコープは使用されません。 変数は常に現在のスコープ内にあります。

次の例では、変数 $x はグローバル スコープで定義されています。 中かっこによって新しいスコープが作成されます。 中かっこ内の変数 $x は新しいインスタンスであり、グローバル変数のコピーではありません。

$x = 1 # Global scope
& { $x += 1; $x }
1

通常の代入演算子を使用すると、親スコープから変数のコピーが取得されます。 ただし、親スコープでは変更されないことに注意してください $x

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

加算演算子による代入

加算演算子 += による代入は、変数の値をインクリメントするか、指定した値を既存の値に追加します。 このアクションは、変数に数値型または文字列型があるかどうか、および変数に 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

and

$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
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

減算演算子による代入

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

演算子は -= 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

剰余演算子による代入

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

演算子は %= 2 つの演算を結合します。 最初に、reメインder を除算して決定し、次に reメインder を変数に割り当てます。 したがって、次のステートメントは同等です。

$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割り当てられる$cため、変数と$a変数の値が異$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割り当てられる$dため、変数と$a変数の値が異$aなります。

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

Null 合体代入演算子

null 合体代入演算子 ??= は、左側のオペランドが null と評価された場合にのみ、右側のオペランドの値を左側のオペランドに代入します。 ??= 演算子では、左側のオペランドが null 値以外に評価された場合は、その右側のオペランドは評価されません。

$x = $null
$x ??= 100
$x
100

詳細については、「Null 合体演算子」を参照してください

Microsoft .NET 型

既定では、変数に値が 1 つしかない場合、変数に割り当てられる値によって変数のデータ型が決まります。 たとえば、次のコマンドは 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
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

データ型を変更するには、次のように値を置き換える必要があります。

[int]$a = 3

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

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[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

関連項目