Descobrir o PowerShell

O PowerShell é um shell de linha de comando e uma linguagem de script integrados. O PowerShell foi lançado no Windows para ajudar a automatizar tarefas administrativas. Agora, ele roda em várias plataformas e pode ser usado para várias tarefas.

A característica que faz o PowerShell ser exclusivo é que ele aceita e retorna objetos .NET, em vez de um texto. Esse recurso facilita a conexão de diferentes comandos em um pipeline.

Para o que o PowerShell pode ser usado?

O uso do PowerShell aumentou desde a época em que ele era somente Windows. Ele é usado para automação de tarefas do Windows, mas hoje você também pode usá-lo para tarefas como:

  • Gerenciamento de nuvem. O PowerShell pode ser usado para gerenciar recursos da nuvem. Por exemplo, você pode recuperar informações sobre recursos da nuvem, bem como atualizar ou implantar novos recursos.
  • CI/CD. Ele também pode ser usado como parte de um pipeline de integração contínua/implantação contínua.
  • Automatizar tarefas para o Active Directory e o Exchange. Você pode usá-lo para automatizar quase todas as tarefas do Windows, como a criação de usuários no Active Directory e as caixas de correio no Exchange.

Há muitas outras áreas de uso, mas a lista anterior já indica que o PowerShell tem feito bastante sucesso.

Quem usa o PowerShell?

O PowerShell é uma ferramenta avançada que pode ajudar as pessoas que trabalham em várias funções. Tradicionalmente, o PowerShell vem sendo usado pela função Administrador do sistema, mas já está sendo usado por pessoas que se intitulam Engenheiros de DevOps e de nuvem e, até mesmo, desenvolvedores.

Cmdlets do PowerShell

O PowerShell é fornecido com centenas de comandos pré-instalados. Os comandos do PowerShell são chamados de cmdlets (pronuncia-se command-lets).

O nome de cada cmdlet consiste em um par de verbo-substantivo. Por exemplo, Get-Process. Essa convenção de nomenclatura facilita o entendimento da função do cmdlet. Também facilita a localização do comando procurado. Ao procurar um cmdlet para uso, você pode filtrar pelo verbo ou pelo substantivo.

Como usar cmdlets para explorar o PowerShell

Quando você usa o PowerShell pela primeira vez, ele pode parecer intimidador, pois parece muito difícil de aprender. O PowerShell foi projetado para ajudar você a aprender um pouco de cada vez, conforme a sua necessidade.

O PowerShell inclui cmdlets que ajudam você a descobri-lo. Usando esses três cmdlets, você pode descobrir quais comandos estão disponíveis, o que eles fazem e em quais tipos eles operam.

  • Get-Verb. A execução desse comando retorna uma lista de verbos seguidos pela maioria dos comandos. A resposta inclui uma descrição do que esses verbos fazem. Como a maioria dos comandos segue essa convenção de nomenclatura, ela define as expectativas sobre o que um comando faz. Isso ajuda você a selecionar o comando apropriado e como nomear um comando, caso esteja criando um.
  • Get-Command. Esse comando recupera uma lista de todos os comandos instalados no computador.
  • Get-Member. Ele opera na saída baseada em objeto e pode descobrir quais objetos, propriedades e métodos estão disponíveis para um comando.
  • Get-Help. A invocação desse comando com o nome de um comando como argumento exibe uma página de ajuda que descreve várias partes de um comando.

Usando esses comandos, você pode descobrir quase tudo do que precisa saber sobre o PowerShell.

Verbo

Verbo é um conceito importante no PowerShell. É um padrão de nomenclatura seguido pela maioria dos cmdlets. Também é um padrão de nomenclatura que você deve seguir depois de escrever comandos próprios. A ideia é que o verbo indique o que você está tentando fazer: ler dados ou talvez alterá-los. O PowerShell tem uma lista padronizada de verbos. Para obter uma lista completa de todos os verbos possíveis, use o cmdlet Get-Verb:

Get-Verb

O cmdlet retorna uma longa lista de verbos. A Descrição fornece contexto da funcionalidade do verbo. Veja aqui as primeiras linhas de saída:

Verb    AliasPrefix   Group     Description
----    -----------   -----     -----------
Add     a             Common    Adds a resource to a container, or attaches an item to another item
Clear   cl            Common    Removes all the resources from a container but does not delete the container
Close   cs            Common    Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy    cp            Common    Copies a resource to another name or to another container
Enter   et            Common    Specifies an action that allows the user to move into a resource
Exit    ex            Common    Sets the current environment or context to the most recently used context
...

Localizar comandos com Get-Command

O cmdlet Get-Command retorna uma lista de todos os comandos disponíveis instalados no sistema. A lista que você recebe de volta é bem grande. Você pode limitar a quantidade de informações retornadas filtrando a resposta com parâmetros ou cmdlets auxiliares.

Filtragem por nome

Você pode filtrar a saída de Get-Command usando diferentes parâmetros. A filtragem permite que você encontre comandos que tenham determinadas propriedades. O parâmetro Name permite que você encontre um comando específico por nome.

Get-Command -Name Get-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management

E se você quiser encontrar todos os comandos que funcionam com processos? Você pode usar um caractere curinga * que corresponda a outros formatos da cadeia de caracteres. Por exemplo:

Get-Command -Name *-Process
CommandType     Name              Version    Source
-----------     ----              -------    ------
Cmdlet          Debug-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Get-Process       7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Start-Process     7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Stop-Process      7.0.0.0    Microsoft.PowerShell.Management
Cmdlet          Wait-Process      7.0.0.0    Microsoft.PowerShell.Management

Filtragem por substantivo e verbo

Há outros parâmetros que filtram valores de verbo e substantivo. A parte do verbo do nome de um comando é a parte mais à esquerda. O verbo deve ser um dos valores retornados pelo cmdlet Get-Verb. A parte mais à direita de um comando é a parte do substantivo. Um substantivo pode ser qualquer coisa.

  • Filtragem por verbo. No comando Get-Process, a parte do verbo é Get. Para filtrar a parte do verbo, use o parâmetro Verb.

    Get-Command -Verb 'Get'
    

    Este exemplo lista todos os comandos que usam o verbo Get.

  • Filtragem por substantivo. No comando Get-Process, a parte do substantivo é Process. Para filtrar o substantivo, use o parâmetro Noun. O exemplo a seguir retorna todos os cmdlets contendo substantivos começando com a letra U.

    Get-Command -Noun U*
    

Você também pode combinar parâmetros para restringir sua pesquisa, por exemplo:

Get-Command -Verb Get -Noun U*
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Get-UICulture                7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Unique                   7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-Uptime                   7.0.0.0    Microsoft.PowerShell.Utility

Usar cmdlets auxiliares para filtrar os resultados

Também é possível usar outros cmdlets para filtrar os resultados.

  • Select-Object. Este comando versátil ajuda você a escolher propriedades específicas de um ou mais objetos. Você também pode limitar o número de itens que recebe de volta. O exemplo a seguir retorna os valores de propriedade Name e Source para os primeiros 5 comandos disponíveis na sessão atual.

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    Para obter mais informações, confira Select-Object.

  • Where-Object. Esse cmdlet permite filtrar os objetos retornados com base nos valores das propriedades. O comando usa uma expressão que pode testar o valor de uma propriedade. O exemplo a seguir retorna todos os processos em que ProcessName começa com p.

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    O cmdlet Get-Process retorna uma coleção de objetos de processo. Para filtrar a resposta, redirecione a saída para Where-Object. O uso de um pipe significa que dois ou mais comandos são conectados por meio de um caractere de barra vertical |. A saída de um comando é enviada como entrada para o próximo comando. A expressão de filtro de Where-Object usa o operador -like para corresponder aos processos que começam com a letra p.

Explorar objetos com Get-Member

Depois de localizar o cmdlet desejado, convém saber mais sobre a saída que ele produz. O cmdlet Get-Member exibe o tipo, propriedades e métodos de um objeto. Redirecione a saída que deseja inspecionar para Get-Member.

Get-Process | Get-Member

O resultado exibe o tipo retornado, como TypeName, e todas as propriedades e métodos do objeto. Veja um trecho desse resultado:

TypeName: System.Diagnostics.Process

Name        MemberType     Definition
----        ----------     ----------
Handles     AliasProperty  Handles = Handlecount
Name        AliasProperty  Name = ProcessName
...

Usando o parâmetro MemberType, você pode limitar as informações retornadas.

Get-Process | Get-Member -MemberType Method

Por padrão, o PowerShell exibe apenas algumas propriedades. O exemplo anterior exibia os membros Name, MemberType e Definition. Você pode usar Select-Object para especificar as propriedades que deseja ver. Por exemplo, você deseja exibir somente as propriedades Name e Definition:

Get-Process | Get-Member | Select-Object Name, Definition

Pesquisar por tipo do parâmetro

Get-Member mostrou que Get-Process retorna objetos de tipo de Processo. O parâmetro ParameterType de Get-Command pode ser usado para localizar outros comandos que recebem objetos de Processo como entrada.

Get-Command -ParameterType Process
CommandType     Name                         Version    Source
-----------     ----                         -------    ------
Cmdlet          Debug-Process                7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Enter-PSHostProcess          7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-Process                  7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Get-PSHostProcessInfo        7.1.0.0    Microsoft.PowerShell.Core
Cmdlet          Stop-Process                 7.0.0.0    Microsoft.PowerShell.Managem…
Cmdlet          Wait-Process                 7.0.0.0    Microsoft.PowerShell.Managem…

Saber o tipo de saída de um comando pode ajudar a restringir sua pesquisa por comandos relacionados.

Recursos adicionais