about_Prompts

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0

TÓPICO

about_Prompts

DESCRIÇÃO BREVE

Descreve a função de aviso e demonstra como criar uma função personalizada de aviso.

DESCRIÇÃO LONGA

O Windows PowerShell prompt de comando indica que Windows PowerShell está pronto para executar um comando:

        PS C:\>

O Windows PowerShell prompt é determinado pela função de aviso interna. Você pode personalizar o prompt criando sua própria função de aviso e salvá-la em seu Windows PowerShell perfil.

SOBRE A FUNÇÃO DE AVISO

A função de aviso determina a aparência do Windows PowerShell prompt. Windows PowerShell vem com uma função de aviso interna, mas você pode substituí-la definindo sua própria função de aviso.

A função de aviso tem a seguinte sintaxe:

        function Prompt { <function-body> }

A função de aviso deve retornar um objeto. Como prática recomendada, retorna uma cadeia de caracteres ou um objeto que é formatado como uma cadeia de caracteres. O valor máximo recomendado é de 80 caracteres.

Por exemplo, a função de aviso a seguir retorna uma cadeia de caracteres "Hello, World" seguida por um circunflexo (>).

        PS C:\> function prompt {"Hello, World > "}
        Hello, World > 

COMO OBTER A FUNÇÃO DE AVISO

Para obter a função de aviso, use o cmdlet Get-Command ou use o cmdlet Get-Item na unidade da função.

As funções são comandos. Portanto, você pode usar o cmdlet Get-Command para obter funções, incluindo a função de aviso.

Por exemplo:

        PS C:\>Get-Command Prompt

        CommandType     Name                                               ModuleName
        -----------     ----                                               ----------
        Function        prompt
        

Para obter o script que define o valor do prompt, use o método de ponto para obter a propriedade ScriptBlock da função de aviso.

Por exemplo:

        PS C:\>(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

Como todas as funções, a função de aviso é armazenada na unidade da função. Para exibir o script que cria a função de aviso atual, digite:

        (Get-Item function:prompt).ScriptBlock

O AVISO PADRÃO

O aviso padrão é exibido somente quando a função de aviso gera um erro ou não retorna um objeto.

O aviso Windows PowerShell padrão é:

        PS>

Por exemplo, o comando a seguir define a função de aviso para $null, que é inválido. Como resultado, o aviso padrão é exibido.

        PS C:\> function prompt {$null}
        PS>

Como Windows PowerShell vem com um prompt interno, você geralmente não vê o aviso padrão.

PROMPT INTERNO

Windows PowerShell inclui uma função de aviso interna.

Em Windows PowerShell 3.0, a função de aviso interna é:

        function prompt
        {
            "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
        }

Esse prompt simplificado começa com "PS" seguido do local atual e um ">" para cada nível aninhado do prompt.

Em Windows PowerShell 2.0, a função de aviso interna é:

        function prompt
        {
            $(if (test-path variable:/PSDebugContext) { '[DBG]: ' } 
            else { '' }) + 'PS ' + $(Get-Location) `
            + $(if ($nestedpromptlevel -ge 1) { '>>' }) + '> '
        } 

A função usa o cmdlet Test-Path para determinar se a variável automática $PSDebugContext está preenchida. Se $PSDebugContext estiver preenchida, você estará no modo de depuração e "[DBG]" será adicionado ao prompt, da seguinte maneira:

        [DBG] PS C:\ps-test>

Se $PSDebugContext não estiver preenchida, a função adicionará "PS" ao prompt. E a função usa o cmdlet Get-Location para obter o local atual do diretório do sistema de arquivos Em seguida, ele adiciona um colchete angular direito (>).

    For example:        
        PS C:\ps-test>

Se você estiver em um prompt aninhado, a função adiciona dois colchetes angulares (>>) no prompt. (Você estará em um prompt aninhado se o valor da variável $NestedPromptLevel automático for maior que 1.)

Por exemplo, quando você estiver depurando em um prompt aninhado, o prompt será parecido com o seguinte prompt:

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

ALTERAÇÕES NO PROMPT

O cmdlet Enter-PSSession precede o nome do computador remoto para a função de aviso atual. Quando você usa o cmdlet Enter-PSSession para iniciar uma sessão com um computador remoto, o prompt de comando será alterado para incluir o nome do computador remoto. Por exemplo:

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

Outros Windows PowerShell aplicativos host e shells alternativos podem ter seus próprios prompts de comando personalizados.

Para obter mais informações sobre as variáveis automáticas $PSDebugContext e $NestedPromptLevel, consulte about_Automatic_Variables.

COMO PERSONALIZAR O PROMPT

Para personalizar o prompt, escreva uma nova função de aviso. A função não é protegida, portanto você poderá substituí-la.

Para escrever uma função de aviso, digite o seguinte:

        function prompt { }

Em seguida, entre as chaves, digite os comandos ou a cadeia de caracteres que cria o seu prompt.

Por exemplo, o seguinte prompt inclui o nome do seu computador:

        function prompt {"PS [$env:COMPUTERNAME]> "}

No computador Server01, o prompt se parece com o seguinte prompt:

        PS [Server01] >

A seguinte função de aviso inclui a data e hora atuais:

        function prompt {"$(get-date)> "}

O prompt será semelhante ao prompt a seguir:

        03/15/2012 17:49:47>

Você também pode alterar a função de aviso padrão:

Por exemplo, a função de aviso a seguir, modificada, adiciona "[ADMIN]:" ao Windows PowerShell prompt interno Windows PowerShell quando este é aberto usando a opção "Executar como administrador":

        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) { '>>' }) + '> '
        }

Quando você inicia Windows PowerShell usando a opção "Executar como administrador", será exibido um prompt que se parecerá com o seguinte prompt:

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

A seguinte função de aviso exibe a ID do histórico do próximo comando. Para exibir o histórico de comandos, use o cmdlet Get-History.

          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 >"
          }

O prompt a seguir usa os cmdlets Write-Host e Get-Random para criar um prompt que muda de cor aleatoriamente. Como o Write-Host grava o aplicativo host atual mas não retorna um objeto, essa função inclui uma instrução Return. Sem ela, Windows PowerShell ele usa o prompt padrão, "PS>".

        function prompt
        {
            $color = Get-Random -Min 1 -Max 16
            Write-Host ("PS " + $(Get-Location) +">") -NoNewLine -ForegroundColor $Color
            return " "
        }

SALVANDO A FUNÇÃO DE AVISO

Como qualquer função, a função de aviso existe apenas na sessão atual. Para salvar a função de aviso para sessões futuras, adicione-a aos seus Windows PowerShell perfis. Para obter mais informações sobre perfis, consulte about_Profiles.

CONSULTE TAMBÉM

Get-Location

Enter-PSSession

Get-History

Get-Random

Write-Host

about_Profiles

about_Functions

about_Scopes

about_Debuggers

about_Automatic_Variables