10.23.2012

Introdução Linha de Comandos - Windows 2008

Pensa-se que os administradores de Windows apenas utilizam o ambiente gráfico. Em contraponto, um bom administrador de Linux raramente admitirá usar o GUI, não obstante a evolução notável que muitas ferramentas gráficas para Linux sofreram nos últimos anos (Refira-se que linha de comandos num sistema Linux é muito mais versátil, complexa e útil que a existente num sistema Windows). Esquecendo preconceitos, qualquer administrador de sistemas deverá pelo menos conhecer a linha de comandos não obstante a plataforma em que trabalha. Apresenta-se neste artigo uma introdução básica da linha de comandos tendo como pano de fundo o Windows 2008. Refira-se linha de comandos e não a  Windows PowerShell que é uma framework da Microsoft para execução de comandos, automatização de tarefas e possibilidade de usar extensivamente uma linguagem própria de scripting.

A linha de comandos encontra-se no Start menu no Windows 2008 por defeito. Caso não esteja poderá aceder-lhe fazendo Start >> digitar Cmd na Search Box >> Enter. Em alternativa Start >> All Programs >> Acessories >> Command Prompt

Se o logon no sistema for feito com a conta de administrador, a linha de comandos será executada em modo de administração. Caso o log on seja feito com outra conta, poderá aceder na mesma à linha de comandos mas com privilégios reduzidos. Para executar uma propmpt numa conta não administrativa com direitos de administração:
Botão direto do rato sobre da Command prompt >> Escolher “Run as administrator” e inserir credenciais.

Existem os seguintes atalhos básicos para o teclado

Cursor cima Evoca o último comando
Cursor baixo Evoca o próximo comando
Page Up Evoca o comando mais antigo digitado na sessão
Page Down Evoca o último comando digitado na sessão
Cursor esquerdo Move o cursor para trás um caracter
Cursor direito Move o cursor para a frente um caracter
CTRL+Cursor esquerdo Move o cursor para trás uma palavra
CTRL+Cursor direito Move o cursor para a frente uma palavra
Home Move o cursor para o ínicio da linha
End Move o cursor para o fim da linha
Esc Limpa a linha de comandos

O comando doskey guarda num buffer os últimos 50 comandos efetuados. Poderá usar o comando c:\doskey /history para ver os comandos, o comando c:\>doskey /listsize = 100 para alterar para 100 o número de comandos a guardar pelo buffer (Poderá alterar este parâmetro em modo gráfico com Botão direito na barra de título da linha de comandos >> Properties >> Buffer Size. Para ver mais opções para este comando ou qualquer outro, execute c:\doskey /? .

Uma função muito útil do comando doskey é a sua utilização para a criação de macros. Imaginemos que desejamos parar e iniciar um serviço muitas vezes, ou seja, executar os comandos sc stop netlogon e sc start logon. Podemos criar as macros com os comandos c:\>doskey stpnl = sc stop netlogon e c:\>doskey sttnl = sc start netlogon . Assim, cada vez que quisermos parar e iniciar o serviço bastará digitar c:\>stpnl e c:\>sttnl . Note-se que estas macros são armazenadas temporariamente, ou seja, quando fechar a prompt onde foram configuradas, desaparecem.

Pode copiar e colar texto da linha de comandos para o clipboard o comportamento difere se a opção Quik Edit Mode (Botão direito na barra de título da linha de comandos >> Properties >> Quik Edit Mode) está ativa. Caso esteja, basta selecionar o texto com o rato e digitar enter para o copiar. Se não estiver ativo, é necessário clicar com o botão direito do rato na linha de comandos>> Mark >> selecionar o texto com o rato e digitar enter para o copiar.

Os sistemas Windows não são case-sensitive como os sistemas Linux. Assim sendo os comandos RepAdmin /SyncAll  | Repadmin /syncall    | REPADMIN /SYNCALL são iguais. Para efeitos de legibilidade, na documentação os comandos quando contêm duas ou mais palavras costumam ter a primeira letra dessas palavras em maiúsculas.

Existem contudo algumas exceções. Nomeadamente quando se instalam ou adicionam serviços a um sistema Windows 2008 Server Core Edition é necessário respeitar maiúsculas e minúsculas. Por exemplo o comando c:\>start ocsetup dhcpservercore não funcionaria, sendo necessário executar c:\>start ocsetup DHCPServerCore para iniciar o processo de instalação do serviço de DHCP no servidor. A linha de comandos interpreta um espaço como a separação entre parâmetros.

Quando um parâmetro tem um ou mais espaços é necessário colocar aspas para o delimitar. Por exemplo, veja-se a sintaxe do comando que atribui um endereço IP a uma interface de rede: netsh interface ipv4 set address name = Name of NIC static ip address sub-net mask . Se o nome da interface de rede for Local area connection o comando a executar deverá ser:
C:\>netsh interface ipv4 set address name = "local area connection" static 192.168.1.15 255.255.255.0
Uma variável é um repositório com uma determinada informação.  As varáveis permitem aceder a essa informação e agilizar a construção dos comandos.
Se pretendermos ver a pasta de instalação do Windows:

C:\echo %systemroot%
C:\Windows

Variável Descrição
%programfiles% Caminho da pasta onde se encontram instalados os programas
%systemdrive% Caminho da diretoria root
%appdata% Caminho onde as aplicações instalam informação
%userdomain% Nome do domínio
%logonserver% Nome do controlador de domínio que validou a conta
%processor_architecture% Arquitetura do processador (32 ou 64 bits)
%allusersprofile% Localização do perfil da conta

Uma das grandes vantagens das variáveis é poderem ser utilizadas na construção de comandos. Por exemplo, para editarmos o ficheiro windowsupdate.log podemos executar o comando c:\notepad %systemroot%\windowsupdate.log
Podemos criar variáveis com o comando: [set variable-name = value] . Por exemplo C:\>set var1 = test , atríbui a string test à variável com o nome var1.
Podem-se modificar um comando com a adição de um switch. Um switch é precedido por um espaço e um traço “-“ ou barra “/” .  Por exemplo, para limpar a tabela de cache de DNS podemos usar os comandos c:\ipconfig /flushdns ou c:\ipconfig –flushdns . Curiosamente o comondo ipconfig/flushdns , sem espaço, funcionaria. Como tal não sucede em muitos comandos, aconselha-se a utilizar sempre espaços.

O comando dir lista diretorias. Para afinarmos uma pesquisa podemos usar wildcards que representam um ou mais caracteres.  Existem dois disponíveis na linha de comandos: o asterisco “*” que se refere a nenhum ou mais caracteres e o ponto de interrogação “? ” que apenas se refere a um único caractere. Vejam-se os exemplos:

Wildcard Descrição
C:\dir *.txt Lista todos os ficheiros com extensão txt
C:\>dir a* Lista todos os ficheiros que comecem com um a
C:\>dir a*.txt Lista todos os ficheiros que comecem com um a e tenham extensão txt
C:\>dir week?.txt Lista todos os ficheiros que comecem com week e tenham apenas mais um carater, com extensão txt

Para listar, na linha de comandos, quase todos os comandos disponíveis e uma breve descrição de cada um (alguns comandos avançados para funções muito específicas não surgem na listagem), basta executar o comando help.
Para obter informação mais detalhada sobre um comando em particular, usar o switch /? . Por exemplo, o comando ipconfig /? vai mostrar as opções disponíveis e um sucinta explicação de cada uma delas. Existe também a possibilidade de obter informação com a palavra help antecedida do comando Exemplo: c:\help dir . Contudo, para muitos comandos essa opção não devolve nenhum resultado. Assim sendo a opção /? é a mais aconselhável.
Convém perceber a notação utilizada para pode usufruir da informação devolvida pelos comandos help. Veja-se o quadro seguinte:

Notação Descrição Exemplo
Texto sem parêntesis ou chavetas. Itens que devem ser digitados tal como surgem ipconfig
[Texto com parêntesis retos] Itens opcionais echo[mensagem]. O comando echo mostra se a função está ou não ativa no sistema. O comando  echo %programfiles% devolve o conteúdo da variável
{Texto com chavetas} Escolher um dos itens requeridos gpupdate [/target:{computer | user}] . Se usar o switch /target deve fornecer o nome do computador ou do utilizador
| Barra vertical Exclusão mútua gpresult [/s system [/u username [/p [password]]]] [/scope scope] [/user targetusername] [/r | /v | /z] [(/x | /h) <filename> [/f]]   Se usar as opções /r ou /v não pode usar a opção /z
Itens que podem ser repetidos [winrm operation resource_uri [-switch:value[-switch:value] ...] [@{key=value[;key=value]...}]  Os pontos indicam que podem ser inseridos múltiplos parêmtros na mesma linha.

A linha de comandos mostra a atual localização. No caso de ter sido executada por um administrador, o caminho apresentado será c:\Windows\system32> .  Para editar um ficheiro noutra localização poderá simplesmente executar o comando c:\windows\system32>notepad c:\temp\meuficheiro.txt . Obviamente se o ficheiro se encontrar no mesmo sítio (caminho atual referenciado pela linha de comandos) não é necessário fornecer a localização .
Depreende-se que não foi necessário fornecer a localização do programa notepad para editar o ficheiro. Tal sucede porque o Windows sabe o caminho para o programa. O Windows server 2008 R2 tem na sua variável path os caminhos para c:\windows , c:\windows\system32 , c:\windows\system32\wbem e da powershell c:\windows\system32\windowspowershell\v1.0 se esta for instalada. Pode ver a path com os comandos c:\echo %path% e c:\>path .

Pode manipular a path com o comando c:\>path = c:\mypath que atribui para a atual sessão da linha de comandos a pasta c:\mypath , sendo que quando a sessão for encerrada cessa a atribuição. O comando c:\>path =  %path%;c:\mypath adiciona o novo caminho aos constantes na variável path. Quando encerrada a sessão, cessa a atribuição.

Vejamos uma lista simples de comandos:

  • dir texto*.* /s : Procura ficheiros que comecem com "texto". O switch /s faz com que a pesquisa seja feitas em todas as subdiretorias.
  • cd temp/fotos: Muda para a pasta especificada
  • cd .. : Move uma pasta para cima. Notar que tem um espaço entre cd e ..
  • cd \ : Move para a raiz da drive onde se encontra
  • md pasta1: Cria uma pasta com o nome pasta1
  • rd pasta1: Elimina a pasta mas sse estiver vazia
  • rd pasta /s /q: Elimina a pasta e todos os ficheiros e sub-diretorias (switch /s) sem pedido de confirmação (switch /q).

Refira-se pela sua importância os comandos de direcionamento de output > e >> com dois exemplos:

  • > : gpresult /z > grouppolicies.txt cria o ficheiro grouppolicies.txt adicionando-lhe o output do comando gpresult /z. Se o ficheiro já existir escreve por cima do mesmo.
  • >> : gpresult /z >> grouppolicies.txt adiciona o output do comando gpresult /z ao ficheiro não escrevendo por cima.