about_Automatic_Variables

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

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

トピック

about_Automatic_Variables

概要

Windows PowerShell の状態情報を格納する変数について説明します。これらの変数は、Windows PowerShell によって作成され、保持されます。

詳細説明

Windows PowerShell の自動変数の一覧を次に示します。

$$

セッションが受け取った最後の行にある最後のトークンが格納されます。

$?

最後の操作の実行状態が格納されます。最後の操作が成功した場合は TRUE、失敗した場合は FALSE が格納されます。

$^

セッションが受け取った最後の行にある最初のトークンが格納されます。

$_

$PSItem と同じです。パイプライン オブジェクト内の現在のオブジェクトが格納されます。この変数は、パイプライン内のすべてのオブジェクトまたは選択したオブジェクトに対してアクションを実行するコマンドで使用できます。

$ARGS

宣言されていないパラメーターと、関数、スクリプト、スクリプト ブロックに渡されるパラメーター値の両方またはいずれかの配列が格納されます。関数の作成時に、param キーワードを使用するか、関数名の後にパラメーターのコンマ区切りリストをかっこで囲んで追加することで、パラメーターを宣言できます。

イベント アクションでは、$Args 変数に、処理中のイベントのイベント引数を表すオブジェクトが格納されます。この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。この変数の値は、Get-Event によって返される PSEventArgs オブジェクト (System.Management.Automation.PSEventArgs) の SourceArgs プロパティ内にもあります。

$CONSOLEFILENAME

セッションで直前に使用されたコンソール ファイル (.psc1) のパスが格納されます。この変数は、PSConsoleFile パラメーターを使用して Windows PowerShell を起動した場合、または Export-Console コマンドレットを使用してスナップイン名をコンソール ファイルにエクスポートした場合に値が設定されます。

パラメーターを指定せずに Export-Console コマンドレットを使用した場合は、セッションで直前に使用されたコンソール ファイルが自動的に更新されます。この自動変数を使用すると、どのファイルが更新されるかを決定できます。

$ERROR

最新のエラーを表すエラー オブジェクトの配列が格納されます。最新のエラーとは、($Error[0]) 配列の最初のエラー オブジェクトです。

エラーが $Error 配列に追加されないようにするには、値に Ignore を指定した ErrorAction 共通パラメーターを使用します。詳細については、「about_CommonParameters」(https://go.microsoft.com/fwlink/?LinkID=113216) を参照してください。

$EVENT

処理中のイベントを表す PSEventArgs オブジェクトが格納されます。この変数は、Register-ObjectEvent などのイベント登録コマンドの Action ブロック内でのみ設定されます。この変数の値は、Get-Event コマンドレットによって返されるオブジェクトと同じものです。そのため、Action スクリプト ブロック内で、$Event.TimeGenerated などの $Event 変数のプロパティを使用できます。

$EVENTARGS

処理中のイベントの EventArgs から派生した最初のイベント引数を表すオブジェクトが格納されます。この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。この変数の値は、Get-Event によって返される PSEventArgs (System.Management.Automation.PSEventArgs) オブジェクトの SourceEventArgs プロパティ内にもあります。

$EVENTSUBSCRIBER

処理中のイベントのイベント サブスクライバーを表す PSEventSubscriber オブジェクトが格納されます。この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。この変数の値は、Get-EventSubscriber コマンドレットによって返されるオブジェクトと同じものです。

$EXECUTIONCONTEXT

Windows PowerShell ホストの実行コンテキストを表す EngineIntrinsics オブジェクトが格納されます。この変数を使用すると、コマンドレットで使用できる実行オブジェクトを検索できます。

$FALSE

FALSE が格納されます。この変数を使用すると、コマンドやスクリプト内で "false" の文字列を使用せずに FALSE を表すことができます。この文字列は、空でない文字列または 0 以外の整数に変換された場合に TRUE として解釈される可能性があります。

$FOREACH

ForEach ループの列挙子 (結果の値ではない) が格納されます。$ForEach 変数の値に対して、列挙子のプロパティとメソッドを使用できます。この変数は、ForEach ループの実行中にのみ存在し、ループの完了後に削除されます。詳細については、「about_ForEach」を参照してください。

$HOME

ユーザーのホーム ディレクトリの完全パスが格納されます。この変数は、%homedrive%%homepath% 環境変数に相当し、通常は C:\Users\<ユーザー名> です。

$HOST

Windows PowerShell の現在のホスト アプリケーションを表すオブジェクトが格納されます。この変数を使用すると、コマンド内で現在のホストを表すか、$Host.version、$Host.CurrentCulture、$host.ui.rawui.setbackgroundcolor("Red") など、ホストのプロパティを表示または変更することができます。

$INPUT

関数に渡されたすべての入力を列挙する列挙子が格納されます。$input 変数は、関数とスクリプト ブロック (名前のない関数) でのみ使用できます。関数の Process ブロックでは、$input 変数は現在パイプライン内にあるオブジェクトを列挙します。Process ブロックの完了後はパイプライン内にオブジェクトが残っていないため、$input 変数は空のコレクションを列挙します。関数に Process ブロックがない場合、$input 変数は End ブロックで関数へのすべての入力のコレクションを列挙します。

$LASTEXITCODE

最後に実行された Windows ベースのプログラムの終了コードが格納されます。

$MATCHES

$Matches 変数は、-match および -notmatch 演算子と共に使用します。-match または -notmatch 演算子にスカラー入力を送信した場合、いずれかの演算子が一致を検出すると、その演算子はブール値を返し、一致した文字列値のハッシュ テーブルを $Matches 自動変数に設定します。-match 演算子の詳細については、「about_comparison_operators」を参照してください。

$MYINVOCATION

名前、パラメーター、パラメーター値などの現在のコマンドに関する情報や、現在のコマンドを呼び出したスクリプトの名前など、コマンドの開始または呼び出し方法に関する情報が格納されます。

$MyInvocation は、スクリプト、関数、およびスクリプト ブロックに対してのみ設定されます。現在のスクリプト内で $MyInvocation によって返される System.Management.Automation.InvocationInfo オブジェクト内の情報を使用できます。たとえば、スクリプトのパスとファイル名 ($MyInvocation.MyCommand.Path) または関数名 ($MyInvocation.MyCommand.Name) を使用すると、現在のコマンドを特定できます。これは、特に現在のスクリプトの名前を検索する場合に便利です。

Windows PowerShell 3.0 以降、$MyInvocation には次の新しいプロパティがあります。

       -- PSScriptRoot: Contains the full path to the script that invoked the
          current command. The value of this property is populated only when
          the caller is a script.  
       -- PSCommandPath: Contains the full path and file name of the script that
          invoked the current command. The value of this property is populated
          only when the caller is a script.  

$PSScriptRoot および $PSCommandPath 自動変数とは異なり、$MyInvocation 自動変数の PSScriptRoot および PSCommandPath プロパティには、現在のスクリプトではなく、呼び出し元または呼び出し中のスクリプトに関する情報が格納されます。

$NESTEDPROMPTLEVEL

現在のプロンプト レベルが格納されます。値 0 は、元のプロンプト レベルを示します。入れ子になったレベルに入ると値が増分され、それを終了すると値が減分されます。

たとえば、$Host.EnterNestedPrompt メソッドを使用すると、Windows PowerShell が入れ子になったコマンド プロンプトを表示します。また、Windows PowerShell は、Windows PowerShell デバッガーでブレークポイントに達した場合にも入れ子になったコマンド プロンプトを表示します。

入れ子になったプロンプトを入力すると、Windows PowerShell は現在のコマンドを一時停止し、実行コンテキストを保存して、$NestedPromptLevel 変数の値を増分します。入れ子になったコマンド プロンプトを (最大 128 レベルまで) 追加で作成するか、元のコマンド プロンプトに戻るには、コマンドを完了するか、「exit」と入力します。

$NestedPromptLevel 変数は、プロンプト レベルの追跡に役立ちます。常に表示されるように、この値を含む別の Windows PowerShell コマンド プロンプトを作成できます。

$NULL

$null は、NULL または空の値が格納される自動変数です。この変数を使用すると、コマンドやスクリプト内で存在しない値または未定義の値を表すことができます。

Windows PowerShell は、値を持つオブジェクト、つまり明示的なプレース ホルダーとして $null を処理するため、一連の値の中で空の値を表すために $null を使用することができます。

たとえば、$null がコレクションに含まれる場合は、オブジェクトの 1 つとしてカウントされます。

           C:\PS> $a = ".dir", $null, ".pdf"
           C:\PS> $a.count
           3

パイプを使用して $null 変数を ForEach-Object コマンドレットに渡した場合は、その他のオブジェクトと同様に $null の値が生成されます。

           PS C:\ps-test> ".dir", "$null, ".pdf" | Foreach {"Hello"}
           Hello
           Hello
           Hello

その結果、$null を使用して "パラメーター値なし" を表すことはできません。パラメーター値を $null にすると、既定のパラメーター値より優先されます。

ただし、Windows PowerShell は $null 変数をプレースホルダーとして処理するため、次のようなスクリプトで $null 変数を使用できます。これは $null が無視された場合に動作しません。

           $calendar = @($null, $null, “Meeting”, $null, $null, “Team Lunch”, $null)
           $days = Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
           $currentDay = 0

           foreach($day in $calendar)
           {
               if($day –ne $null)
               {
                   "Appointment on $($days[$currentDay]): $day"
               }
    
               $currentDay++
           } 

           Appointment on Tuesday: Meeting
           Appointment on Friday: Team lunch

$OFS

$OFS は、出力フィールドの区切り記号として使用される文字列を格納する、特殊な変数です。この変数は、配列を文字列に変換する場合に使用します。$OFS の既定値は " " ですが、「$OFS="<値>"」と入力することで、セッション内の $OFS の値を変更できます。スクリプト、モジュール、または構成の出力で既定値の " " を想定している場合は、コード内の他の場所で $OFS の既定値を変更しないように注意します。

例:

PS> $a="1","2","3","4"
           PS> $a
           1
           2
           3
           4

PS> [string]$a
           1 2 3 4
           PS> $OFS="";[string]$a
           1234

PS> $OFS=",";[string]$a
           1,2,3,4

PS> $OFS="--PowerShellRocks--";[string]$a
           1--PowerShellRocks--2--PowerShellRocks--3--PowerShellRocks--4
           PS> $OFS="`n`n";[string]$a
           1

           2

           3

           4

$PID

現在の Windows PowerShell セッションをホストしているプロセスのプロセス識別子 (PID) が格納されます。

$PROFILE

現在のユーザーおよび現在のホスト アプリケーション用の Windows PowerShell プロファイルの完全パスが格納されます。この変数を使用すると、コマンド内でプロファイルを表すことができます。たとえば、プロファイルが作成されているかどうかを確認するコマンドで、この変数を使用できます。

           test-path $profile

または、プロファイルを作成するコマンドで使用できます。

           new-item -type file -path $pshome -force

メモ帳でプロファイルを開くコマンドで使用することもできます。

           notepad $profile

$PSBOUNDPARAMETERS

スクリプトまたは関数に渡されるパラメーターとその現在の値の辞書が格納されます。この変数は、スクリプトや関数など、パラメーターが宣言されるスコープ内でのみ、値を持ちます。この変数を使用すると、現在のパラメーター値を表示または変更するか、別のスクリプトまたは関数にパラメーター値を渡すことができます。

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

         function Test {
            param($a, $b)
            
            # Display the parameters in dictionary format.
            $PSBoundParameters
             
            # Call the Test1 function with $a and $b.
            test1 @PSBoundParameters
         }

$PSCMDLET

実行中のコマンドレットまたは高度な関数を表すオブジェクトが格納されます。

使用条件に応じて、コマンドレットまたは関数コード内でオブジェクトのプロパティやメソッドを使用できます。たとえば、ParameterSetName プロパティには使用中のパラメーター セットの名前が含まれ、ShouldProcess メソッドは WhatIf および Confirm パラメーターをコマンドレットに対して動的に追加します。

$PSCmdlet 自動変数の詳細については、「about_Functions_Advanced」を参照してください。

$PSCOMMANDPATH

実行中のスクリプトの完全パスとファイル名が格納されます。この変数は、すべてのスクリプトで有効です。

$PSCULTURE

現在オペレーティング システムで使用中のカルチャの名前が格納されます。カルチャは、数値、通貨、日付などの項目の表示形式を決定します。これは、システムの System.Globalization.CultureInfo.CurrentCulture.Name プロパティの値です。システムの System.Globalization.CultureInfo オブジェクトを取得するには、Get-Culture コマンドレットを使用します。

$PSDEBUGCONTEXT

デバッグ中、この変数にはデバッグ環境に関する情報が格納されます。それ以外の場合は、NULL 値が格納されます。そのため、この変数を使用して、デバッガーに制御があるかどうかを示すことができます。この変数が設定される場合は、Breakpoints および InvocationInfo プロパティを持つ PsDebugContext オブジェクトが格納されます。InvocationInfo プロパティには、Location プロパティなど、いくつかの便利なプロパティがあります。Location プロパティは、デバッグ対象のスクリプトのパスを示します。

$PSHOME

Windows PowerShell のインストール ディレクトリの完全パス (通常は %windir%\System32\WindowsPowerShell\v1.0) が格納されます。Windows PowerShell ファイルのパスにこの変数を使用できます。たとえば、次のコマンドでは、概念に関するヘルプ トピックで "variable" という単語を検索します。

            Select-String -Pattern Variable -Path $pshome\*.txt

$PSITEM

$_ と同じです。パイプライン オブジェクト内の現在のオブジェクトが格納されます。この変数は、パイプライン内のすべてのオブジェクトまたは選択したオブジェクトに対してアクションを実行するコマンドで使用できます。

$PSSCRIPTROOT

スクリプトの実行元となるディレクトリが含まれています。

Windows PowerShell 2.0 では、この変数はスクリプト モジュール (.psm1) でのみ有効です。Windows PowerShell 3.0 以降では、すべてのスクリプトで有効です。

$PSSENDERINFO

ユーザー ID や発信元コンピューターのタイム ゾーンなど、PSSession を開始したユーザーに関する情報が格納されます。この変数は、PSSession のみで使用できます。

$PSSenderInfo 変数には、ユーザーが構成できるプロパティであり、既定では元のセッションの $PSVersionTable のみを含む、ApplicationArguments が格納されます。ApplicationArguments プロパティにデータを追加するには、New-PSSessionOption コマンドレットの ApplicationArguments パラメーターを使用します。

$PSUICULTURE

現在オペレーティング システムで使用中のユーザー インターフェイス (UI) のカルチャの名前が格納されます。UI カルチャは、どのテキスト文字列がメニューやメッセージなどのユーザー インターフェイス要素に使用されるかを決定します。これは、システムの System.Globalization.CultureInfo.CurrentUICulture.Name プロパティの値です。システムの System.Globalization.CultureInfo オブジェクトを取得するには、Get-UICulture コマンドレットを使用します。

$PSVERSIONTABLE

現在のセッションで実行中の Windows PowerShell のバージョンの詳細を表示する、読み取り専用のハッシュ テーブルが格納されます。このテーブルには、次の項目が含まれます。

    CLRVersion:            The version of the common language runtime (CLR)

    BuildVersion:          The build number of the current version

        PSVersion:             The Windows PowerShell version number

          WSManStackVersion:     The version number of the WS-Management stack

    PSCompatibleVersions:  Versions of Windows PowerShell that are
                                 compatible with the current version

          SerializationVersion   The version of the serialization method

          PSRemotingProtocolVersion
                                 The version of the Windows PowerShell remote
                                 management protocol

$PWD

現在のディレクトリの完全パスを表すパス オブジェクトが格納されます。

$REPORTERRORSHOWEXCEPTIONCLASS

$REPORTERRORSHOWINNEREXCEPTION
$REPORTERRORSHOWSOURCE
$REPORTERRORSHOWSTACKTRACE

"ReportErrorShow" 変数は Windows PowerShell で定義されていますが、実装されていません。Get-Variable で取得できますが、有効なデータは含まれていません。

$SENDER

このイベントを生成したオブジェクトが格納されます。この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。この変数の値は、Get-Event によって返される PSEventArgs (System.Management.Automation.PSEventArgs) オブジェクトの Sender プロパティ内にもあります。

$SHELLID

現在のシェルの識別子が格納されます。

$STACKTRACE

最新のエラーのスタック トレースが格納されます。

$THIS

スクリプト プロパティまたはスクリプト メソッドを定義するスクリプト ブロック内では、$This 変数は拡張対象のオブジェクトを参照します。

$TRUE

TRUE が格納されます。この変数を使用すると、コマンドやスクリプト内で TRUE を表すことができます。

関連項目

about_Hash_Tables

about_Preference_Variables

about_Variables