about_Prompts
主題
about_Prompts
簡短描述
說明提示函數並示範如何建立自訂的提示函數。
完整描述
Windows PowerShell 命令提示字元表示 Windows PowerShell 已準備就緒,可以執
行命令:
PS C:\>
Windows PowerShell 提示是由提示函數決定。您可以建立自己的提示函數,藉此自
訂提示。接著,您可以將此函數儲存到 Windows PowerShell 設定檔。
提示函數
提示函數決定 Windows PowerShell 提示的外觀。Windows PowerShell 隨附內
建的提示函數,但是您可以定義自己的提示函數,將其覆寫。
提示函數的語法如下:
function prompt { <函數-主體> }
提示函數必須傳回物件,通常是字串。我們建議讓它傳回字串或是格式化為字串的
物件。此字串應該要能放入 80 個字元的一行內。
例如:
PS C:\> function prompt {"Hello, World > "}
Hello, World >
和所有函數一樣,提示函數也儲存在 Function: 磁碟機內。若要顯示目前提示函
數中的程式碼,請輸入:
(get-item function:prompt).definition
此命令使用 Get-Item Cmdlet 顯示 Function: 磁碟機中的提示項目,然後使用點
標記法來顯示提示函數的 Definition 屬性值。
預設提示
預設的 Windows PowerShell 提示為:
PS>
這個提示只會出現在提示函數產生錯誤或提示函數未傳回字串或物件時。
PS C:\> function prompt {$null}
PS>
因為 Windows PowerShell 隨附內建提示,所以除非您撰寫自己的提示函數,否則
通常看不到預設提示。
內建提示
Windows PowerShell 包含內建提示函數,會建立熟悉的提示。內建的提示函數為:
function prompt
{
$(if (test-path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + 'PS ' + $(Get-Location) `
+ $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' }
此函數使用 Test-Path Cmdlet 來判斷 $PSDebugContext 自動變數是否已填入。
如果 $PSDebugContext 已填入,表示處於偵錯模式,因此會將 "[DBG]" 加入提
示內,如下所示:
[DBG] PS C:\ps-test>
如果 $PSDebugContext 未填入,則函數會將 "PS" 加入提示。此外,函數會使用
Get-Location cmdlet 來取得目前的檔案系統目錄位置。接著,函數會新增右角
括弧 (>)。
例如:
PS C:\ps-test><tab>
如果您位在巢狀提示,此函數會將兩個角括弧 (>>) 加入提示 (如果
$NestedPromptLevel 自動變數的值大於 1,表示位於巢狀提示)。
例如,當您在巢狀提示中偵錯時,提示會類似於下列提示:
[DBG] PS C:\ps-test>>>
Enter-PSSession Cmdlet 會在目前的提示函數前面加上遠端電腦的名稱。當您使用
Enter-PSSession Cmdlet 在遠端電腦啟動工作階段時,命令提示字元會變更為加入
遠端電腦的名稱。例如:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
其他的 Windows PowerShell 主機應用程式和替代殼層可能會有其自訂的命令提示
字元。
如需 $PSDebugContext 和 $NestedPromptLevel 自動變數的詳細資訊,請參閱
about_Automatic_Variables。
自訂提示
若要自訂提示,請撰寫新的提示函數。函數未受到保護,因此可以加以覆寫。
若要撰寫提示函數,請輸入下列:
function prompt { }
接著,在大括號中間輸入命令或字串,建立您的提示。
例如,下列提示加入了您的電腦名稱:
function prompt {"PS [$env:COMPUTERNAME]> "}
在 Server01 電腦上,提示會類似於下列提示:
PS [Server01] >
下列提示函數加入目前的日期和時間:
function prompt {"$(get-date)> "}
提示會類似於下列提示:
01/01/2008 17:49:47>
您也可以修改預設提示函數:
function prompt
{
$(if (test-path variable:/PSDebugContext) { '[DBG]: ' }
else { '' }) + "$(get-date)" `
+ $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> ' }
例如,下列修改過的提示函數會在 Windows PowerShell 以 [以系統管理員身分執
行] 選項開啟時,將 "[ADMIN]:" 加入內建 Windows PowerShell 提示:
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>
下列提示函數會顯示下一個命令的歷程記錄識別碼。若要檢視命令歷程記錄,請使用
Get-History Cmdlet。
function prompt
{
# 如果只有一個歷程記錄項目,符號 (\\@) 會建立陣列。
$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 Cmdlet,建立隨機變換色彩的提示。
由於 Write-Host 會寫入目前的主機應用程式,但不會傳回物件,所以此函數包含
Return 陳述式。如果沒有包含該陳述式,Windows PowerShell 就會使用預設的提
示字元 "PS>"。
function prompt
{
$color = get-random -min 1 -max 16
write-host ("PS " + $(get-location) +">") -nonewline -foregroundcolor $color
return " "
}
儲存提示
和所有函數一樣,提示函數只適用於目前工作階段。若要儲存提示函數以供未來工
作階段使用,請將它加入您的 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