主题 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 函数必须返回一个对象,通常是字符串。建议使其返回字符串,或者可格式化为字符串的对象。该字符 串应适合 80 字符的行。 例如: PS C:\> function prompt {"Hello, World > "} Hello, World > 与所有其他函数一样,Prompt 函数也存储在 Function: 驱动器中。若要显示当前 Prompt 函数中的代码, 请键入: (get-item function:prompt).definition 此命令使用 Get-Item cmdlet 显示 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 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>>> Start-PSSession cmdlet 将远程计算机的名称附加在当前 Prompt 函数前面。当使用 Start- PSSession cmdlet 启动与远程计算机之间的会话时,将更改命令提示符使其包含远程计算机的名称。例如: PS Hello, World> Enter-PSSession Server01 [Server01]: PS Hello, World> 其他 Windows PowerShell 主机应用程序和替代 shell 可能有其自己的自定义命令提示符。 有关 $PSDebugContext 和 $NestedPromptLevel 自动变量的详细信息,请参阅 about_Automatic_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 时,将 "[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> 下面的 Prompt 函数显示下一条命令的历史 ID。若要查看命令历史记录,请使用 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-Host 和 Get-Random cmdlet 来创建随机更改颜色的提示符。由于 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