ja-JP/about_Prompts.help.txt

TOPIC
    about_Prompts

簡単な説明
    prompt 関数について説明し、独自の prompt 関数を作成する方法を示します。

詳細な説明
    PowerShell のコマンドプロンプトは、PowerShell がコマンドを実行できる
    状態であることを示します。

        PS C:\>

    PowerShell には組み込みの prompt 関数があります。PowerShell プロファイル
    スクリプトで独自のカスタマイズした prompt 関数を定義できます。

    prompt 関数について

    prompt 関数は、PowerShell のプロンプトの外観を決定します。PowerShell には
    組み込みの prompt 関数が付属していますが、独自の prompt 関数を定義して
    上書きできます。

    prompt 関数の構文は次のとおりです。

        function prompt { <function-body> }

    prompt 関数はオブジェクトを返さなければなりません。ベストプラクティス
    として、文字列、または文字列として書式設定されたオブジェクトを返します。
    推奨される最大の長さは 80 文字です。

    たとえば、次の prompt 関数は "Hello, World" という文字列の後に右山かっこ
    (>)を付けて返します。

        PS C:\> function prompt {"Hello, World > "}
        Hello, World >

    prompt 関数を取得する

    prompt 関数を取得するには、Get-Command コマンドレットを使用するか、
    Function ドライブで Get-Item コマンドレットを使用します。

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

        PS C:\> Get-Command prompt

        CommandType Name ModuleName
        ----------- ---- ----------
        Function prompt

    プロンプトの値を設定するスクリプトを取得するには、ドット表記で prompt
    関数の ScriptBlock プロパティを取得します。

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

        (Get-Command prompt).ScriptBlock

    出力:

        "PS $($ExecutionContext.SessionState.Path.CurrentLocation)$('>' * ($NestedPromptLevel + 1)) "
        # .Link
        # https://go.microsoft.com/fwlink/?LinkID=225750
        # .ExternalHelp System.Management.Automation.dll-help.xml

    すべての関数と同様に、prompt 関数は Function: ドライブに格納されます。
    現在の prompt 関数を作成するスクリプトを表示するには、次のように入力
    します。

        (Get-Item Function:prompt).ScriptBlock

    既定のプロンプト

    既定のプロンプトは、prompt 関数がエラーを生成した場合、またはオブジェクト
    を返さなかった場合にのみ表示されます。

    PowerShell の既定のプロンプトは次のとおりです。

        PS>

    たとえば、次のコマンドは prompt 関数を $null(無効な値)に設定します。
    その結果、既定のプロンプトが表示されます。

        PS C:\> function prompt {$null}
        PS>

    PowerShell には組み込みのプロンプトが付属しているため、通常は既定の
    プロンプトを目にすることはありません。

    組み込みのプロンプト

    PowerShell には組み込みの prompt 関数があります。

        function prompt {
          "PS $($ExecutionContext.SessionState.Path.CurrentLocation)$('>' * ($NestedPromptLevel + 1)) ";
          # .Link
          # https://go.microsoft.com/fwlink/?LinkID=225750
          # .ExternalHelp System.Management.Automation.dll-help.xml
        }

    この関数は Test-Path コマンドレットを使用して、$PSDebugContext 自動変数に
    値があるかどうかをテストします。$PSDebugContext に値がある場合は
    デバッグモードで実行しており、次のようにプロンプトに [DBG]: が追加され
    ます。

        [DBG]: PS C:\ps-test>

    $PSDebugContext が設定されていない場合、関数はプロンプトに PS を追加
    します。そして、Get-Location コマンドレットを使用して現在のファイル
    システムのディレクトリの場所を取得します。さらに右山かっこ(>)を
    追加します。

    たとえば、次のようになります。

        PS C:\ps-test>

    入れ子になったプロンプトにいる場合、関数はプロンプトに 2 つの山かっこ
    (>>)を追加します。$NestedPromptLevel 自動変数の値が 0 より大きい場合、
    入れ子になったプロンプトにいることになります。

    たとえば、入れ子になったプロンプトでデバッグしている場合、プロンプトは
    次のようになります。

        [DBG] PS C:\ps-test>>>

    プロンプトの変更

    Enter-PSSession コマンドレットは、現在の prompt 関数の先頭にリモート
    コンピューターの名前を追加します。Enter-PSSession コマンドレットを使用
    してリモートコンピューターとのセッションを開始すると、コマンドプロンプト
    が変化してリモートコンピューターの名前が含まれます。たとえば、次のように
    なります。

        PS Hello, World> Enter-PSSession Server01
        [Server01]: PS Hello, World>

    他の PowerShell ホストアプリケーションや代替シェルには、独自のカスタム
    コマンドプロンプトがある場合があります。

    $PSDebugContext 自動変数および $NestedPromptLevel 自動変数の詳細について
    は、about_Automatic_Variables を参照してください。

    プロンプトをカスタマイズする方法

    プロンプトをカスタマイズするには、新しい prompt 関数を記述します。この
    関数は保護されていないため、上書きできます。

    prompt 関数を記述するには、次のように入力します。

        function prompt { }

    そして、中かっこの間に、プロンプトを作成するコマンドまたは文字列を入力
    します。

    たとえば、次のプロンプトにはコンピューター名が含まれます。

        function prompt {"PS [$Env:COMPUTERNAME]> "}

    Server01 コンピューターでは、プロンプトは次のようになります。

        PS [Server01] >

    次の prompt 関数には現在の日付と時刻が含まれます。

        function prompt {"$(Get-Date)> "}

    プロンプトは次のようになります。

        03/15/2012 17:49:47>

    既定の prompt 関数を変更することもできます。

    たとえば、次の変更された prompt 関数は、昇格されたセッションで実行して
    いるときに、組み込みの PowerShell プロンプトに [ADMIN]: を追加します。

        function prompt {
          $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
          $principal = [Security.Principal.WindowsPrincipal] $identity
          $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

          $(if (Test-Path Variable:/PSDebugContext) { '[DBG]: ' }
            elseif($principal.IsInRole($adminRole)) { "[ADMIN]: " }
            else { '' }
          ) + 'PS ' + $(Get-Location) +
            $(if ($NestedPromptLevel -ge 1) { '>>' }) + '> '
        }

    管理者として実行 オプションを使用して PowerShell を起動すると、次のような
    プロンプトが表示されます。

        [ADMIN]: PS C:\ps-test>

    次の prompt 関数は、次のコマンドの履歴 ID を表示します。コマンド履歴を
    表示するには、Get-History コマンドレットを使用します。

        function prompt {
           # 履歴項目が 1 つだけの場合に配列を作るためのアットマークです。
           $history = @(Get-History)
           if($history.Count -gt 0)
           {
              $lastItem = $history[$history.Count - 1]
              $lastId = $lastItem.Id
           }

           $nextCommand = $lastId + 1
           $currentDirectory = Get-Location
           "PS: $nextCommand $currentDirectory >"
        }

    次のプロンプトは、Write-Host コマンドレットと Get-Random コマンドレットを
    使用して、色がランダムに変わるプロンプトを作成します。Write-Host は現在の
    ホストアプリケーションに書き込みますがオブジェクトを返さないため、この関数
    には return 文が含まれます。return 文がないと、PowerShell は既定の
    プロンプト PS> を使用します。

        function prompt {
            $color = Get-Random -Min 1 -Max 16
            Write-Host ("PS " + $(Get-Location) +">") -NoNewline `
             -ForegroundColor $Color
            return " "
        }

    prompt 関数の保存

    どの関数とも同様に、prompt 関数は現在のセッションにのみ存在します。今後の
    セッションのために prompt 関数を保存するには、PowerShell プロファイルに
    追加します。プロファイルの詳細については、about_Profiles を参照して
    ください。

関連項目
    about_Automatic_Variables
    about_Debuggers
    about_Functions
    about_Profiles
    about_Scopes
    Get-History
    Write-Host
    Get-Location
    Enter-PSSession
    Get-Random

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP