about_Automatic_Variables

簡単な説明

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

長い説明

概念的には、これらの変数は読み取り専用と見なされます。 書き 込み 可能な場合でも、下位互換性のために書 込む必要はありません。

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

$$

セッションによって受信された最後の行の最後のトークンを格納します。

$?

最後のコマンドの実行状態を格納します。 最後のコマンド が成功した 場合は True、 失敗した場合は False が含されます。

パイプライン内の複数のステージで実行されるコマンドレットと高度な関数 (たとえば、 ブロックと ブロックの両方) の場合、任意の時点で または を呼び出す場合は、同様に、 または が False に process end 設定されます this.WriteError() $PSCmdlet.WriteError() $? this.ThrowTerminatingError() $PSCmdlet.ThrowTerminatingError()

コマンドレットは、実行直後に常に False に設定しますが、それを呼び出す関数の Write-Error $? $? 場合は False に設定されません。

function Test-WriteError
{
    Write-Error "Bad"
    $? # $false
}

Test-WriteError
$? # $true

後者の目的では、 $PSCmdlet.WriteError() を代わりに使用する必要があります。

ネイティブ コマンド (実行可能ファイル) の場合、 が 0 の場合は True に設定され、 が他の値である場合は $? $LASTEXITCODE False $LASTEXITCODE に設定されます。

注意

かっこ 、部分式構文、または配列式内に ステートメントを含む PowerShell 7 までは、常に True にリセットされ (...) $(...) @(...) $? (Write-Error) $? 、True と表示されます。 これは PowerShell 7 で変更されたので、これらの式で最後に実行されたコマンドの実際の $? 成功が常に反映されます。

$^

セッションによって受信された最後の行の最初のトークンを格納します。

$_

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

$args

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

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

$ConsoleFileName

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

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

$Error

最新のエラーを表すエラーオブジェクトの配列が含まれています。 最新のエラーは、配列内の最初のエラーオブジェクトです $Error[0]

エラーが配列に追加されないようにするには $Errorerroraction 共通パラメーターに値 Ignore を指定します。 詳細については、「about_CommonParameters」を参照してください。

$Event

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

$EventArgs

処理されるイベントの EventArgs から派生した最初のイベント引数を表す オブジェクトを格納します。 この変数は、イベント登録コマンド Action の ブロック内でのみ設定されます。 この変数の値は、返される PSEventArgs オブジェクトの SourceEventArgs プロパティでも Get-Event 確認できます。

$EventSubscriber

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

$ExecutionContext

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

$false

False が 含まれている。 この変数を使用すると、文字列 "false" を使用する代わりに、コマンドとスクリプトで False を表します。 文字列が空でない文字列または 0 以外の整数に変換される場合、文字列は True として解釈できます。

$foreach

ForEachループの列挙子 (結果の値ではありません) を格納します。 変数 $ForEach は、ループの実行中にのみ存在します。ループの完了後 ForEach に削除されます。

列挙子には、ループ値を取得し、現在のループイテレーションを変更するために使用できるプロパティとメソッドが含まれます。 詳細については、「列挙子の 使用」を参照してください

ホーム

ユーザーのホーム ディレクトリの完全なパスを格納します。 この変数は、 "$env:homedrive$env:homepath" 通常、Windows 環境変数に相当し C:\Users\<UserName> ます。

$Host

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

$input

関数に渡されるすべての入力を列挙する列挙子を格納します。 変数は、 $input 関数とスクリプトブロック (名前のない関数) でのみ使用できます。

  • 、、またはブロックのない関数では、 Begin Process End 変数は、 $input 関数へのすべての入力のコレクションを列挙します。

  • ブロックでは、 Begin $input 変数にデータが含まれていません。

  • ブロック内の変数には、 Process $input 現在パイプライン内にあるオブジェクトが含まれています。

  • ブロックでは、 End 変数は、 $input 関数へのすべての入力のコレクションを列挙します。

    注意

    $input同じ関数またはスクリプトブロックの中で、プロセスブロックと End ブロックの両方で変数を使用することはできません。

$inputは列挙子であるため、そのプロパティのいずれかにアクセスすると、が使用できなくなり $input ます。 $input別の変数に格納して、プロパティを再利用することができ $input ます。

列挙子には、ループ値を取得したり、現在のループの反復を変更したりするために使用できるプロパティとメソッドが含まれています。 詳細については、「 列挙子の使用」を参照してください。

変数は、 $input -Command pwsh コマンドラインから呼び出されたときに、のパラメーターで指定したコマンドにも使用できます。 次の例は、Windows コマンドシェルから実行されます。

echo Hello | pwsh -Command """$input World!"""

$IsCoreCLR

$True現在のセッションが .Net Core ランタイム (CoreCLR) で実行されているかどうかを示します。 それ以外の場合は が格納 $False されます。

$IsLinux

現在の $True セッションが Linux オペレーティング システムで実行されている場合に を格納します。 それ以外の場合は が格納 $False されます。

$IsMacOS

現在の $True セッションが MacOS オペレーティング システムで実行されている場合に を格納します。 それ以外の場合は が格納 $False されます。

$IsWindows

現在の $TRUE セッションが Windows オペレーティング システムで実行されている場合に を格納します。 それ以外の場合は が格納 $FALSE されます。

$LastExitCode

最後に実行されたネイティブ プログラムの終了コードを格納します。

$Matches

変数 Matches は、 演算子と 演算子 -match-notmatch 動作します。 スカラー入力を または 演算子に送信し、一致を検出すると、ブール値が返され、一致した文字列値のハッシュ テーブルが自動変数に設定されます -match -notmatch $Matches 。 演算子 $Matches で正規表現を使用する場合は、ハッシュ テーブルにキャプチャを設定 -match することもできます。

演算子の詳細については、「 」 -match を参照about_Comparison_Operators。 正規表現の詳細については、「 」を参照about_Regular_Expressions。

変数 $Matches は、 パラメーターを持つ switch ステートメントでも機能 -Regex します。 演算子と 演算子の場合と同じ方法で -match 設定 -notmatch されます。 ステートメントの詳細については switch 、「 about_Switch」を参照してください。

$MyInvocation

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

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

PowerShell 3.0 以降では、に MyInvocation 次の新しいプロパティが追加されています。

  • Psscriptroot -現在のコマンドを呼び出したスクリプトへの完全なパスが含まれています。 このプロパティの値は、呼び出し元がスクリプトの場合にのみ設定されます。
  • Pscommandpath -現在のコマンドを呼び出したスクリプトの完全なパスとファイル名を格納します。 このプロパティの値は、呼び出し元がスクリプトの場合にのみ設定されます。

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

$NestedPromptLevel

現在のプロンプトレベルを格納します。 値が0の場合は、元のプロンプトレベルを示します。 この値は、入れ子になったレベルを入力するとインクリメントされ、終了時にはデクリメントされます。

たとえば、PowerShell では、メソッドを使用すると、入れ子になったコマンドプロンプトが表示さ $Host.EnterNestedPrompt れます。 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 関数はを $PSBoundParameters Test1 関数に渡します。 は、 $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 プロパティには、使用されているパラメーターセットの名前が含まれます 。このメソッドはWhatIf および Confirm パラメーターをコマンドレットに動的に追加します。

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

$PSCommandPath

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

$PSCulture

PowerShell 7 以降では、は $PSCulture 現在の powershell 実行空間 (セッション) のカルチャを反映しています。 PowerShell 実行空間でカルチャが変更された場合、 $PSCulture その実行空間の値が更新されます。

カルチャによって、数値、通貨、日付などの項目の表示形式が決定され、 システムの CultureInfo オブジェクトに格納されます。 Get-Cultureコンピューターのカルチャを表示するには、を使用します。 $PSCultureName プロパティの値を格納します。

$PSDebugContext

デバッグ中に、この変数にはデバッグ環境に関する情報が含まれます。 それ以外の場合は、 null 値が含まれます。 その結果、デバッガーにコントロールがあるかどうかを示すために使用できます。 設定すると、ブレークポイントと InvocationInfo プロパティを持つ PsDebugContextオブジェクトが含 まれます。 InvocationInfo プロパティには**、Location** プロパティなど、いくつかの便利なプロパティがあります。 Location プロパティ は、デバッグ中のスクリプトのパスを示します。

$PSHOME

PowerShell のインストール ディレクトリの完全なパス (通常は Windows システム) $env:windir\System32\PowerShell\v1.0 が含まれます。 この変数は、PowerShell ファイルのパスで使用できます。 たとえば、次のコマンドは、概念ヘルプ トピックで変数 という単語を検索 します

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

$PSItem

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

$PSScriptRoot

スクリプトの実行に使用するディレクトリが含まれます。

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

$PSSenderInfo

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

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

$PSUICulture

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

$PSVersionTable

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

  • Psversion -PowerShell のバージョン番号
  • PSEdition このプロパティの値は、PowerShell 4 以下の場合は "Desktop"、フル機能の Windows エディションの場合は PowerShell 5.1 になります。 このプロパティの値は、powershell Core 6 以降の場合は、Windows Nano Server や Windows IoT などのフットプリントが少ないエディションの PowerShell powershell 5.1 になります。
  • GitCommitId -ソースファイルのコミット Id (GitHub)
  • OS -PowerShell が実行されているオペレーティングシステムの説明。
  • プラットフォーム -オペレーティングシステムが実行されているプラットフォーム。 Linux と macOS の値は Unix です。 $IsMacOs$IsLinux を参照してください。
  • Ps互換バージョン -現在のバージョンと互換性のある PowerShell のバージョン
  • PSRemotingProtocolVersion -PowerShell リモート管理プロトコルのバージョン。
  • Serializationversion -シリアル化メソッドのバージョン
  • Wsmanstackversion -WS-Management スタックのバージョン番号

$PWD

現在の PowerShell 実行空間の現在のディレクトリの場所の完全パスを表すパスオブジェクトを格納します。

注意

PowerShell では、プロセスごとに複数の実行空間がサポートされます。 各実行空間には、独自の 現在のディレクトリ があります。 これは、プロセスの現在のディレクトリと同じではありませ [System.Environment]::CurrentDirectory ん。

$Sender

このイベントを生成した オブジェクトを格納します。 この変数は、イベント登録コマンドの Action ブロック内でのみ設定されます。 この変数の値は、返される PSEventArgs オブジェクトの Sender プロパティでも Get-Event 確認できます。

$ShellId

現在のシェルの識別子を格納します。

$StackTrace

最新のエラーのスタック トレースを格納します。

$switch

ステートメントの結果の値ではない列挙子を格納 Switch します。 変数 $switch は、ステートメントの実行中にのみ存在します。ステートメントの実行が完了すると Switch switch 削除されます。 詳細については、「」を参照about_Switch。

列挙子には、ループ値を取得し、現在のループイテレーションを変更するために使用できるプロパティとメソッドが含まれます。 詳細については、「列挙子の 使用」を参照してください

$this

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

カスタム クラスでは、変数はクラス オブジェクト自体を参照し、クラスで定義されているプロパティとメソッド $this へのアクセスを許可します。

$true

True を 格納します。 この変数を使用すると、コマンドとスクリプト で True を表します。

列挙子の使用

、、および 変数はすべて、含まれているコード ブロックによって処理される値を反復処理 $input $foreach $switch するために使用される列挙子です。

列挙子には、反復処理を進め、リセットしたり、反復値を取得したりするために使用できるプロパティとメソッドが含まれます。 列挙子を直接操作することは、ベストプラクティスとは見なされません。

  • ループ内では、フロー制御キーワード breakcontinue を優先する必要があります。

  • パイプライン入力を受け入れる関数内では、 Valuefrompipeline 属性または Valuefrompipelinebypropertyname 属性でパラメーターを使用することをお勧めします。

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

MoveNext

MoveNextメソッドは、列挙子をコレクションの次の要素に進めます。 列挙子が True False コレクションの末尾を越えた場合、MoveNext は、列挙子が正常に進められた場合はを返します。

注意

返さ れた戻り値は 、出力ストリームに 送信され ます。 出力を抑制するには、出力を typecasting する [void] か、 Out-Nullにパイプします。

$input.MoveNext() | Out-Null
[void]$input.MoveNext()

Reset

メソッドは、 Reset 列挙子を初期位置、つまりコレクション内の最初の要素の に設定します。

Current

プロパティは、 Current 列挙子の現在位置にある、コレクションまたはパイプライン内の要素を取得します。

プロパティは、 Current MoveNext が呼び出されるまで、同じプロパティを返し続けます。

例 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 します。
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 property

プロパティを使用 Current すると、 メソッドを使用せずに現在のパイプライン値に複数回アクセス Reset できます。 プロセス ブロックでは 、MoveNext メソッドは自動的に呼び出 されません。

Current MoveNext を明示的に呼び出さない限り、 プロパティは 設定されません。 プロパティ 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 使用すると、コレクション内の現在の要素がリセットされます。 次の例では、 メソッドが呼び出されたため、最初の 2 つの要素 Reset を 2 回ループ処理します。 最初の 2 つのループの後、ステートメントは失敗し、ループは 3 つの要素すべてを通常通 if り反復処理します。

重要

これにより、無限ループが発生する可能性があります。

$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 メソッドの後にステートメントが存在しない場合でも、Note のよう な大文字 と小文字の区別が実行されないことに注意して 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

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_OutputTypeAttribute

about_Functions_CmdletBindingAttribute

about_Hash_Tables

about_Preference_Variables

about_Splatting

about_Variables