FolioPierEstudos de TI

PowerShell e prompt de comando

Nota 17 de 20 · 6 min de leitura
Nesta página
  1. As janelas de comando
  2. Aspas, espaços e caracteres especiais
  3. A saída dos comandos
  4. O código de saída
  5. Os scripts
  6. A ajuda e o histórico

Muitas verificações do suporte são feitas por comandos, e o mesmo comando pode funcionar em uma janela e falhar em outra. O prompt de comando e o PowerShell são programas diferentes, com regras próprias para aspas, caminhos, saídas e permissões, e conhecer essas regras evita conclusões erradas sobre um teste.

As janelas de comando

O Windows oferece mais de um interpretador de comandos:

  • Prompt de comando: o programa cmd.exe, o interpretador tradicional, que executa os comandos clássicos e os arquivos .bat e .cmd;
  • Windows PowerShell: o programa powershell.exe, na versão 5.1, que acompanha o Windows e trabalha com objetos, e não só com texto;
  • PowerShell 7: o programa pwsh.exe, instalado à parte, que convive com o Windows PowerShell;
  • Terminal do Windows: a janela com abas que abre os interpretadores, padrão no Windows 11.

Os programas de linha de comando, como ping, ipconfig, netstat e tasklist, funcionam nas duas janelas. Os comandos internos de cada interpretador são diferentes. O dir e o copy funcionam no PowerShell como apelidos de outros comandos, com opções diferentes, e comandos como Get-Process só existem no PowerShell.

Um comando que altera o sistema exige a janela aberta pela opção Executar como administrador, e a palavra Administrador no título da janela confirma a elevação.

Aspas, espaços e caracteres especiais

Um caminho com espaços fica entre aspas nas duas janelas. No PowerShell, um programa indicado entre aspas é chamado com o operador &, e um programa da pasta atual precisa de .\ antes do nome:

  • & "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe" --version: executa o programa indicado entre aspas;
  • .\atualiza.exe: executa o programa da pasta atual.

No PowerShell, alguns caracteres têm função especial, como o cifrão, que indica uma variável, as chaves e o acento grave, que é o caractere de escape. Um texto com esses caracteres, como uma consulta SQL, fica entre aspas simples, que não interpretam o conteúdo.

Uma senha digitada em um comando fica no histórico da janela e, no PowerShell, em um arquivo de histórico do usuário. Por isso, os programas que pedem a senha depois de iniciados, como o cliente do MySQL com a opção -p sem a senha ao lado, são preferíveis aos comandos com a senha escrita.

A saída dos comandos

A saída de um comando pode ser gravada em arquivo ou passada para outro comando, com os mesmos operadores nas duas janelas:

  • comando > saida.txt: grava a saída em um arquivo, substituindo o conteúdo;
  • comando >> saida.txt: acrescenta a saída ao fim do arquivo;
  • comando 2> erros.txt: grava só as mensagens de erro;
  • comando > saida.txt 2>&1: grava a saída e os erros no mesmo arquivo;
  • comando | findstr texto: passa a saída para outro comando, que filtra as linhas com o texto.

No PowerShell, a saída é formada por objetos com propriedades, e os comandos Where-Object, Select-Object e Sort-Object filtram, escolhem e ordenam essas propriedades, como em Get-Service | Where-Object Status -eq 'Stopped', que lista os serviços parados.

O resultado de um comando pode ir direto para a área de transferência, com o programa clip, como em ipconfig /all | clip, ou com o comando Set-Clipboard, no PowerShell. O comando Start-Transcript -Path C:\Temp\sessao.txt grava em um arquivo tudo o que é digitado e exibido na janela do PowerShell, até o comando Stop-Transcript.

O código de saída

Todo programa termina com um código de saída, e o código zero indica sucesso. A variável %ERRORLEVEL%, no prompt de comando, e a variável $LASTEXITCODE, no PowerShell, mostram o código do último programa executado. As rotinas agendadas e os scripts usam esse código para decidir se uma etapa deu certo.

Os scripts

Os comandos podem ser gravados em arquivos e executados como rotinas:

  • Arquivo .bat ou .cmd: uma sequência de comandos do prompt, executada com um duplo clique ou pelo nome;
  • Arquivo .ps1: um script do PowerShell, que não é executado com um duplo clique e depende da política de execução.

A política de execução, mostrada pelo comando Get-ExecutionPolicy, impede os scripts nas versões do Windows para estações, em que o padrão é Restricted. A tentativa mostra a mensagem de que a execução de scripts foi desabilitada neste sistema. A política não é uma barreira de segurança, e sim uma proteção contra a execução acidental, e um script também é executado pelo programa powershell.exe com a opção -ExecutionPolicy Bypass. Um script baixado da internet carrega a marca de arquivo baixado, e a política RemoteSigned recusa esse script até que ele seja desbloqueado.

A ajuda e o histórico

Algumas teclas e comandos tornam o trabalho na janela mais rápido:

  • a tecla Tab completa os nomes de arquivos, de pastas e de comandos;
  • a seta para cima traz de volta os comandos anteriores;
  • ping /?: mostra a ajuda de um comando clássico, como o ping;
  • Get-Help Get-Service: mostra a ajuda de um comando do PowerShell;
  • Get-Command *Service*: lista os comandos do PowerShell com a palavra Service no nome.

No suporte

Diante de um comando que funciona em uma janela e falha em outra, convém conferir qual interpretador está aberto, se a janela está elevada e como as aspas e os caracteres especiais foram escritos. Para documentar um atendimento, a gravação da sessão ou a saída redirecionada para um arquivo preserva os comandos e os resultados, sem senhas escritas nos comandos.

Para guardar

  • O prompt de comando e o PowerShell são interpretadores diferentes, e os programas externos funcionam nos dois.
  • No PowerShell, um programa entre aspas é chamado com o operador &, e um programa da pasta atual, com .\ antes do nome.
  • Os operadores de redirecionamento gravam a saída em arquivo, e a barra vertical passa a saída para outro comando.
  • O código de saída zero indica sucesso, e as variáveis %ERRORLEVEL% e $LASTEXITCODE mostram o último código.
  • A política de execução impede os scripts do PowerShell nas estações, e as senhas escritas nos comandos ficam no histórico.
O comando dir /s *.log funciona no prompt de comando e falha no PowerShell. Por quê?

No PowerShell, dir é um apelido do comando Get-ChildItem, que não aceita a opção /s. O equivalente é Get-ChildItem -Recurse -Filter *.log, ou o mesmo comando no prompt de comando.

Um script .ps1 copiado para o servidor da loja abre no Bloco de Notas com um duplo clique e, pelo nome no PowerShell, mostra que a execução de scripts foi desabilitada. O que acontece?

O duplo clique abre os scripts do PowerShell no editor, por segurança, e a política de execução do computador impede os scripts. A execução pelo programa powershell.exe com a opção -ExecutionPolicy Bypass, ou a política definida pelo procedimento da empresa, permite o script.

Publicado a partir do Obsidian · FolioPier