about_assignment_operators
トピック
about_assignment_operators
簡易説明
代入演算子を使用して、変数に値を代入する方法について説明します。
詳細説明
代入演算子は、変数に 1 つまたは複数の値を代入するために使用します。代入演算子によって、代入
前の値に対して数値演算を実行することができます。
Windows PowerShell は、以下の代入演算子をサポートしています。
演算子 説明
------- -----------
= 指定した値を変数の値に設定します。
+= 指定した値を変数の値に加算するか、指定した値を既存の値に追加します。
-= 指定した値を変数の値から減算します。
*= 指定した値で変数の値を乗算するか、指定した値を既存の値に追加します。
/= 指定した値で変数の値を除算します。
%= 変数の値を指定した値で除算し、余り (法) を変数に代入します。
++ 変数、代入可能なプロパティ、または配列要素の値を 1 ずつ加算します。
-- 変数、代入可能なプロパティ、または配列要素の値を 1 ずつ減算します。
構文
代入演算子の構文は次のとおりです。
<代入可能な式> <代入演算子> <値>
代入可能な式には変数とプロパティが含まれます。値には、単一の値、値の配列、
またはコマンド、式、ステートメントを指定できます。
インクリメント演算子およびデクリメント演算子は単項演算子です。
それぞれに前置形式と後置形式があります。
<代入可能な式> <演算子>
<演算子> <代入可能な式>
代入可能な式は数値であるか、または数値に変換できる必要があります。
値の代入
変数とは、値を格納するための名前付きメモリ領域です。変数に値を格納するには、代入演算子 (=)
を使用します。新しい値で変数の既存の値を置き換えることも、新しい値を既存の値に追加することもで
きます。
基本の代入演算子は、等号 (=) (ASCII 61) です。たとえば、次のステートメントでは、
$MyShell 変数に Windows PowerShell という値が代入されます。
$MyShell = "Windows PowerShell"
Windows PowerShell で変数に値を代入するとき、まだその変数が存在しない場合は、変数が作成
されます。たとえば、次の 2 つのうちの最初の代入ステートメントは、変数 $a を作成し、$a に
6 の値を代入しています。2 番目の代入ステートメントは、$a に 12 の値を代入しています。最初
のステートメントでは、新しい変数が作成されます。2 番目のステートメントでは、値のみが変更さ
れます。
$a = 6
$a = 12
Windows PowerShell の変数には、キャストしない限り、特定のデータ型がありません。変数に 1
つのオブジェクトのみが含まれている場合、変数はそのオブジェクトのデータ型になります。変数にオ
ブジェクトのコレクションが含まれている場合、変数の型は System.Object データ型です。したが
って、コレクションには任意の型のオブジェクトを代入することができます。次の例は、エラーを生成
せずにプロセス オブジェクト、サービス オブジェクト、文字列、および整数を変数に追加できること
を示しています。
$a = get-process
$a += get-service
$a += "string"
$a += 12
代入演算子 (=) はパイプライン演算子 (|) より優先順位が低いため、コマンド パイプラインの結
果を変数に代入するときにかっこは必要ありません。たとえば、コンピューター上のサービスを並べ替
え、その並べ替えたサービスを変数 $a に代入するには、次のコマンドを入力します。
$a = get-service | sort name
次の例に示すように、ステートメントによって作成された値を変数に代入することもできます。
$a = if ($b -lt 0) { 0 } else { $b }
この例では、$b の値が 0 より小さい場合、変数 $a に 0 を代入します。$b の値が 0 以上であ
る場合、$b の値を $a に代入します。
代入演算子 (=)
代入演算子 (=) は、変数に値を代入するために使用します。変数に既に値が指定されている場合、警
告なく代入演算子 (=) によって値が置き換えられます。
次のステートメントでは、変数 $a に整数値 6 が代入されます。
$a = 6
変数に文字列値を代入するには、次のように文字列値を引用符で囲みます。
$a = "baseball"
変数に配列 (複数の値) を代入するには、次のように値をコンマで区切ります。
$a = "apple", "orange", "lemon", "grape"
変数にハッシュ テーブルを代入するには、Windows PowerShell で標準のハッシュ テーブル表記
を使用します。アット マーク (@) に続いて、キーと値の各ペアをセミコロン (;) で区切って入力
し、中かっこ ({ }) で囲みます。たとえば、変数 $a にハッシュ テーブルを代入するには、次のよ
うに入力します。
$a = @{one=1; two=2; three=3}
変数に 16 進数値を代入するには、値の前に "0x" を付けます。Windows PowerShell では、16
進数値 (0x10) が 10 進数値 (この場合は 16) に変換され、この値が変数 $a に代入されます。たと
えば、変数 $a に 0x10 の値を代入するには、次のように入力します。
$a = 0x10
変数に指数値を代入するには、根の数値、文字 "e"、および 10 の倍数を表す数値を指定します。た
とえば、変数 $a に 3.1415 の 1,000 倍を代入するには、次のように入力します。
$a = 3.1415e3
Windows PowerShell では、キロバイト (KB)、メガバイト (MB)、およびギガバイト (GB) をバイトに
変換することもできます。たとえば、変数 $a に 10 KB の値を代入するには、次のように入力しま
す。
$a = 10kb
加算演算子 (+=) による代入
加算演算子 (+=) による代入は、変数の値をインクリメントする場合や、指定した値を既存の値に追
加する場合に使用します。この動作は、変数が数値型と文字列型のどちらであるかと、その変数に単一
の値 (スカラー) または複数の値 (コレクション) のどちらが含まれているかによって決定されます。
+= 演算子は 2 つの演算を組み合わせたものです。加算の後で代入が行われます。したがって、次の
2 つのステートメントは同等です。
$a += 2
$a = ($a + 2)
変数に単一の数値が含まれている場合、+= 演算子を使用すると、演算子の右側に指定した値だけ既存
の値がインクリメントされます。次に、演算子によって、その結果の値が変数に代入されます。
次の例は、+= 演算子を使用して変数の値を増加させる方法を示しています。
C:\PS> $a = 4
C:\PS> $a += 2
C:\PS> $a
6
変数の値が文字列である場合、演算子の右側の値が次のように文字列に追加されます。
C:\PS> $a = "Windows"
C:\PS> $a +- " PowerShell"
C:\PS> $a
Windows PowerShell
変数の値が配列である場合、+= 演算子によって演算子の右側の値が配列に追加されます。キャスト
によって配列が明示的に型指定されていない限り、次のように、任意の型の値を配列に追加することが
できます。
C:\PS> $a = 1,2,3
C:\PS> $a += 2
C:\PS> $a
1
2
3
2
C:\PS> $a += "String"
C:\PS> $a
1
2
3
2
String
変数の値がハッシュ テーブルである場合、+= 演算子によって演算子の右側の値がハッシュ テーブ
ルに追加されます。ただし、ハッシュ テーブルに追加できる型はハッシュ テーブルのみであるため、
他のすべての代入は失敗します。
たとえば、次のコマンドでは、ハッシュ テーブルが変数 $a に代入されます。
次に、+= 演算子を使用して既存のハッシュ テーブルに別のハッシュ テーブルが追加されていま
す。これで、既存のハッシュ テーブルに新しいキーと値のペアが追加されたことになります。出力に
示されているように、このコマンドは成功します。
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += @{mode = "write"}
C:\PS> $a
Name Value
---- -----
a 1
b 2
mode write
c 3
次のコマンドでは、変数 $a のハッシュ テーブルに整数 (1) を追加しようと試みています。この
コマンドは失敗します。
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += 1
別のハッシュ テーブルは、ハッシュ テーブルにのみ追加できます。
行:1 文字:6
+ $a += <<<< 1
減算演算子 (-=) による代入
減算演算子 (-=) による代入は、演算子の右側に指定した値だけ変数の値をデクリメントする場合に
使用します。
この演算子は文字列変数には使用できません。また、コレクションから要素を削除するためにも使用できません。
-= 演算子は 2 つの演算を組み合わせたものです。減算の後で代入が行われます。したがって、次の
2 つのステートメントは同等です。
$a -= 2
$a = ($a - 2)
次の例は、-= 演算子を使用して変数の値を減算する方法を示しています。
C:\PS> $a = 8
C:\PS> $a -= 2
C:\PS> $a
6
また、-= 代入演算子を使用して、数値配列のメンバーの値を減算することもできます。その場合は、
変更する配列要素のインデックスを指定します。次の例では、配列の 3 番目の要素 (要素 2) の値
を 1 減算します。
C:\PS> $a = 1,2,3
C:\PS> $a[2] -= 1.
C:\PS> $a
1
2
2
-= 演算子を使用して、変数の値を削除することはできません。変数に代入されているすべての値を削
除するには、Clear-Item または Clear-Variable コマンドレットを使用して、$null または
"" の値を変数に代入します。
$a = $null
配列から特定の値を削除するには、配列表記を使用して、その特定の項目に $null の値を代入しま
す。たとえば、次のステートメントは配列の 2 番目の値 (インデックス位置 1) を削除します。
C:\PS> $a = 1,2,3
C:\PS> $a
1
2
3
C:\PS> $a[1] = $null
C:\PS> $a
1
3
変数を削除するには、Remove-Variable コマンドレットを使用します。このメソッドは、変数が特
定のデータ型に明示的にキャストされているときに、型指定されていない変数を必要とする場合に便利
です。次のコマンドでは、変数 $a が削除されます。
remove-variable a
乗算演算子 (*=) による代入
乗算演算子 (*=) による代入は、数値を乗算する場合や、指定した数だけ変数の文字列値の
コピーを追加する場合に使用します。
変数に単一の数値が含まれている場合、その値は演算子の右側の値で乗算されます。たとえば、次の
例は、*= 演算子を使用して変数の値を乗算する方法を示しています。
C:\PS> $a = 3
C:\PS> $a *= 4
C:\PS> $a
12
この場合、*+ 演算子には 2 つの演算が組み合わされています。乗算の後で代入が行われます。した
がって、次の 2 つのステートメントは同等です。
$a *= 2
$a = ($a * 2)
変数に文字列値が含まれている場合、次のように、その文字列が指定した数だけ結合された値になります。
C:\PS> $a = "file"
C:\PS> $a *= 4
C:\PS> $a
filefilefilefile
配列の要素の 1 つを乗算するには、乗算する要素をインデックスで指定します。たとえば、次のコマ
ンドは配列の最初の要素 (インデックス位置 0) を 2 で乗算します。
$a[0] *= 2
除算演算子 (/=) による代入
除算演算子 (/=) による代入は、演算子の右側に指定した値で数値を除算するために使用します。こ
の演算子は、文字列変数には使用できません。
/= 演算子は 2 つの演算を組み合わせたものです。除算の後で代入が行われます。したがって、次の
2 つのステートメントは同等です。
$a /= 2
$a = ($a / 2)
たとえば、次のコマンドは、/= 演算子を使用して変数の値を除算しています。
C:\PS> $a = 8
C:\PS> $a /=2
C:\PS> $a
4
配列の要素の 1 つを除算するには、変更する要素をインデックスで指定します。たとえば、次のコマ
ンドは、配列の 2 番目の要素 (インデックス位置 1) を 2 で除算しています。
$a[1] /= 2
剰余演算子 (%=) による代入
剰余演算子 (%=) による代入では、演算子の右側の値で変数の値が除算されます。次に、余り (法
ともいう) が変数に代入されます。この演算子を使用できるのは、変数に含まれている値が単一の数
値である場合のみです。変数に文字列変数または配列が含まれている場合、この演算子を使用できません。
%= 演算子は 2 つの演算を組み合わせたものです。除算を実行して余りを求めた後で、その余りが変
数に代入されます。したがって、次の 2 つのステートメントは同等です。
$a %= 2
$a = ($a % 2)
次の例は、%= 演算子を使用して商の法を保存する方法を示しています。
C:\PS> $a = 7
C:\PS> $a %= 4
C:\PS> $a
3
インクリメント演算子およびデクリメント演算子
インクリメント演算子 (++) は、変数の値を 1 ずつ加算します。単純なステートメントでインクリメ
ント演算子を使用した場合は、値が返されません。
次のように 変数の値を表示させ、結果を参照します。
C:\PS> $a = 7
C:\PS> ++$a
C:\PS> $a
8
強制的に値が返されるようにするには、次のように変数と演算子をかっこで囲みます。
C:\PS> $a = 7
C:\PS> (++$a)
8
インクリメント演算子は、変数の前 (前置) または後 (後置) に配置することができます。演算子の
前置形式では、次のように、変数の値がステートメントで使用される前にインクリメントされます。
C:\PS> $a = 7
C:\PS> $c = ++$a
C:\PS> $a
8
C:\PS> $c
8
演算子の後置形式では、変数の値がステートメントで使用された後にインクリメントされます。次の
例では、$a が変更される前に $c に値が代入されるため、変数 $c と $a の値は異なります。
C:\PS> $a = 7
C:\PS> $c = $a++
C:\PS> $a
8
C:\PS> $c
7
デクリメント演算子 (--) は、変数の値を 1 ずつ減算します。インクリメント演算子と同様、単純な
ステートメントで演算子を使用した場合は、値が返されません。値を返すには、次のようにかっこを使
用します。
C:\PS> $a = 7
C:\PS> --$a
C:\PS> $a
6
C:\PS> (--$a)
5
演算子の前置形式では、次のように、変数の値がステートメントで使用される前にデクリメントされます。
C:\PS> $a = 7
C:\PS> $c = --$a
C:\PS> $a
6
C:\PS> $c
6
演算子の後置形式では、変数の値がステートメントで使用された後にデクリメントされます。次の例
では、$a が変更される前に $d に値が代入されるため、変数 $d と $a の値は異なります。
C:\PS> $a = 7
C:\PS> $d = $a--
C:\PS> $a
6
C:\PS> $d
7
Microsoft .NET Framework の型
既定では、変数に 1 つの値のみが指定されている場合、変数に代入されている値によって変数のデー
タ型が決定されます。たとえば、次のコマンドは変数の型が整数 (System.Int32) である変数を作
成します。
$a = 6
変数の .NET Framework 型を調べるには、次のように、GetType メソッドとその FullName プ
ロパティを使用します。メソッドの呼び出しは引数を受け取りませんが、GetType メソッド名の後に
必ずかっこを使用してください。
C:\PS> $a = 6
C:\PS> $a.gettype().fullname
System.Int32
文字列を含む変数を作成するには、文字列値を変数に代入します。値が文字列であることを示すには、
次のようにその値を引用符で囲みます。
C:\PS> $a = "6"
C:\PS> $a.gettype().fullname
System.String
変数に代入する最初の値が文字列の場合、すべての演算は文字列演算として処理され、
新しい値が文字列にキャストされます。これを次の例に示します。
C:\PS> $a = "file"
C:\PS> $a += 3
C:\PS> $a
file3
最初の値が整数の場合、すべての演算は整数演算として処理され、新しい値が整数にキャストされます。
これを次の例に示します。
C:\PS> $a = 6
C:\PS> $a += "3"
C:\PS> $a
9
変数名または最初の代入値の前に角かっこで囲んだ型名を入力すると、新しいスカラー変数を任意
の .NET Framework 型としてキャストできます。変数をキャストすると、変数に格納できるデータの
型を決定できます。また、変数を操作するときの動作も決定できます。
たとえば、次のコマンドは変数を文字列型としてキャストします。
C:\PS> [string]$a = 27
C:\PS> $a += 3
C:\PS> $a
273
次の例では、変数をキャストする代わりに、最初の値がキャストされます。
$a = [string]27
変数を特定の型にキャストすると、一般的な規則では、値ではなく変数がキャスト
されます。ただし、その変数の値を新しいデータ型に変換できない場合、既存の変数の
データ型をキャストし直すことはできません。データ型を変更するには、次のようにそ
の値を置き換える必要があります。
C:\PS> $a = "string"
C:\PS> [int]$a
値 "string" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しく
ありません。"
行:1 文字:8
+ [int]$a <<<<
C:\PS> [int]$a =3
さらに、変数名の前にデータ型を置いた場合、別のデータ型を指定することでその型を明示的に変更
しない限り、その変数の型は固定されます。既存の型と互換性がない値を代入する際に型を明示的に
変更しない場合、次の例に示すように、エラーが表示されます。
C:\PS> $a = 3
C:\PS> $a = "string"
C:\PS> [int]$a = 3
C:\PS> $a = "string"
値 "string" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しく
ありません。"
行:1 文字:3
+ $a <<<< = "string"
C:\PS> [string]$a = "string"
Windows PowerShell では、配列に複数の項目を含む変数のデータ型は、単一の項目を含む変数のデー
タ型とは異なる方法で処理されます。配列変数にデータ型を明示的に割り当てない限り、データ型は常
に System.Object [] になります。このデータ型は配列に固有のものです。
場合によっては、別の型を指定して既定の型を変更できます。たとえば、変数を string[] 配列型に
キャストするには、次のコマンドを入力します。
[string []] $a = "one", "two", "three"
Windows PowerShell の変数には、任意の .NET Framework データ型を使用できます。さら
に、現在のプロセスで利用可能な任意の完全修飾 .NET Framework データ型を代入することができ
ます。たとえば、System.Datetime データ型を指定するには、次のコマンドを入力します。
[system.datetime]$a = "5/31/2005"
この変数には、System.DateTime データ型に準拠した値が代入されます。変数 $a の値は次のと
おりです。
2005 年 5 月 31 日 0:00:00
複数の変数の代入
Windows PowerShell では、単一のコマンドを使用して複数の変数に値を代入できます。代入値の最初
の要素は最初の変数に代入され、2 番目の要素は 2 番目の変数に代入されます。同様に、3 番目の要
素は 3 番目の変数に代入され、それ以降も同様の処理が行われます。たとえば、次のコマンドでは、
変数 $a に値 1 が、変数 $b に値 2 が、変数 $c に値 3 が代入されます。
C:\PS> $a, $b, $c = 1, 2, 3
代入値に含まれている要素の数が変数の数よりも多い場合、残りのすべての値は最後の変数に代入さ
れます。たとえば、次のコマンドには 3 つの変数と 5 つの値が含まれています。
$a, $b, $c = 1, 2, 3, 4, 5
したがって、変数 $a に値 1、変数 $b に値 2 が代入され、変数 $c に値 3、4、および 5 が代
入されます。変数 $c の値を別の 3 つの変数に代入するには、次の形式を使用します。
$d, $e, $f = $c
このコマンドにより、変数 $d に値 3 が、変数 $e に値 4 が、変数 $f に値 5 が代入されます。
複数の変数を連結して、単一の値を複数の変数に代入することもできます。たとえば、次のコマンド
は値 "three" を 4 つのすべての変数に代入します。
$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