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 函数必须返回一个对象,通常是字符串。建议使其返回字符串,或者可格式化为字符串的对象。该字符
串应适合 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)> "}
该提示符与下面类似:
2009 年 1 月 1 日 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
{
# at 符号创建一个数组以免只存在一个历史项。
$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