about_Prompts

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_Prompts

概要

Prompt 関数について説明し、カスタムの Prompt 関数を作成する方法を示します。

詳細説明

Windows PowerShell コマンド プロンプトは、Windows PowerShell がコマンドを実行する準備ができたことを示します。

        PS C:\>

Windows PowerShell プロンプトは、組み込みのプロンプトの関数によって決定されます。プロンプトをカスタマイズするには、独自の Prompt 関数を作成して Windows PowerShell プロファイルに保存します。

Prompt 関数

Prompt 関数は、Windows PowerShell プロンプトの外観を決定します。Windows 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 コマンドレットを使用します。

関数はコマンドです。そのため、Get-Command コマンドレットを使用して、Prompt 関数などの関数を取得できます。

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

        PS C:\>Get-Command Prompt

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

プロンプトの値を設定するスクリプトを取得するには、ドット メソッドを使用して、Prompt 関数の ScriptBlock プロパティを取得します。

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

        PS C:\>(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 関数がエラーを生成した場合やオブジェクトを返さない場合にのみ、既定のプロンプトが表示されます。

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

        PS>

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

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

Windows PowerShell には組み込みのプロンプトが付属しているため、通常、既定のプロンプトは表示されません。

組み込みのプロンプト

Windows PowerShell には、組み込みの Prompt 関数が含まれています。

Windows PowerShell 3.0 では、組み込みの Prompt 関数は次のとおりです。

        function prompt
        {
            "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        }

この簡略化されたプロンプトは "PS" で始まり、後に現在の作業場所と、入れ子になったプロンプト レベルごとに 1 つの ">" が続きます。

Windows PowerShell 2.0 では、組み込みの Prompt 関数は次のとおりです。

        function prompt
        {
            $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 
            else { '' }) + 'PS ' + $(Get-Location) `
            + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
        } 

関数は、Test-Path コマンドレットを使用して、$PSDebugContext 自動変数に値が代入されているかどうかを判断します。$PSDebugContext に値が代入されている場合は、現在デバッグ モードであり、次のように "[DBG]" がプロンプトに追加されます。

        [DBG] PS C:\ps-test>

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

    For example:        
        PS C:\ps-test>

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

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

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

プロンプトへの変更

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

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

その他の Windows 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 関数は、Windows PowerShell が [管理者として実行] オプションを使用して開かれたときに、組み込みの Windows PowerShell プロンプトに "[ADMIN]:" を追加します。

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

            $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 

            elseif($principal.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
            { "[ADMIN]: " }

            else { '' }) + 'PS ' + $(Get-Location) + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
        }

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

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

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

          function prompt
          {
             # The at sign creates an array in case only one history item exists.
             $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 ステートメントが含まれています。含めない場合、Windows PowerShell は既定のプロンプト "PS>" を使用します。

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

Prompt 関数の保存

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

関連項目

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables