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