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.