自動変数について
簡単な説明
PowerShell の状態情報を格納する変数について説明します。 これらの変数は、PowerShell によって作成および管理されます。
長い説明
概念的には、これらの変数は読み取り専用と見なされます。 書き込 み可能 であっても、下位互換性のために書き込 むべきではありません 。
PowerShell の自動変数の一覧を次に示します。
$$
セッションによって受信された最後の行の最後のトークンが含まれます。
$?
最後の操作の実行状態を格納します。 最後の操作が成功した場合は True 、失敗した場合 は False が含まれます。
$^
セッションによって受信された最後の行の最初のトークンが含まれます。
$_
$PSItem
と同じ。 パイプライン オブジェクト内の現在の オブジェクトを格納します。 この変数は、パイプライン内のすべてのオブジェクトまたは選択したオブジェクトに対してアクションを実行するコマンドで使用できます。
$args
関数、スクリプト、またはスクリプト ブロックに渡される宣言されていないパラメーターの値の配列を格納します。 関数を作成するときは、キーワード (keyword)を使用param
するか、関数名の後にかっこで囲まれたパラメーターのコンマ区切りのリストを追加して、パラメーターを宣言できます。
イベント アクションでは、 $Args
変数には、処理中のイベントのイベント引数を表す オブジェクトが含まれます。 この変数は、イベント登録コマンドの Action
ブロック内でのみ設定されます。
この変数の値は、 を返す PSEventArgs オブジェクトの SourceArgs プロパティにも含Get-Event
まれています。
$ConsoleFileName
セッションで最後に使用されたコンソール ファイル (.psc1
) のパスを格納します。 この変数は、 PSConsoleFile パラメーターを使用して PowerShell を起動するとき、または コマンドレットを Export-Console
使用してスナップイン名をコンソール ファイルにエクスポートするときに設定されます。
パラメーターを指定せずに コマンドレットを Export-Console
使用すると、セッションで最後に使用されたコンソール ファイルが自動的に更新されます。 この自動変数を使用して、更新するファイルを決定できます。
$Error
最新のエラーを表すエラー オブジェクトの配列を格納します。
最新のエラーは、配列 $Error[0]
内の最初のエラー オブジェクトです。
配列にエラーが追加 $Error
されないようにするには、 ErrorAction 共通パラメーターを使用し、値が Ignore です。 詳細については、「about_CommonParameters」を参照してください。
$Event
処理されているイベントを表す PSEventArgs オブジェクトを格納します。 この変数は、 などのRegister-ObjectEvent
イベント登録コマンドのブロック内Action
でのみ設定されます。 この変数の値は、コマンドレットが返すのと Get-Event
同じオブジェクトです。 したがって、スクリプト ブロックでは、 などの$Event.TimeGenerated
変数のEvent
プロパティをAction
使用できます。
$EventArgs
処理されているイベントの EventArgs から派生する最初のイベント引数を表す オブジェクトを格納します。 この変数は、イベント登録コマンドの Action
ブロック内でのみ設定されます。
この変数の値は、 を返す PSEventArgs オブジェクトGet-Event
の SourceEventArgs プロパティでも確認できます。
$EventSubscriber
処理されているイベントのイベント サブスクライバーを表す PSEventSubscriber オブジェクトを格納します。 この変数は、イベント登録コマンドの Action
ブロック内でのみ設定されます。 この変数の値は、コマンドレットが返すのと Get-EventSubscriber
同じオブジェクトです。
$ExecutionContext
PowerShell ホストの実行コンテキストを表す EngineIntrinsics オブジェクトを格納します。 この変数を使用して、コマンドレットで使用できる実行オブジェクトを見つけることができます。
$false
False を含みます。 この変数を使用すると、文字列 " false" を 使用する代わりに、コマンドとスクリプトで False を表すことができます。 文字列が空でない文字列または 0 以外の整数に変換される場合、文字列は True として解釈できます。
$foreach
ForEach ループの列挙子 (結果の値ではない) を格納します。 変数は $ForEach
、ループの ForEach
実行中にのみ存在し、ループの完了後に削除されます。
列挙子には、ループ値を取得し、現在のループイテレーションを変更するために使用できるプロパティとメソッドが含まれています。 詳細については、「 列挙子の使用」を参照してください。
ホーム
ユーザーのホーム ディレクトリの完全なパスが含まれます。 この変数は、Windows 環境変数 ( "$env:homedrive$env:homepath"
通常 C:\Users\<UserName>
は ) に相当します。
$Host
PowerShell の現在のホスト アプリケーションを表す オブジェクトを格納します。 この変数を使用すると、コマンドで現在のホストを表したり、 や などの$Host.version
$Host.CurrentCulture
ホストのプロパティを表示または変更したりできます$host.ui.rawui.setbackgroundcolor("Red")
。
$input
関数に渡されるすべての入力を列挙する列挙子が含まれます。 変数は $input
、関数とスクリプト ブロック (名前のない関数) でのみ使用できます。
、、または
End
ブロックのないBegin
Process
関数では、変数は$input
関数へのすべての入力のコレクションを列挙します。ブロックでは
Begin
、変数に$input
データが含まれています。ブロック内
Process
の$input
変数には、現在パイプライン内にある オブジェクトが含まれています。ブロックでは
End
、変数は$input
関数に対するすべての入力のコレクションを列挙します。注意
同じ関数またはスクリプト ブロック内の Process ブロックと End ブロックの両方で変数を使用
$input
することはできません。
列挙子には、ループ値を取得し、現在のループイテレーションを変更するために使用できるプロパティとメソッドが含まれています。 詳細については、「 列挙子の使用」を参照してください。
$LastExitCode
最後に実行された Windows ベースのプログラムの終了コードが含まれます。
$Matches
変数はMatches
、 演算子と -notmatch
演算子で-match
動作します。
スカラー入力を または -notmatch
演算子に-match
送信し、いずれかの演算子が一致を検出すると、ブール値が返され、一致した文字列値のハッシュ テーブルが自動変数に設定$Matches
されます。 $Matches
演算子で正規表現を使用する場合は、ハッシュ テーブルにキャプチャを設定-match
することもできます。
演算子の -match
詳細については、「 about_Comparison_Operators」を参照してください。 正規表現の詳細については、「 about_Regular_Expressions」を参照してください。
$MyInvocation
現在のコマンドに関する情報 (名前、パラメーター、パラメーター値など) と、コマンドの起動、呼び出し、または呼び出し方法に関する情報 (現在のコマンドを呼び出したスクリプトの名前など) が含まれます。
$MyInvocation
は、スクリプト、関数、およびスクリプト ブロックに対してのみ設定されます。 現在のスクリプトで返される $MyInvocation
System.Management.Automation.InvocationInfo オブジェクトの情報 (スクリプトのパスとファイル名 () や関数 ($MyInvocation.MyCommand.Path
$MyInvocation.MyCommand.Name
) の名前など) を使用して、現在のコマンドを識別できます。 これは、現在のスクリプトの名前を見つける場合に特に便利です。
PowerShell 3.0 以降では、 MyInvocation
次の新しいプロパティがあります。
プロパティ | 説明 |
---|---|
PSScriptRoot | 呼び出したスクリプトへの完全なパスが含まれています |
現在のコマンド。 このプロパティの値は です。 | |
は、呼び出し元がスクリプトの場合にのみ設定されます。 | |
PSCommandPath | スクリプトの完全なパスとファイル名が含まれています |
現在のコマンドを呼び出した。 この の値 | |
プロパティは、呼び出し元が の場合にのみ設定されます。 | |
スクリプトを入手してください。 |
$PSScriptRoot
自動変数と$PSCommandPath
自動変数とは異なり、自動変数の PSScriptRoot プロパティと PSCommandPath プロパティには、現在の$MyInvocation
スクリプトではなく、呼び出し元または呼び出し元のスクリプトに関する情報が含まれます。
$NestedPromptLevel
現在のプロンプト レベルが含まれます。 値 0 は、元のプロンプト レベルを示します。 値は、入れ子になったレベルを入力するとインクリメントされ、終了時にデクリメントされます。
たとえば、 メソッドを使用すると、PowerShell によって入れ子になったコマンド プロンプトが $Host.EnterNestedPrompt
表示されます。 PowerShell デバッガーでブレークポイントに到達すると、PowerShell には入れ子になったコマンド プロンプトも表示されます。
入れ子になったプロンプトを入力すると、PowerShell によって現在のコマンドが一時停止され、実行コンテキストが保存され、変数の値が $NestedPromptLevel
インクリメントされます。 追加の入れ子になったコマンド プロンプト (最大 128 レベル) を作成するか、元のコマンド プロンプトに戻すには、コマンドを完了するか、「」と入力します exit
。
変数は $NestedPromptLevel
、プロンプト レベルを追跡するのに役立ちます。 この値が常に表示されるように、この値を含む別の PowerShell コマンド プロンプトを作成できます。
$null
$null
は、 null または空の値を含む自動変数です。 この変数を使用して、コマンドとスクリプトに存在しない値または未定義の値を表すことができます。
PowerShell は、値を持つオブジェクト 、つまり明示的なプレースホルダーとして扱 $null
います。そのため、 を使用 $null
して、一連の値の空の値を表すことができます。
たとえば、 がコレクションに含まれている場合 $null
、オブジェクトの 1 つとしてカウントされます。
$a = "one", $null, "three"
$a.count
3
コマンドレットに変数を$null
ForEach-Object
パイプすると、他のオブジェクトの場合と同様に、 の値$null
が生成されます。
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
その結果、 を使用 $null
して パラメーター値がないことを意味することはできません。 のパラメーター値 $null
は、既定のパラメーター値をオーバーライドします。
ただし、PowerShell では変数が $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
$PID
現在の PowerShell セッションをホストしているプロセスのプロセス識別子 (PID) が含まれます。
$profile
現在のユーザーと現在のホスト アプリケーションの PowerShell プロファイルの完全なパスが含まれます。 この変数を使用して、コマンドでプロファイルを表すことができます。 たとえば、それをコマンドで使用して、プロファイルが作成されているかどうかを確認できます。
Test-Path $PROFILE
または、それをコマンドで使用してプロファイルを作成することもできます。
New-Item -ItemType file -Path $PROFILE -Force
コマンドでそれを使用して、 でプロファイルを開 notepad.exe。
notepad.exe $PROFILE
$PSBoundParameters
スクリプトまたは関数に渡されるパラメーターとその現在の値のディクショナリが含まれます。 この変数には、スクリプトや関数などのパラメーターが宣言されているスコープ内でのみ値があります。 これを使用して、パラメーターの現在の値を表示または変更したり、パラメーター値を別のスクリプトまたは関数に渡したりすることができます。
この例では、Test2 関数は Test1$PSBoundParameters
関数に を渡します。 は $PSBoundParameters
、 キー と 値の形式で表示されます。
function Test1 {
param($a, $b)
# Display the parameters in dictionary format.
$PSBoundParameters
}
function Test2 {
param($a, $b)
# Run the Test1 function with $a and $b.
Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key Value
--- -----
a Power
b Shell
$PSCmdlet
実行されているコマンドレットまたは高度な関数を表す オブジェクトを格納します。
コマンドレットまたは関数コードで オブジェクトのプロパティとメソッドを使用して、使用条件に応答できます。 たとえば、 ParameterSetName プロパティには使用されているパラメーター セットの名前が含まれており、 ShouldProcess メソッドは WhatIf パラメーターと Confirm パラメーターをコマンドレットに動的に追加します。
自動変数の $PSCmdlet
詳細については、「 about_Functions_CmdletBindingAttribute と about_Functions_Advanced」を参照してください。
$PSCommandPath
実行されているスクリプトの完全なパスとファイル名が含まれます。 この変数は、すべてのスクリプトで有効です。
$PSCulture
オペレーティング システムで現在使用されているカルチャの名前を格納します。
カルチャは、数値、通貨、日付などの項目の表示形式を決定します。 これは、システムの System.Globalization.CultureInfo.CurrentCulture.Name プロパティの値です。 システムの System.Globalization.CultureInfo オブジェクトを取得するには、 コマンドレットをGet-Culture
使用します。
$PSDebugContext
デバッグ中、この変数にはデバッグ環境に関する情報が含まれます。 それ以外の場合は、 null 値が含まれます。 その結果、デバッガーに制御があるかどうかを示すために使用できます。 設定すると、ブレークポイントと InvocationInfo プロパティを持つ PsDebugContext オブジェクトが含まれます。 InvocationInfo プロパティには、Location プロパティなど、いくつかの便利なプロパティがあります。 Location プロパティは、デバッグ中のスクリプトのパスを示します。
$PSHOME
PowerShell のインストール ディレクトリの完全なパス (通常 $env:windir\System32\PowerShell\v1.0
は Windows システム) が含まれます。 この変数は、PowerShell ファイルのパスで使用できます。 たとえば、次のコマンドは、概念的なヘルプ トピック で変数という単語を検索します。
Select-String -Pattern Variable -Path $pshome\*.txt
$PSItem
$_
と同じ。 パイプライン オブジェクト内の現在の オブジェクトを格納します。 この変数は、パイプライン内のすべてのオブジェクトまたは選択したオブジェクトに対してアクションを実行するコマンドで使用できます。
$PSScriptRoot
スクリプトの実行元ディレクトリが含まれます。
PowerShell 2.0 では、この変数はスクリプト モジュール (.psm1
) でのみ有効です。
PowerShell 3.0 以降では、すべてのスクリプトで有効です。
$PSSenderInfo
ユーザー ID や発信元コンピューターのタイム ゾーンなど、PSSession を開始したユーザーに関する情報が含まれます。 この変数は PSSessions でのみ使用できます。
変数には $PSSenderInfo
、ユーザーが構成可能なプロパティ ApplicationArguments が含まれています。既定では、元のセッションからの のみが $PSVersionTable
含まれます。 ApplicationArguments プロパティにデータを追加するには、 コマンドレットの ApplicationArguments パラメーターをNew-PSSessionOption
使用します。
$PSUICulture
オペレーティング システムで現在使用されているユーザー インターフェイス (UI) カルチャの名前を格納します。 UI カルチャは、どのテキスト文字列がメニューやメッセージなどのユーザー インターフェイス要素に使用されるかを決定します。 これは、システムの System.Globalization.CultureInfo.CurrentUICulture.Name プロパティの値です。 システムの System.Globalization.CultureInfo オブジェクトを取得するには、 コマンドレットをGet-UICulture
使用します。
$PSVersionTable
現在のセッションで実行されている PowerShell のバージョンに関する詳細を表示する読み取り専用ハッシュ テーブルが含まれています。 この表には、次の項目が含まれています。
プロパティ | 説明 |
---|---|
BuildVersion | 現在のバージョンのビルド番号 |
CLRVersion | 共通言語ランタイムのバージョン |
(CLR) | |
PSCompatibleVersions | 互換性のある PowerShell のバージョン |
現在のバージョン | |
PSRemotingProtocolVersion | PowerShell リモートのバージョン |
管理プロトコル。 | |
PSVersion | PowerShell のバージョン番号 |
SerializationVersion | シリアル化メソッドのバージョン |
WSManStackVersion | WS-Management スタックのバージョン番号 |
$PWD
現在のディレクトリの完全なパスを表す path オブジェクトを格納します。
$Sender
このイベントを生成したオブジェクトを格納します。 この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。 この変数の値は、 を返す PSEventArgs オブジェクトの Sender プロパティでも確認 Get-Event
できます。
$ShellId
現在のシェルの識別子を格納します。
$StackTrace
最新のエラーのスタック トレースが含まれています。
$switch
ステートメントの結果の値ではなく列挙子を Switch
格納します。 変数は $switch
、ステートメントの Switch
実行中にのみ存在し、ステートメントの実行が完了すると switch
削除されます。 詳細については、「 about_Switch」を参照してください。
列挙子には、ループ値を取得し、現在のループイテレーションを変更するために使用できるプロパティとメソッドが含まれています。 詳細については、「 列挙子の使用」を参照してください。
$this
スクリプト プロパティまたはスクリプト メソッドを定義するスクリプト ブロックでは、 $this
変数は拡張されているオブジェクトを参照します。
$true
True を含みます。 この変数を使用すると、コマンドとスクリプトで True を 表すことができます。
列挙子の使用
、$input
$foreach
、および $switch
の各変数は、含まれているコード ブロックによって処理される値を反復処理するために使用されるすべての列挙子です。
列挙子には、反復を進めたりリセットしたり、反復値を取得したりするために使用できるプロパティとメソッドが含まれています。 列挙子を直接操作することは、ベスト プラクティスとは見なされません。
パイプライン入力を受け入れる関数内では、ValueFromPipeline 属性または ValueFromPipelineByPropertyName 属性で Parameters を使用することをお勧めします。
詳細については、「 about_Functions_Advanced_Parameters」を参照してください。
MoveNext
MoveNext メソッドは、列挙子をコレクションの次の要素に進めます。 MoveNext は、列挙子が正常に詳細設定された場合は True 、列挙子がコレクションの末尾を通過した場合は False を返します。
注意
MoveNext から返されたブール値は、出力ストリームに送信されます。
出力を非表示にするには、出力を [void]
に型キャストするか 、Out-Null にパイプします。
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Reset メソッドは、列挙子を最初の位置 (コレクション内の最初の要素の前) に設定します。
Current
Current プロパティは、列挙子の現在位置にあるコレクションまたはパイプライン内の要素を取得します。
MoveNext が呼び出されるまで、Current プロパティは引き続き同じプロパティを返します。
例
例 1: $input変数の使用
次の例では、 変数に $input
アクセスすると、次にプロセス ブロックが実行されるまで変数がクリアされます。 Reset メソッドを使用すると、変数が$input
現在のパイプライン値にリセットされます。
function Test
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tInput: $input"
"`tAccess Again: $input"
$input.Reset()
"`tAfter Reset: $input"
}
}
"one","two" | Test
Iteration: 0
Input: one
Access Again:
After Reset: one
Iteration: 1
Input: two
Access Again:
After Reset: two
プロセス ブロックは、アクセスしない場合でも変数を $input
自動的に進めます。
$skip = $true
function Skip
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
if ($skip)
{
"`tSkipping"
$skip = $false
}
else
{
"`tInput: $input"
}
}
}
"one","two" | Skip
Iteration: 0
Skipping
Iteration: 1
Input: two
例 2: プロセス ブロックの外部で$inputを使用する
プロセス ブロックの外側では、変数は $input
関数にパイプされたすべての値を表します。
- 変数にアクセスすると、
$input
すべての値がクリアされます。 - Reset メソッドは、コレクション全体をリセットします。
- Current プロパティは設定されません。
- MoveNext メソッドは false を返します。これは、コレクションを高度にできないためです。
- MoveNext を呼び出すと、変数がクリアされます
$input
。
- MoveNext を呼び出すと、変数がクリアされます
Function All
{
"All Values: $input"
"Access Again: $input"
$input.Reset()
"After Reset: $input"
$input.MoveNext() | Out-Null
"After MoveNext: $input"
}
"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:
例 3: $inputの使用。Current プロパティ
Current プロパティを使用すると、Reset メソッドを使用せずに、現在のパイプライン値に複数回アクセスできます。 プロセス ブロックは、 MoveNext メソッドを自動的に呼び出しません。
MoveNext を明示的に呼び出さない限り、Current プロパティは設定されません。 Current プロパティは、その値をクリアせずに、プロセス ブロック内で複数回アクセスできます。
function Current
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tBefore MoveNext: $($input.Current)"
$input.MoveNext() | Out-Null
"`tAfter MoveNext: $($input.Current)"
"`tAccess Again: $($input.Current)"
}
}
"one","two" | Current
Iteration: 0
Before MoveNext:
After MoveNext: one
Access Again: one
Iteration: 1
Before MoveNext:
After MoveNext: two
Access Again: two
例 4: $foreach変数の使用
$input
変数とは異なり、変数は$foreach
、直接アクセスすると、コレクション内のすべての項目を常に表します。 現在のコレクション要素にアクセスするには Current プロパティを使用し、値を変更するには Reset メソッドと MoveNext メソッドを使用します。
注意
ループの各反復では foreach
、 MoveNext メソッドが自動的に呼び出されます。
次のループは 2 回だけ実行されます。 2 番目のイテレーションでは、イテレーションが完了する前にコレクションが 3 番目の要素に移動されます。 2 回目のイテレーションの後、反復処理する値がもうなくなり、ループが終了します。
MoveNext プロパティは、コレクションを反復処理するために選択された変数には影響しません ($Num
)。
$i = 0
foreach ($num in ("one","two","three"))
{
"Iteration: $i"
$i++
"`tNum: $num"
"`tCurrent: $($foreach.Current)"
if ($foreach.Current -eq "two")
{
"Before MoveNext (Current): $($foreach.Current)"
$foreach.MoveNext() | Out-Null
"After MoveNext (Current): $($foreach.Current)"
"Num has not changed: $num"
}
}
Iteration: 0
Num: one
Current: one
Iteration: 1
Num: two
Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num has not changed: two
Reset メソッドを使用すると、コレクション内の現在の要素がリセットされます。 次の例では、Reset メソッドが呼び出されるため、最初の 2 つの要素を 2 回ループ処理します。 最初の 2 つのループの後、ステートメントは if
失敗し、ループは通常 3 つの要素すべてを反復処理します。
重要
これにより、無限ループが発生する可能性があります。
$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
("`t" * $stopLoop) + "Current: $($foreach.Current)"
if ($num -eq "two" -and $stopLoop -lt 2)
{
$foreach.Reset() | Out-Null
("`t" * $stopLoop) + "Reset Loop: $stopLoop"
$stopLoop++
}
}
Current: one
Current: two
Reset Loop: 0
Current: one
Current: two
Reset Loop: 1
Current: one
Current: two
Current: three
例 5: $switch変数の使用
変数には $switch
、変数とまったく同じ規則があります $foreach
。
次の例では、すべての列挙子の概念を示します。
注意
MoveNext メソッドの後にステートメントがない場合でも、NotEvaluated ケースが実行されないことbreak
に注意してください。
$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
"MoveNext" {
"`tMoveNext"
$switch.MoveNext() | Out-Null
"`tAfter MoveNext: $($switch.Current)"
}
# This case is never evaluated.
"NotEvaluated" {
"`tAfterMoveNext: $($switch.Current)"
}
"Reset" {
if (!$stopInfinite)
{
"`tReset"
$switch.Reset()
$stopInfinite = $true
}
}
default {
"Default (Current): $($switch.Current)"
}
}
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Reset
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Default (Current): End
こちらもご覧ください
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_OutputTypeAttribute