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の場合 $LASTEXITCODE
は True に設定され、が他の値の場合 $LASTEXITCODE
は False に設定されます。
注意
PowerShell 7 までは、かっこ (...)
内にステートメントが含まれている (Write-Error)
$?
限り、部分式構文 $(...)
または配列式 @(...)
は常に true にリセット $?
されるので、は true になります。
これは PowerShell 7 で変更されている $?
ため、は常に、これらの式で最後に実行されたコマンドの実際の成功を反映します。
$^
セッションによって受信された最後の行の最初のトークンを格納します。
$_
$PSItem
と同じ。 パイプラインオブジェクトの現在のオブジェクトを格納します。 この変数は、パイプライン内のすべてのオブジェクトまたは選択したオブジェクトに対してアクションを実行するコマンドで使用できます。
$args
関数、スクリプト、またはスクリプトブロックに渡される、宣言されていないパラメーターの値の配列を格納します。 関数を作成するときに、キーワードを使用 param
するか、関数名の後にパラメーターのコンマ区切りリストをかっこで追加することによって、パラメーターを宣言できます。
イベントアクションでは、変数に $args
は、処理中のイベントのイベント引数を表すオブジェクトが格納されます。 この変数は、 Action
イベント登録コマンドのブロック内でのみ設定されます。 この変数の値は、を返す PSEventArgs オブジェクト Get-Event
の sourceargs プロパティにもあります。
$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.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
実行中にのみ存在します。ループが完了すると削除されます。
列挙子には、ループ値を取得したり、現在のループの反復を変更したりするために使用できるプロパティとメソッドが含まれています。 詳細については、「 列挙子の使用」を参照してください。
$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
$null
null または空の値を含む自動変数を指定します。 この変数を使用すると、コマンドやスクリプトに存在しない値または未定義の値を表すことができます。
$null
PowerShell は、値を持つオブジェクト (つまり、明示的なプレースホルダー) としてを処理します。これにより、を使用 $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
します。 $PSCulture
Name プロパティの値を格納します。
$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
が追加されます。 有効な値は、Legacy
、Standard
、Windows
です。 Legacy
は過去の動作です。 実験的な機能が有効になっている場合の既定値は、新しい Standard
動作です。
preference 変数が次のファイルの Windows
呼び出しに設定されている場合は、スタイル引数の引き渡しが Legacy
自動的に使用されます。
cmd.exe
cscript.exe
wscript.exe
.bat
で終わる.cmd
で終わる.js
で終わる.vbs
で終わる.wsf
で終わる
$PSNativeArgumentPassing
が Legacy
または 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()
の色を指定する方法も用意しています。 メソッドを呼び出す方法は 2FromRgb()
通りあります。- 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
Classic
。Classic
は変更なしの既存の表示です。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 メソッドは、列挙子をコレクションの次の要素に進します。 列挙子がコレクション の末尾 True
を False
通過した場合、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
します。
- 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 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 メソッドを使用して値を変更します。
注意
ループの各イテレーションでは 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
関連項目
フィードバック
フィードバックの送信と表示