about_Automatic_Variables

簡単な説明

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

長い説明

概念的には、これらの変数は読み取り専用と見なされます。 これらをに書き込む ことはできますが 、旧バージョンとの互換性のために書き込ま ない でください。

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

$$

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

$?

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

パイプライン内の複数の段階で実行されるコマンドレットおよび拡張関数の場合 (および end ブロックの両方 process で) は、とのよう this.ThrowTerminatingError() $PSCmdlet.ThrowTerminatingError() に、または $PSCmdlet.WriteError() の各ポイントでを呼び出す this.WriteError() と、 False に設定 $? されます。

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

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

Test-WriteError
$? # $true

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

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

注意

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

$^

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

$_

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

$args

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

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

$ConsoleFileName

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

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

$Error

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

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

$ErrorView

エラーが表示されるビューを制御する値を格納します。 変数は、 $ErrorView 文字列または errorview オブジェクトを受け入れ、既定値 ConciseView はです。 受け入れられた値以外の文字列が定義されている場合は、エラーがスローされます。

指定できる値:

  • CategoryView -エラーカテゴリ情報のみが表示されます。
  • ConciseView -エラーメッセージのみが表示されます。 エラーがパーサーエラーの場合、またはスクリプトからのものである場合は、ロケーションポインターが含まれます。 このビューは PowerShell 7.0 で追加されました
  • DetailedView -すべてのエラー情報を含む詳細なエラーメッセージを表示します。 このビューは PowerShell 7.2 で追加されました
  • NormalView -エラーメッセージ、場所、カテゴリ情報などを含む標準の PowerShell エラービューが用意されています。

$Event

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

$EventArgs

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

$EventSubscriber

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

$ExecutionContext

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

$false

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

$foreach

ForEachループの列挙子 (結果の値ではない) が含まれます。 変数は $ForEach 、ループの ForEach 実行中にのみ存在します。ループが完了すると削除されます。

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

$HOME

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

$Host

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

$input

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

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

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

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

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

    注意

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

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

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

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

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

$IsCoreCLR

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

$IsLinux

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

$IsMacOS

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

$IsWindows

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

$LastExitCode

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

$Matches

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

オペレーターの -match 詳細については、「 about_Comparison_Operators」を参照してください。 正規表現の詳細については、「 about_Regular_Expressions」を参照してください。

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

注意

セッションにデータが設定されると $Matches 、別の一致によって上書きされるまで、一致した値が保持されます。 を再度使用し、一致するものが見つからない場合 -match は、に $null リセット $Matches されません。 以前に一致した値は、別の一致が見つかるまで、に $Matches 保持されます。

$MyInvocation

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

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

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

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

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

$NestedPromptLevel

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

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

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

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

$null

$nullnull または空の値を含む自動変数を指定します。 この変数を使用すると、コマンドやスクリプトに存在しない値または未定義の値を表すことができます。

$nullPowerShell は、値を持つオブジェクト (つまり、明示的なプレースホルダー) としてを処理します。これにより、を使用 $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 プロパティには、使用されているパラメーターセットの名前が含まれます。 このメソッドは、 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 ファイルのパスで使用できます。 たとえば、次のコマンドは、概念説明ヘルプトピックで word 変数 を検索します。

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

$PSItem

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

$PSNativeCommandArgumentPassing

注意

$PSNativeCommandArgumentPassing は、 PSNativeCommandArgumentPassing 試験的な機能 ia が有効になっている場合にのみ使用できます。 詳細については、「試験的な機能のabout_Experimental_Features」を参照してください

この実験的な機能が有効になっていると、PowerShell は、ネイティブの実行可能ファイルを呼び出すときに、文字列を再構築する現在の機構ではなく、StartProcessInfo オブジェクトの ArgumentList プロパティを使用します。

注意事項

新しい動作は、現在の動作からの 破壊的変更 です。 これにより、ネイティブ アプリケーションを呼び出す際のさまざまな問題に対処するスクリプトと自動化が中断される場合があります。 歴史的に、引用符をエスケープする必要があり、ネイティブ アプリケーションに空の引数を指定することはできません。

この機能によって、実行時に動作を選択できる新しい自動変数 $PSNativeCommandArgumentPassing が追加されます。 有効な値は、LegacyStandardWindows です。 Legacy は過去の動作です。 実験的な機能が有効になっている場合の既定値は、新しい Standard 動作です。

preference 変数が次のファイルの Windows 呼び出しに設定されている場合は、スタイル引数の引き渡しが Legacy 自動的に使用されます。

  • cmd.exe
  • cscript.exe
  • wscript.exe
  • .bat で終わる
  • .cmd で終わる
  • .js で終わる
  • .vbs で終わる
  • .wsf で終わる

$PSNativeArgumentPassingLegacy または Standard のいずれかに設定されている場合、これらのファイルのチェックは行われません。 既定の動作は、プラットフォームに固有です。 Windows プラットフォームの場合、既定の設定は Windows で、Windows 以外のプラットフォームでは Standard です。

この変更によって利用可能になった新しい動作は次のとおりです。

  • リテラルまたは展開可能な文字列に引用符が埋め込まれ、その引用符が保持されるようになりました。

    PS > $a = 'a" "b'
    PS > $PSNativeCommandArgumentPassing = "Legacy"
    PS > testexe -echoargs $a 'a" "b' a" "b
    Arg 0 is <a b>
    Arg 1 is <a b>
    Arg 2 is <a b>
    PS > $PSNativeCommandArgumentPassing = "Standard"
    PS > testexe -echoargs $a 'a" "b' a" "b
    Arg 0 is <a" "b>
    Arg 1 is <a" "b>
    Arg 2 is <a b>
    
  • 空の文字列が引数として保持されるようになりました。

    PS>  $PSNativeCommandArgumentPassing = "Legacy"
    PS> testexe -echoargs '' a b ''
    Arg 0 is <a>
    Arg 1 is <b>
    PS> $PSNativeCommandArgumentPassing = "Standard"
    PS> testexe -echoargs '' a b ''
    Arg 0 is <>
    Arg 1 is <a>
    Arg 2 is <b>
    Arg 3 is <>
    

新しい動作では、次のような呼び出しは変更されません。

PS> $PSNativeCommandArgumentPassing = "Legacy"
PS> testexe -echoargs -k com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect
Arg 0 is <-k>
Arg 1 is <com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect>
PS> $PSNativeCommandArgumentPassing = "Standard"
PS> testexe -echoargs -k com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect
Arg 0 is <-k>
Arg 1 is <com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect>

また、パラメーター トレースが提供され、Trace-Command によってデバッグに役立つ情報が提供されるようになりました。

PS> $PSNativeCommandArgumentPassing = "Legacy"
PS> trace-command -PSHOST -Name ParameterBinding { testexe -echoargs $a 'a" "b' a" "b }
DEBUG: 2021-02-01 17:19:53.6438 ParameterBinding Information: 0 : BIND NAMED native application line args [/Users/james/src/github/forks/jameswtruher/PowerShell-1/test/tools/TestExe/bin/testexe]
DEBUG: 2021-02-01 17:19:53.6440 ParameterBinding Information: 0 :     BIND argument [-echoargs a" "b a" "b "a b"]
DEBUG: 2021-02-01 17:19:53.6522 ParameterBinding Information: 0 : CALLING BeginProcessing
Arg 0 is <a b>
Arg 1 is <a b>
Arg 2 is <a b>
PS> $PSNativeCommandArgumentPassing = "Standard"
PS> trace-command -PSHOST -Name ParameterBinding { testexe -echoargs $a 'a" "b' a" "b }
DEBUG: 2021-02-01 17:20:01.9829 ParameterBinding Information: 0 : BIND NAMED native application line args [/Users/james/src/github/forks/jameswtruher/PowerShell-1/test/tools/TestExe/bin/testexe]
DEBUG: 2021-02-01 17:20:01.9829 ParameterBinding Information: 0 :     BIND cmd line arg [-echoargs] to position [0]
DEBUG: 2021-02-01 17:20:01.9830 ParameterBinding Information: 0 :     BIND cmd line arg [a" "b] to position [1]
DEBUG: 2021-02-01 17:20:01.9830 ParameterBinding Information: 0 :     BIND cmd line arg [a" "b] to position [2]
DEBUG: 2021-02-01 17:20:01.9831 ParameterBinding Information: 0 :     BIND cmd line arg [a b] to position [3]
DEBUG: 2021-02-01 17:20:01.9908 ParameterBinding Information: 0 : CALLING BeginProcessing
Arg 0 is <a" "b>
Arg 1 is <a" "b>
Arg 2 is <a b>

$PSScriptRoot

実行中のスクリプトの親ディレクトリの完全なパスを格納します。

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

$PSSenderInfo

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

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

$PSStyle

PowerShell 7.2 では、 $PSStyle 自動変数にアクセスして、ANSI 文字列出力のレンダリングを表示および変更できます。 変数には、次のプロパティが含まれます。

  • Reset - すべての装飾をオフにします
  • Blink - オン Blink にする
  • Blinkオフ - オフBlink
  • Bold - オン Bold にする
  • Boldオフ - オフBold
  • Hidden - オン Hidden にする
  • Hiddenオフ - オフHidden
  • Reverse - オン Reverse にする
  • Reverseオフ - オフReverse
  • Italic - オン Italic にする
  • Italicオフ - オフItalic
  • Underline - 下線をオンにする
  • Underline[オフ ] - 下線をオフにします
  • OutputRendering - 出力レンダリングを使用する場合の制御
  • Background - 背景の色分けを制御する入れ子になったオブジェクト
  • Foreground - 前景色を制御する入れ子になったオブジェクト
  • Formatting - 出力ストリームの既定の書式設定を制御する入れ子になったオブジェクト
  • Progress - 進行状況バーのレンダリングを制御する入れ子になったオブジェクト
  • FileInfo - (試験段階) FileInfo オブジェクトの色分けを制御する入れ子になったオブジェクト。

基本メンバーは、名前にマップされた ANSI エスケープ シーケンスの文字列を返します。 値は、カスタマイズできるように設定できます。 たとえば、太字を下線付きに変更できます。 プロパティ名を使用すると、タブ補完を使用して装飾文字列を簡単に作成できます。

"$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

次のメンバーは、ANSI 書式設定を使用する方法と使用する方法を制御します。

  • $PSStyle.OutputRendering は、次 System.Management.Automation.OutputRendering の値を持つ列挙型です。

    • ANSI: これは既定の動作です。 ANSI は常に同じ方法で渡されます。

      重要

      出力をダウンストリームで実行することを目的としたファイルまたはパイプラインにリダイレクトする場合は、 ANSI モードを使用する必要があります。 これにより、出力が変更されません。 他のモードを使用すると、ANSI エスケープ シーケンスを削除することで出力が変更され、実行動作が変更される可能性があります。

    • PlainText: ANSI エスケープ シーケンスは常に、プレーンテキストのみとして削除されます。

    • ホスト: ANSI エスケープ シーケンスは、リダイレクト出力またはパイプ出力で削除されます。

  • メンバー $PSStyle.Background と メンバー $PSStyle.Foreground は、16 色の標準コンソールの ANSI エスケープ シーケンスを含む文字列です。

    • Black
    • BrightBlack
    • BrightWhite
    • [赤]
    • BrightRed
    • 赤紫
    • BrightMagenta
    • BrightBlue
    • シアン
    • BrightCyan
    • [緑]
    • BrightGreen
    • BrightYellow

    値は設定可能であり、任意の数の ANSI エスケープ シーケンスを含めることができます。 24 ビット FromRgb() の色を指定する方法も用意しています。 メソッドを呼び出す方法は 2 FromRgb() 通りあります。

    • string FromRgb(byte red, byte green, byte blue)
    • string FromRgb(int rgb)

    次の例のいずれかを使用して、背景色を 24 ビットカラー の [も ちどり] に設定します。

    $PSStyle.Background.FromRgb(245, 245, 220)
    $PSStyle.Background.FromRgb(0xf5f5dc)
    
  • $PSStyle.Formatting は、デバッグ、エラー、詳細、警告メッセージの既定の書式設定を制御する入れ子になったオブジェクトです。 また、太字や下線など、属性を制御することもできます。 レンダリングの書式設定の $Host.PrivateData 色を管理する方法として が置き換わる。 $Host.PrivateData 下位互換性のために は引き続き存在しますが、 には接続されていません $PSStyle.Formatting

  • $PSStyle.Progress を使用すると、進行状況ビュー バーのレンダリングを制御できます。

    • スタイル - レンダリング スタイルを設定する ANSI 文字列。
    • MaxWidth - ビューの最大幅を設定します。 0 に設定するとコンソールの幅になります。 既定値は 120 です
    • View - 値を持つ列挙型、および Minimal ClassicClassic は変更なしの既存の表示です。 Minimal は単一行の最小表示です。 Minimal が既定値です。
    • USEOSCIndicator - 既定値は です $false。 OSC インジケーターを $true サポートするターミナルの場合は、これを に設定します。

    注意

    ホストで仮想ターミナルがサポートされていない場合、$PSStyle.Progress.View は自動的に Classic に設定されます。

    次の例では、レンダリング スタイルを最小限の進行状況バーに設定します。

    $PSStyle.Progress.View = Minimal
    

$PSStyle.FileInfo は、FileInfo オブジェクトの色分けを制御する入れ 子になった オブジェクトです。

  • ディレクトリ - ディレクトリの色を指定する組み込みメンバー
  • シンボリック リンク - シンボリック リンクの色を指定する組み込みメンバー
  • 実行可能 ファイル - 実行可能ファイルの色を指定する組み込みメンバー。
  • 拡張機能 - このメンバーを使用して、さまざまなファイル拡張子の色を定義します。 Extension メンバーには、アーカイブと PowerShell ファイルの拡張機能があらかじめ含まれています。

注意

$PSStyle.FileInfo は、試験的な機能が PSAnsiRenderingFileInfo 有効になっている場合にのみ使用できます。 詳細については、「試験的な機能のabout_Experimental_Features」を参照してください

$PSUICulture

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

$PSVersionTable

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

  • PSVersion - PowerShell のバージョン番号
  • PSEdition このプロパティの値は、PowerShell 4 以下の場合は "Desktop"、フル機能の Windows エディションでは PowerShell 5.1 です。 Coreこのプロパティの値は、PowerShell 6 以上と、Windows Nano Server や Windows IoT などのフットプリントが削減されたエディションの PowerShell PowerShell 5.1 です。
  • GitCommitId - ソース ファイルのコミット ID (GitHub)
  • OS - PowerShell が実行されているオペレーティング システムの説明。
  • プラットフォーム - オペレーティング システムが実行されているプラットフォーム。 Linux および macOS の値は Unix です$IsMacOs$IsLinux を参照してください。
  • PSCompatibleVersions - 現在のバージョンと互換性のある 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 は、クラス自体のインスタンスを参照するためにクラスを拡張するスクリプト ブロックで使用されます。

PowerShell の拡張型システム (ETS) を使用すると、スクリプト ブロックを使用してクラスにプロパティを追加できます。 スクリプト プロパティまたはスクリプト メソッド $this を定義するスクリプト ブロックでは、変数は拡張されるクラスのオブジェクトのインスタンスを参照します。 たとえば、PowerShell は ETS を使用して BaseName プロパティを FileInfo クラスに追加 します。

PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List

TypeName   : System.IO.FileInfo
Name       : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Remove($this.Name.Length -
             $this.Extension.Length)}else{$this.Name};}

詳細については、「 about_Types.ps1xml」を参照してください

PowerShell クラスでは、変数 $this はクラス自体のインスタンス オブジェクトを参照し、クラスで定義されているプロパティとメソッドにアクセスできます。 詳細については、「about_Remote」を参照してください。

変数 $this は、イベント ハンドラーのデリゲートとしてスクリプト ブロックを受け取る .NET イベント クラスでも使用されます。 このシナリオでは、 $this は、イベントの送信元オブジェクト (イベント送信者と呼ばれる) を表します。

$true

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

列挙子の使用

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

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

  • ループ内では、フロー制御キーワードが壊れて続行する必要があります。

  • パイプライン入力を受け入れる関数内では、ValueFromPipeline 属性または ValueFromPipelineByPropertyName 属性でパラメーターを使用するのがベスト プラクティスです。

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

MoveNext

MoveNext メソッドは、列挙子をコレクションの次の要素に進します。 列挙子がコレクション の末尾 TrueFalse 通過した場合、MoveNext は列挙子が正常に進んだ場合に を返します。

注意

MoveNext によって返されるブール値が 出力ストリームに送信されます。 出力を抑制するには、 に型 [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 メソッドは自動的に呼び出 されません。

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 メソッドを使用して値を変更します。

注意

ループの各イテレーションでは foreachMoveNext メソッドが自動的に呼び出 されます。

次のループは 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

関連項目