当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于提示

作者:精品下载站 日期:2024-12-14 02:20:25 浏览:15 分类:玩电脑

关于提示


简短描述

描述 Prompt 函数并演示如何创建自定义 Prompt 函数。

详细描述

PowerShell 命令提示符表明 PowerShell 已准备好运行命令:

PS C:\>

PowerShell 有一个内置的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

要获取设置提示值的脚本,请使用点方法获取 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 {
  "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
  # .Link
  # https://go.microsoft.com/fwlink/?LinkID=225750
  # .ExternalHelp System.Management.Automation.dll-help.xml
}

该函数使用 Test-Path cmdlet 来测试 $PSDebugContext 自动变量是否具有值。如果 $PSDebugContext 有值,则您正在调试模式下运行,并且 [DBG]: 将添加到提示符中,如下所示:

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

如果未填充 $PSDebugContext,该函数会将 PS 添加到提示中。并且,该函数使用 Get-Location cmdlet 来获取当前文件系统目录位置。然后,它添加一个右尖括号 (>)。

例如:

PS C:\ps-test>

如果您处于嵌套提示中,该函数会向提示添加两个尖括号 (>>)。如果 $NestedPromptLevel 自动变量的值大于 0,则您处于嵌套提示中。

例如,当您在嵌套提示中进行调试时,提示类似于以下提示:

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

提示的更改

Enter-PSSession cmdlet 将远程计算机的名称添加到当前 Prompt 函数之前。当您使用 Enter-PSSession cmdlet 启动与远程计算机的会话时,命令提示符将更改为包含远程计算机的名称。例如:

PS Hello, World> Enter-PSSession Server01
[Server01]: PS Hello, World>

其他 PowerShell 主机应用程序和备用 shell 可能有自己的自定义命令提示符。

有关 $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 函数在提升的会话中运行时将 [ADMIN]: 添加到内置 PowerShell 提示符。

function prompt {
  $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
  $principal = [Security.Principal.WindowsPrincipal] $identity
  $adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator

  $(if (Test-Path variable:/PSDebugContext) { '[DBG]: ' }
    elseif($principal.IsInRole($adminRole)) { "[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-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。

参见

  • about_Automatic_Variables
  • about_调试器
  • about_函数
  • about_个人资料
  • about_范围
  • Get-History
  • Write-Host
  • Get-Location
  • 输入-PSSession
  • Get-Random

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯