about_Assignment_Operators

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

概要をここに挿入してください。

トピック

about_assignment_operators

概要

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

詳細説明

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

Windows PowerShell® では、次の代入演算子をサポートしています。

    Operator  Description  
    -------   -----------
    =         Sets the value of a variable to the specified value.

    +=        Increases the value of a variable by the specified value, or 
              appends the specified value to the existing value.

    -=        Decreases the value of a variable by the specified value.
 
    *=        Multiplies the value of a variable by the specified value, or
              appends the specified value to the existing value.
 
    /=        Divides the value of a variable by the specified value.
 
    %=        Divides the value of a variable by the specified value and 
              then assigns the remainder (modulus) to the variable.

    ++        Increases the value of a variable, assignable property, or 
              array element by 1.

    --        Decreases the value of a variable, assignable property, or 
              array element by 1.

構文

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

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

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

インクリメント演算子とデクリメント演算子は単項演算子です。それぞれの演算子には、前置バージョンと後置バージョンがあります。

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

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

値の代入

変数とは、値を格納する名前付きのメモリ領域です。変数に値を格納するには、代入演算子 (=) を使用します。変数の既存の値を新しい値で置き換えることも、既存の値に新しい値を追加することもできます。

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

        $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 に代入します。

代入演算子 (=)

代入演算子 (=) は値を変数に代入します。変数が既に値を持つ場合、代入演算子 (=) は警告なしで値を置き換えます。

次のステートメントは、整数値 6 を $a 変数に代入します。

        $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 変数に代入します。たとえば、値 0x10 を $a 変数に代入するには、次のように入力します。

        $a = 0x10 

指数値を変数に代入するには、根の値、文字 "e"、および 10 の倍数を表す数値を入力します。たとえば、値 3.1415 の 1,000 倍を $a 変数に代入するには、次のように入力します。

        $a = 3.1415e3 

Windows PowerShell では、キロバイト (KB)、メガバイト (MB)、ギガバイト (GB) 単位の値をバイト単位の値に変換することもできます。たとえば、10 KB の値を $a 変数に代入するには、次のように入力します。

        $a = 10kb

加算代入演算子 (+=)

加算代入演算子 (+=) は、変数の値を増加させるか、指定された値を既存の値に追加します。その動作は、変数が数値型と文字列型のどちらであるか、および変数に含まれる値が 1 つ (スカラー) か複数 (コレクション) かによって異なります。

+= 演算子では、2 つの演算を組み合わせて実行します。つまり、最初に加算を実行し、次にその結果を代入します。そのため、次のステートメントは等価です。

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

変数に 1 つの数値が格納されている場合は、+= 演算子によって、演算子の右側にある数だけ既存の値が増加します。次に、結果の値が変数に代入されます。次の例は、+= 演算子を使用して変数の値を大きくする方法を示します。

        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
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<<  1

減算代入演算子 (-=)

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

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

乗算代入演算子 (*=)

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

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

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

この場合、*= 演算子では、2 つの演算を組み合わせて実行します。つまり、最初に乗算を実行し、次にその結果を代入します。そのため、次のステートメントは等価です。

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

変数に文字列値が含まれる場合は、次に示すように、Windows PowerShell によって、その文字列が指定された数だけ値に追加されます。

        C:\PS> $a = "file"
        C:\PS> $a *= 4 
        C:\PS> $a
        filefilefilefile

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

        $a[0] *= 2

除算代入演算子 (/=)

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

/= 演算子では、2 つの演算を組み合わせて実行します。つまり、最初に除算を実行し、次にその結果を代入します。そのため、次の 2 つのステートメントは等価です。

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

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

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

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

        $a[1] /= 2

剰余代入演算子 (%=)

剰余代入演算子 (%=) は、演算子の右側で指定された値で変数の値が除算した後、その余り (剰余) を変数に代入します。この演算子は、変数に 1 つの数値が含まれている場合にのみ使用できます。変数に文字列変数または配列が含まれている場合は、この演算子を使用できません。

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

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

        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

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

        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

変数に最初に代入された値が文字列の場合、Windows PowerShell では、すべての操作が文字列操作として処理され、新しい値が文字列にキャストされます。次に例を示します。

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

最初の値が整数の場合、Windows PowerShell では、すべての操作が整数操作として処理され、新しい値が整数にキャストされます。次に例を示します。

        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
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

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

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $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"

        C:\PS> [string]$a = "string"

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

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

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

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

        [system.datetime]$a = "5/31/2005"

変数には、System.DateTime データ型に準拠する値が代入されます。$a 変数の値は、次のようになります。

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

複数の変数の代入

Windows PowerShell では、1 つのコマンドを使用して複数の変数に値を代入できます。代入値の 1 番目の要素は 1 番目の変数、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

その結果、Windows PowerShell によって、値 1 が $a 変数、値 2 が $b 変数に代入されます。値 3、4、5 が $c 変数に代入されます。$c 変数の値を他の 3 つの変数に代入するには、次の形式を使用します。

        $d, $e, $f = $c

このコマンドにより、値 3 が $d 変数、値 4 が $e 変数、値 5 が $f 変数に代入されます。

さらに、変数を連結することで、1 つの値を複数の変数に代入することもできます。たとえば、次のコマンドは、値 "three" を 4 つの変数すべてに代入します。

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

変数に関連するコマンドレット

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

        Set-Variable -name a -value 1, 2, 3 

関連項目

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable