about_prompts
トピック
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)> "}
次のプロンプトに似たプロンプトが表示されます。
2008 年 1 月 1 日 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