about_Variables

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

トピック

about_Variables

概要

変数に Windows PowerShell® で使用できる値を格納する方法について説明します。

詳細説明

Windows PowerShell の変数にはすべての種類の値を格納できます。これらは通常、コマンドの結果を格納したり、名前、パス、設定、値など、コマンドや式で使用される要素を格納したりするために使用されます。

変数は、値が格納されているメモリの単位です。Windows PowerShell では、変数は、$a、$process、$my_var などのドル記号 ($) で始まるテキスト文字列で表されます。

変数名では大文字と小文字が区別されません。変数名には、スペースおよび特殊文字を含めることができます。ただし、これらを使用するのは困難なため、使用しないことをお勧めします。

Windows PowerShell には数種類の変数があります。

ユーザー作成変数:

ユーザー作成変数はユーザーによって作成、保持されます。既定では、Windows PowerShell コマンド ラインで作成した変数は、Windows PowerShell ウィンドウが開いている間しか存在しません。ウィンドウを閉じると失われます。変数を保存するには、Windows PowerShell プロファイルに追加します。また、スクリプトの変数は、グローバル スコープ、スクリプト スコープ、またはローカル スコープで作成できます。

自動変数:

自動変数には Windows PowerShell の状態が格納されます。これらの変数は Windows PowerShell によって作成されます。Windows PowerShell は正確さを維持するために、必要に応じて値を変更します。ユーザーはこれらの変数の値を変更できません。たとえば、$PSHome 変数は Windows PowerShell インストール ディレクトリへのパスを格納します。

自動変数の詳細、一覧、説明については、「about_Automatic_Variables」を参照してください。

ユーザー設定変数:

ユーザー設定変数には Windows PowerShell のユーザー設定が格納されます。これらの変数は Windows PowerShell によって作成され、既定値が設定されます。ユーザーはこれらの変数の値を変更できます。たとえば、$MaximumHistoryCount 変数は、セッション履歴内のエントリの最大数を決定します。

ユーザー設定変数の詳細、一覧、説明については、「about_Preference_Variables」を参照してください。

変数の使用

新しい変数を作成するには、代入ステートメントを使用して変数に値を代入します。使用する前に変数を宣言する必要はありません。どの変数の既定値も $null です。

たとえば、次のように入力します。

        PS> $MyVariable = 1, 2, 3
        PS> $path = "C:\Windows\System32"

変数はコマンドの結果を格納するのに非常に便利です。

たとえば、次のように入力します。

          
        PS> $processes = Get-Process         
     
        PS> $Today = (Get-Date).date

変数の値を表示するには、前にドル記号 ($) を付けて変数名を入力します。

たとえば、次のように入力します。

        PS> $MyVariable
        1
        2
        3
        PS> $Today
        Thursday, September 03, 2009 12:00:00 AM

変数の値を変更するには、新しい値を変数に代入します。

次の例では、$MyVariable 変数の値を表示し、変数の値を変更して、新しい値を表示します。

        PS> $MyVariable
        1
        2
        3
        PS> $MyVariable = "The green cat."
        PS> $MyVariable
        The green cat.

変数の値を削除するには、Clear-Variable コマンドレットを使用するか、値を $null に変更します。

        PS> Clear-Variable -name MyVariable  

        -or-

        PS> $MyVariable = $null

変数を削除するには、Remove-Variable コマンドレットまたは Remove-Item コマンドレットを使用します (これらのコマンドレットについては、このトピックの後半で説明します)。

       PS> remove-variable -name MyVariable

       PS> remove-item -path variable:\myvariable

Windows PowerShell セッションのすべての変数の一覧を取得するには、次のように入力します。

       get-variable

変数の型

整数、文字列、配列、ハッシュ テーブルに加え、プロセス、サービス、イベント ログ、コンピューターを表すオブジェクトなど、あらゆる型のオブジェクトを変数に格納できます。

Windows PowerShell 変数の型指定は緩く、変数は特定のオブジェクトの型に制限されません。単一の変数に異なる型のオブジェクトのコレクション ("配列") を同時に含めることもできます。

変数のデータ型は、.NET Framework 型であるため、.NET 型の変数の値で決定されます。

たとえば、次のように入力します。

        PS> $a = 12     (System.Int32)
        
        PS> $a = "Word" (System.String)

        PS> $a = 12, "Word" (System.Int32, System.String)

        PS> $a = dir C:\Windows\System32  (Files and folders)

型属性とキャスト表記を使用して、変数に、指定した型のオブジェクトまたはその型に変換できるオブジェクトしか含まれないようにすることができます。他の型の値を代入すると、Windows PowerShell は値をその型に変換しようとします。値をその型に変換できない場合、代入ステートメントは失敗します。

キャスト表記を使用するには、角かっこで囲んで変数名の前に型名を入力します (代入ステートメントの左側)。次の例では、整数のみを含む $number 変数、文字列のみを含む $words 変数、DateTime オブジェクトのみを含む $dates 変数を作成します。

        PS> [int]$number = 8
        PS> $a = "12345" (The string is converted to an integer.)
        PS> $a = "Hello"
        Cannot convert value "Hello" to type "System.Int32". Error: "Input string was not in a correct format."
        At line:1 char:3
        + $a <<<<  = "Hello"
            + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
            + FullyQualifiedErrorId : RuntimeException
        PS> [string]$words = "Hello"

        PS> $words = 2   (The integer is converted to a string.)

        PS> $words + 10  (The strings are concatenated.)
        210              
        PS> [datetime] $dates = "09/12/91" (The string is converted to a DateTime object.)

        PS> $dates
        Thursday, September 12, 1991 12:00:00 AM

        PS> $dates = 10  (The integer is converted to a DateTime object.)
        PS> $dates
        Monday, January 01, 0001 12:00:00 AM
                

コマンドと式での変数の使用

コマンドまたは式で変数を使用するには、変数名の前にドル記号 ($) を付けて入力します。

変数名 (とドル記号) が引用符で囲まれていない場合、または二重引用符 (") で囲まれている場合、変数の値はコマンドまたは式で使用されます。

変数名 (とドル記号) が単一引用符 (') で囲まれている場合、変数名は式で使用されます。

たとえば、最初のコマンドは $profile 変数の値を取得します。その変数の値は Windows PowerShell コンソールの Windows PowerShell ユーザー プロファイル・ファイルへのパスです。2 番目のコマンドはメモ帳のファイルを開きます。3 番目と 4 番目のコマンドは変数名を式で使用します。

        PS> $profile
        C:\Documents and Settings\User01\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
        PS> notepad $profile 
        - or -
        PS> notepad "$profile"
        C:\Documents and Settings\User01\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
        PS> '$profile'
        $profile
        PS> 'Use the $profile variable.'
        Use the $profile variable.

Windows PowerShell での引用符の使用に関する詳細については、「about_Quoting_Rules」を参照してください。

特殊文字を含む変数名

変数名はドル記号で始まります。変数名には英数字と特殊文字を含めることができます。変数名の長さは利用可能なメモリによってのみ制限されます。

可能な限り、変数名には英数字とアンダースコア文字 (_) のみを使用してください。スペースやその他の特殊文字を含む変数名は使用するのが難しいため、変数名にこれらを使用するのを避けてください。

スペースや特殊文字を含む変数名を作成または表示するには、変数名を中かっこで囲みます。これにより、Windows PowerShell は変数名の文字を文字どおりに解釈します。

たとえば、次のコマンドは "save-items" という名前の変数を作成して表示します。

          C:\PS> ${save-items} = "a", "b", "c"
          C:\PS> ${save-items}
          a
          b
          c

次のコマンドは、"ProgramFiles(x86)" 環境変数によって表されるディレクトリ内の子項目を取得します。

          C:\PS> Get-childitem ${env:ProgramFiles(x86)}

かっこを含む変数名を参照するには、変数名をかっこで囲み、バックティック (エスケープ) 文字を使用してかっこをエスケープします。たとえば、値が 1 である "this{value}is" という名前の変数を作成するには、次のように入力します。

          C:\PS> ${this`{value`}is} = 1
          C:\PS> ${this`{value`}is}
          1

変数とスコープ

既定では、変数はそれ自体が作成されたスコープでのみ使用できます。

たとえば、関数で作成する変数は関数内でのみ使用できます。スクリプトで作成した変数はスクリプト内でのみ使用できます (スクリプトをドット ソース形式で読み込んで、現在のスコープに追加する場合は除きます)。

スコープ修飾子を使用して変数の既定のスコープを変更できます。次の式では "Computers" という名前の変数を作成します。この変数は、スクリプトや関数で作成される場合もグローバル スコープを持ちます。

            $global:computers = "Server01"

詳細については、「about_Scopes」を参照してください。

変数の保存

作成した変数は、その変数を作成したセッションでのみ使用できます。セッションを閉じるとこれらは失われます。

開始するすべての Windows PowerShell セッションで変数を作成するには、自分の Windows PowerShell プロファイルに変数を追加します。

たとえば、すべての Windows PowerShell セッションの $VerbosePreference 変数の値を変更するには、次のコマンドを自分の Windows PowerShell プロファイルに追加します。

  $VerbosePreference = "Continue"

メモ帳などのテキスト エディターでプロファイル ファイルを開いて、このコマンドをプロファイルに追加できます。Windows PowerShell プロファイルの詳細については、「about_profiles」を参照してください。

Variable: ドライブ

Windows PowerShell Variable プロバイダーは、ファイル システム ドライブのように動作する Variable: ドライブを作成します。ただし、ドライブにはセッションでの変数とその値が含まれます。

Variable: ドライブに変更するには、次のように入力します。

        set-location variable:
        
         (or "cd variable:")

Variable: ドライブの項目 (変数) を一覧表示するには、Get-Item コマンドレットまたは Get-ChildItem コマンドレットを使用します。たとえば、次のように入力します。

         get-childitem variable:
         (or "dir" or "ls")

特定の変数の値を取得するには、ファイル システム表記を使用してドライブの名前と変数名を指定します。たとえば、$PSCulture 自動変数を取得するには、次のコマンドを使用します。

         get-item variable:\PSCulture      

         Name                           Value
         ----                           -----
         PSCulture                      en-US        

Variable: ドライブと Windows PowerShell Variable プロバイダーの詳細を確認するには、「get-help variable」と入力します。

変数コマンドレット

Windows PowerShell には、変数を管理するための一連のコマンドレットがあります。

         Cmdlet Name           Description
         -----------           -----------

         Clear-Variable        Deletes the value of a variable.
         Get-Variable          Gets the variables in the current console.
         New-Variable          Creates a new variable.
         Remove-Variable       Deletes a variable and its value.
         Set-Variable          Changes the value of a variable.

これらのコマンドレットのヘルプを取得するには、「Get-help <コマンドレット名>」と入力します。

関連項目

about_Automatic_Variables

about_Environment_Variables

about_Preference_Variables

about_Profiles

about_Quoting_Rules

about_Scopes