トピック about_Prompts 簡易説明 prompt 関数について説明し、カスタム prompt 関数を作成する方法を示します。 詳細説明 Windows PowerShell のコマンド プロンプトは、Windows PowerShell がコマンドを実行できる状態であ ることを示します。 PS C:\> Windows PowerShell プロンプトは、prompt 関数によって決定されます。独自の prompt 関数を作成するこ とによって、プロンプトをカスタマイズできます。その後、Windows PowerShell プロファイルにこの 関数を保存できます。 prompt 関数 prompt 関数は、Windows PowerShell プロンプトの外観を決定します。Windows PowerShell には組み込みの prompt 関数がありますが、独自の prompt 関数を定義してこの関数を上書きすることができます。 prompt 関数の構文を次に示します。 function prompt { <function-body> } prompt 関数は、オブジェクト (通常は文字列) を返す必要があります。prompt 関数が文字列、または文字列 形式のオブジェクトを返すようにすることを推奨します。文字列は、1 行あたり 80 文字以内で指定する必要があ ります。 次にその例を示します。 PS C:\> function prompt {"Hello, World > "} Hello, World > すべての関数と同様に、prompt 関数は Function: ドライブに保存されます。現在の prompt 関数のコード を表示するには、次のように入力します。 (get-item function:prompt).definition このコマンドは、Get-Item コマンドレットを使用して、Function: ドライブの prompt 項目を表示します。 その後、ドット表記法を使用して、prompt 関数の Definition プロパティの値を表示します。 既定のプロンプト 既定の Windows PowerShell プロンプトを次に示します。 PS> このプロンプトは、prompt 関数でエラーが発生した場合、または prompt 関数が文字列またはオブジェクトを返 さない場合にのみ表示されます。 PS C:\> function prompt {$null} PS> Windows PowerShell には組み込みのプロンプトがあるので、通常、独自の prompt 関数を記述するまで既定のプ ロンプトは表示されません。 組み込みプロンプト Windows PowerShell には、一般的なプロンプトを作成する組み込みの prompt 関数が含まれています。 組み込みの 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 コマンドレットが使用され、現在のファイル システム ディレクトリの場所が取得さ れます。さらに、終わり山かっこ (>) が追加されます。 次にその例を示します。 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_Autom atic_Variables」を参照してください。 プロンプトのカスタマイズ プロンプトをカスタマイズするには、新しい prompt 関数を記述します。関数は保護されないので、上書き可 能です。 prompt 関数を上書きするには、次のように入力します。 function prompt { } 次に、中かっこの中に、コマンド、またはプロンプトを作成する文字列を入力します。 たとえば、次のプロンプトには、コンピューター名のみが含まれます。 function prompt {"PS [$env:COMPUTERNAME]> "} Server01 コンピューターで、次のプロンプトに似たプロンプトが表示されます。 PS [Server01] > 次の prompt 関数には、現在の日付と時刻が含まれます。 function prompt {"$(get-date)> "} 次のプロンプトに似たプロンプトが表示されます。 01/01/2008 17:49:47> 既定の prompt 関数を変更することもできます。 function prompt { $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } else { '' }) + "$(get-date)" ` + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' } たとえば、次に示す変更された 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 ステートメントが含まれています。return ステートメントを使用しな い場合、Windows PowerShell は既定のプロンプト "PS>" を使用します。 function prompt { $color = get-random -min 1 -max 16 write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color return " " } プロンプトの保存 他の関数と同様に、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