about_Prompts
Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
about_Prompts
Descreve a função de aviso e demonstra como criar uma função personalizada de aviso.
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.
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 >
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 é 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.
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>>>
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.
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 " "
}
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.
Get-Location
Enter-PSSession
Get-History
Get-Random
Write-Host
about_Profiles
about_Functions
about_Scopes
about_Debuggers
about_Automatic_Variables