共用方式為


關於提示

簡短描述

描述 Prompt 函式,並示範如何建立自定義 Prompt 函式。

完整描述

PowerShell 命令提示字元指出 PowerShell 已準備好執行命令:

PS C:\>

PowerShell 提示符由內置 Prompt 函數決定。 您可以透過建立自己的 Prompt 函數並將儲存在 PowerShell 設定檔中來自定義提示。

關於 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 函式,請使用 Get-Command Cmdlet,或使用函式磁碟驅動器中的 Get-Item Cmdlet。

例如:

PS C:\> Get-Command Prompt

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

若要取得設定提示值的腳本,請使用 dot 方法來取得 函式的 Prompt 屬性。

例如:

(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 {
    $(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>

如果您位於巢狀提示中,函式會將兩個角括號(>>)新增至提示。 (如果自動變數的值 $NestedPromptLevel 大於 1,則您位於嵌套提示中。

例如,當您在巢狀提示中偵錯時,提示會類似下列提示:

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

提示內容的變更

Enter-PSSession Cmdlet 會將目前的 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]:後的函數將添加到內置 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) { '>>' }) + '> '
}

當您使用 Run as administrator(以管理員身份運行) 選項啟動 PowerShell 時,將顯示類似於以下提示的提示:

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

下列 Prompt 函式會顯示下一個命令的歷程記錄標識碼。 若要檢視命令歷程記錄,請使用 Get-History Cmdlet。

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-HostGet-Random Cmdlet 來建立隨機變更色彩的提示。 由於寫入當前主機應用程式但不返回物件,因此 Write-Host 此函數包含一個 Return 語句。 如果沒有,PowerShell 會使用預設提示,PS>

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

儲存提示函式

如同任何函式,Prompt 函式只存在於目前的會話中。 若要儲存未來會話的 Prompt 函式,請將它新增至 PowerShell 配置檔。 如需了解關於設定檔的更多資訊,請參閱 about_Profiles

另請參閱

取得位置

Enter-PSSession (進入-PSSession)

取得歷史記錄

隨機取得 (Get-Random)

寫入主機

關於_簡介

about_Functions

about_Scopes

about_Debuggers

自動變數概覽