关于提示符
简短说明
介绍 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 函数
若要获取 Prompt
函数,请使用 Get-Command
cmdlet 或 Get-Item
函数驱动器中的 cmdlet。
例如:
PS C:\> Get-Command Prompt
CommandType Name ModuleName
----------- ---- ----------
Function prompt
若要获取设置提示值的脚本,请使用 dot 方法获取函数的 Prompt
ScriptBlock 属性。
例如:
(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>>>
对提示的更改
cmdlet Enter-PSSession
将远程计算机的名称追加到当前 Prompt
函数。 使用 Enter-PSSession
cmdlet 启动与远程计算机的会话时,命令提示符会更改为包含远程计算机的名称。 例如:
PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>
其他 PowerShell 主机应用程序和备用 shell 可能具有其自己的自定义命令提示符。
有关 和 $NestedPromptLevel
自动变量的详细信息$PSDebugContext
,请参阅 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
函数:
例如,使用“以管理员身份运行”选项打开 PowerShell 时,以下修改后的Prompt
函数将添加到[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) { '>>' }) + '> '
}
使用“ 以管理员身份运行” 选项启动 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
。 如果没有它,PowerShell 将使用默认提示 PS>
。
function prompt {
$color = Get-Random -Min 1 -Max 16
Write-Host ("PS " + $(Get-Location) +">") -NoNewLine `
-ForegroundColor $Color
return " "
}
保存 Prompt 函数
与任何函数一 Prompt
样,函数仅存在于当前会话中。 若要保存 Prompt
函数以供将来的会话使用,请将其添加到 PowerShell 配置文件。 有关配置文件的详细信息,请参阅 about_Profiles。