Descobrir o PowerShell

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

O que torna o PowerShell exclusivo é que ele aceita e retorna objetos .NET, em vez de texto. Esse recurso facilita a conexão de diferentes comandos em um pipeline.

Para que o PowerShell pode ser usado?

O uso do PowerShell tem crescido desde os dias em que era somente Windows. Ele ainda é usado para automação de tarefas do Windows, mas hoje, você pode usá-lo para tarefas como:

  • Gestão na nuvem. O PowerShell pode ser usado para gerenciar recursos de nuvem. Por exemplo, você pode recuperar informações sobre recursos de 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.
  • Automatize tarefas para o Ative Directory e o Exchange. Você pode usá-lo para automatizar praticamente qualquer tarefa no Windows, como a criação de usuários no Ative Directory e caixas de correio no Exchange.

Há muito mais áreas de uso, mas a lista anterior dá uma dica de que o PowerShell percorreu um longo caminho.

Quem usa o PowerShell?

O PowerShell é uma ferramenta poderosa que pode ajudar as pessoas que trabalham em uma infinidade de funções. Tradicionalmente, o PowerShell tem sido usado pela função de Administrador do Sistema, mas agora está sendo usado por pessoas que se autodenominam DevOps, Cloud Ops e até mesmo Desenvolvedores.

Cmdlets do PowerShell

O PowerShell vem 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 verbo-substantivo . Por exemplo, Get-Process. Essa convenção de nomenclatura facilita a compreensão do que o cmdlet faz. Também torna mais fácil encontrar o comando que procura. Ao procurar um cmdlet para usar, você pode filtrar o verbo ou substantivo.

Usando cmdlets para explorar o PowerShell

Quando você pega o PowerShell pela primeira vez, pode parecer intimidante, pois parece haver muito a aprender. O PowerShell foi projetado para ajudá-lo a aprender um pouco de cada vez, conforme necessário.

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

  • Get-Verb. A execução deste comando retorna uma lista de verbos aos quais a maioria dos comandos adere. A resposta inclui uma descrição do que esses verbos fazem. Como a maioria dos comandos segue essa convenção de nomenclatura, ela define expectativas sobre o que um comando faz. Isso ajuda você a selecionar o comando apropriado e o que nomear um comando, caso você esteja criando um.
  • Get-Command. Este comando recupera uma lista de todos os comandos instalados na sua máquina.
  • Get-Member. Ele opera na saída baseada em objeto e é capaz de descobrir qual objeto, propriedades e métodos estão disponíveis para um comando.
  • Get-Help. Invocar este comando com o nome de um comando como argumento exibe uma página de ajuda descrevendo várias partes de um comando.

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

Verbo

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

Get-Verb

O cmdlet retorna uma longa lista de verbos. A Descrição fornece contexto para o que o verbo deve fazer. Aqui estão 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 Get-Command cmdlet retorna uma lista de todos os comandos disponíveis instalados em seu sistema. A lista que você recebe de volta é bastante grande. Você pode limitar a quantidade de informações que retornam filtrando a resposta usando parâmetros ou cmdlets auxiliares.

Filtrar por nome

Você pode filtrar a saída usando Get-Command parâmetros diferentes. A filtragem permite que você encontre comandos que têm determinadas propriedades. O parâmetro Name permite que você encontre um comando específico pelo 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 curinga * para corresponder a outras formas 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 em substantivo e verbo

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

  • Filtrar 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.

  • Filtrar no substantivo. No comando Get-Process, a parte nominal é Process. Para filtrar o substantivo, use o parâmetro Noun . O exemplo a seguir retorna todos os cmdlets que têm substantivos começando com a letra U.

    Get-Command -Noun U*
    

Além disso, você 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 resultados

Você também pode usar outros cmdlets para filtrar resultados.

  • Select-Object. Este comando versátil ajuda-o a selecionar 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 das propriedades 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, consulte Select-Object.

  • Where-Object. Este 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 o ProcessName começa com p.

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

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

Explore objetos com Get-Member

Depois de conseguir localizar o cmdlet desejado, você deseja saber mais sobre a saída que ele produz. O Get-Member cmdlet exibe o tipo, as propriedades e os métodos de um objeto. Canalize a saída que você 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. Aqui está um trecho de tal 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 exibiu o Name, MemberType e Definition membros. Você pode usar Select-Object para especificar as propriedades que deseja ver. Por exemplo, você deseja exibir apenas as Name propriedades e Definition :

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

Pesquisa por tipo de parâmetro

Get-Member nos mostrou que Get-Process retorna objetos do tipo Process . O parâmetro ParameterType de Get-Command pode ser usado para localizar outros comandos que tomam objetos Process 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…

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

Recursos adicionais