Aprender os nomes de comandos e os seus parâmetros é um investimento de tempo significativo na maioria das interfaces de linha de comando. O problema é que há poucos padrões, portanto a única maneira de aprender é decorando os comandos e os parâmetros que são usados com mais frequência.
Quando você trabalha com um novo comando ou parâmetro, geralmente não pode usar o que já sabe; precisa localizar e aprender um novo nome. Se você observar como as interfaces aumentam a partir de um conjunto pequeno de ferramentas com adições incrementais à funcionalidade, será fácil compreender por que a estrutura não é padrão. Em relação aos nomes de comandos particularmente, isso pode soar lógico, uma vez que cada comando é uma ferramenta separada, mas há uma maneira melhor de lidar com os nomes de comandos.
A maioria dos comandos foi criada para gerenciar elementos do sistema operacional ou dos aplicativos, como serviços e processos. Os comandos possuem uma variedade de nomes que podem ou não pertencer a uma família. Por exemplo, em sistemas Windows, você pode usar os comandos net start e net stop para iniciar e interromper um serviço. Há outra ferramenta de controle de serviço mais geral para Windows com um nome completamente diferente, sc, que não se enquadra no padrão de nomenclatura dos comandos de serviço net. No gerenciamento de processos, o Windows possui o comando tasklist para listar processos e o comando taskkill para interrompê-los.
Os comandos que aceitam parâmetros possuem especificações irregulares de parâmetros. Você não pode usar o comando net start para iniciar um serviço em um computador remoto. O comando sc iniciará um serviço em um computador remoto, mas para especificar esse computador, você deve colocar duas barras invertidas antes do seu nome. Por exemplo, para iniciar o serviço de spooler de impressão em um computador remoto chamado CD01, você deve digitar sc \\DC01 start spooler. Para listar as tarefas em execução no computador CD01, use o parâmetro /S (de "sistema") e forneça o nome CD01 sem as barras invertidas, desta forma: tasklist /S DC01.
Embora haja importantes diferenças técnicas entre um serviço e um processo, ambos são exemplos de elementos gerenciáveis em um computador que possuem um ciclo de vida bem definido. Talvez você queira iniciar ou parar um serviço ou processo, ou obter uma lista de todos os serviços ou processos em execução. Em outras palavras, embora um serviço e um processo sejam coisas diferentes, as ações que executamos em ambos são quase sempre conceitualmente iguais. Além disso, as opções que podemos escolher para personalizarmos uma ação ao especificarmos parâmetros também podem ser conceitualmente similares.
O Windows PowerShell explora essas similaridades para reduzir o número de nomes diferentes que você deve conhecer para entender e utilizar os cmdlets.
Os cmdlets usam nomes verbo-substantivo para reduzir a memorização de comandos
O Windows PowerShell usa um sistema de nomenclatura "verbo-substantivo", onde os nomes dos cmdlets consistem em um verbo padrão, um hífen e um substantivo específico. Os verbos do Windows PowerShell nem sempre são verbos em inglês, mas expressam ações específicas. Os substantivos são muito parecidos aos de qualquer idioma, uma vez que descrevem tipos específicos de objetos importantes na administração do sistema. É fácil demonstrar como esses nomes bipartidos reduzem o esforço de aprendizado ao examinarmos alguns exemplos de verbos e substantivos.
Os substantivos são menos restritos, mas sempre devem descrever o objeto do comando. O Windows PowerShell tem comandos como Get-Process, Stop-Process, Get-Service e Stop-Service.
No caso de dois substantivos e dois verbos, a consistência não simplifica o aprendizado tanto assim. Entretanto, se você examinar um conjunto padrão de 10 verbos e 10 substantivos, terá então apenas 20 palavras para entender, mas essas palavras poderão ser usadas na formação de 100 nomes de comandos diferentes.
Com frequência você poderá reconhecer a função de um comando ao ler seu nome, e normalmente será evidente que nome deverá ser usado em um novo comando. Por exemplo, um comando para desligar o computador poderia ser Stop-Computer. Um comando que lista todos os computadores de uma rede poderia ser Get-Computer. O comando que obtém a data do sistema é Get-Date.
Você pode listar todos os comandos que incluem um verbo com o parâmetro -Verb de Get-Command (abordaremos Get-Command em detalhes na próxima seção). Por exemplo, para exibir todos os cmdlets que utilizam o verbo Get, digite:
PS> Get-Command -Verb Get CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Acl Get-Acl [[-Path] <String[]>]... Cmdlet Get-Alias Get-Alias [[-Name] <String[]... Cmdlet Get-AuthenticodeSignature Get-AuthenticodeSignature [-... Cmdlet Get-ChildItem Get-ChildItem [[-Path] <Stri... ...
O parâmetro -Noun é ainda mais útil, já que permite que você veja uma família de comandos que afeta o mesmo tipo de objeto. Por exemplo, se você quiser exibir os comandos que estão disponíveis para o gerenciamento de serviços, digite o comando a seguir:
PS> Get-Command -Noun Service CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Service Get-Service [[-Name] <String... Cmdlet New-Service New-Service [-Name] <String>... Cmdlet Restart-Service Restart-Service [-Name] <Str... Cmdlet Resume-Service Resume-Service [-Name] <Stri... Cmdlet Set-Service Set-Service [-Name] <String>... Cmdlet Start-Service Start-Service [-Name] <Strin... Cmdlet Stop-Service Stop-Service [-Name] <String... Cmdlet Suspend-Service Suspend-Service [-Name] <Str... ...
Um comando não é necessariamente um cmdlet, simplesmente porque possui um esquema de nomenclatura verbo-substantivo. Um exemplo de comando nativo do Windows PowerShell que não é um cmdlet, mas que possui um nome verbo-substantivo, é o comando para limpar uma janela do console, Clear-Host. O comando Clear-Host é, na verdade, uma função interna, como você poderá observar se executar Get-Command nele:
PS> Get-Command -Name Clear-Host CommandType Name Definition ----------- ---- ---------- Function Clear-Host $spaceType = [System.Managem...
Os cmdlets usam parâmetros padrão
Como observado anteriormente, os comandos utilizados nas interfaces de linha de comando tradicionais geralmente não possuem nomes de parâmetro consistentes. Em algumas ocasiões, os parâmetros nem chegam a ter nomes. Quando têm, quase sempre são compostos por um único caractere ou por palavras abreviadas que podem ser rapidamente digitadas mas nem sempre facilmente compreendidas por usuários novatos.
Ao contrário da maioria das outras interfaces de linha de comando, o Windows PowerShell processa os parâmetros de forma direta e utiliza esse acesso direto aos parâmetros juntamente com a orientação do desenvolvedor para padronizar os nomes de parâmetro. Embora isso não garanta que todos os cmdlets sempre obedeçam aos padrões, certamente encoraja essa prática.
Observação: | |
Sempre haverá um '-' antes dos nomes dos parâmetros em sua utilização para permitir que o Windows PowerShell os identifique com clareza como parâmetros. No exemplo Get-Command -Name Clear-Host, o nome do parâmetro é Name, mas é digitado como -Name. |
A seguir, algumas das características gerais dos nomes de parâmetro padrão e a sua utilização.
O parâmetro Help (?)
Quando você especifica o parâmetro -? em qualquer cmdlet, esse cmdlet não é executado. Em vez disso, o Windows PowerShell exibirá a ajuda do cmdlet.
Parâmetros comuns
O Windows PowerShell possui vários parâmetros, conhecidos como parâmetros comuns. Como esses parâmetros são controlados pelo mecanismo do Windows PowerShell, sempre que forem implementados por um cmdlet, eles apresentarão sempre o mesmo comportamento. Os parâmetros comuns são WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable e OutBuffer.
Parâmetros sugeridos
Os cmdlets de núcleo do Windows PowerShell utilizam nomes padrão para parâmetros similares. Embora o uso de nomes de parâmetro não seja obrigatório, há uma orientação explícita de uso para favorecer a padronização.
Por exemplo, a orientação recomenda a nomeação de um parâmetro que se refira a um computador por nome, como ComputerName, em vez de Server, Host, System, Node ou outras palavras alternativas comuns. Entre os nomes de parâmetro importantes sugeridos, podemos citar Force, Exclude, Include, PassThru, Path e CaseSensitive.