PowerShell HelpFile - about_Assignment_Operators
 記事記号:[me1515] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    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 メソッドとその Ful
    lName プロパティを使用します。メソッドの呼び出しは引数を受け取りませんが、Ge
    tType メソッド名の後に必ずかっこを使用してください。

        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 [] になります。このデータ型
    は配列に固有のものです。

    場合によっては、別の型を指定して既定の型を変更できます。たとえば、変数を str
    ing[] 配列型にキャストするには、次のコマンドを入力します。

        [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 では、単一のコマンドを使用して複数の変数に値を代入できま
    す。代入値の最初の要素は最初の変数に代入され、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
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_Assignment_Operators
ご利用数: 1915790
感想・要望・問い合わせは こちら