about_Assignment_Operators

簡単な説明

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

長い説明

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

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

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

構文

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

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

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

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

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

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

値の割り当て

変数は、値を格納する名前付きメモリ空間です。 代入演算子 を使用して、変数に値を格納します = 。 新しい値は、変数の既存の値を置き換えるか、既存の値に新しい値を追加できます。

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

$MyShell = "PowerShell"

PowerShell で変数に値を割り当てると、変数が存在していない場合は作成されます。 たとえば、次の 2 つの代入ステートメントの 1 つ目では、 変数が作成され、値 6 が $a に代入されます $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未満の場合、変数に0が割り当てられ $b ます。 の値が0未満でない場合は、の値 $b をに代入し $a $b ます。

代入演算子

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

次のステートメントでは、変数に整数値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 の値を変数に1000の累乗に割り当てるには、次のように $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

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

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

$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

後置バージョンの演算子は、その値がステートメントで使用された後に変数をインクリメントします。 次の例では、 $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、値2を変数に、値3を変数に代入してい $a $b $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 てる。 変数の値を他の 3 つの $c 変数に割り当てるには、次の形式を使用します。

$d, $e, $f = $c

このコマンドは、変数に値 3、変数 $d に値 4、変数に値 5 を割 $e り当 $f てるコマンドです。

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

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

そのため、PowerShell は値 1 を 変数に、値 $a 2 を変数に割り当 $b てします。 変数 $c は です $null

変数をチェーンすることで、1 つの値を複数の変数に割り当てはまたできます。 たとえば、次のコマンドは、4 つの変数すべてに値 "three" を割り当てるとします。

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

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

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

関連項目

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable