Descobrir o PowerShell

O PowerShell é uma shell de linha de comandos e uma linguagem de scripting numa só. O PowerShell foi iniciado no Windows para ajudar a automatizar tarefas administrativas. Agora, executa várias plataformas e pode ser utilizada para várias tarefas.

O que torna o PowerShell exclusivo é que aceita e devolve objetos .NET, em vez de texto. Esta funcionalidade facilita a ligação de diferentes comandos num pipeline.

Para que pode utilizar o PowerShell?

A utilização do PowerShell tem crescido desde os dias em que era apenas para Windows. Ainda é utilizado para a automatização de tarefas do Windows, mas atualmente pode utilizá-lo para tarefas como:

  • Gestão da cloud. O PowerShell pode ser utilizado para gerir recursos da cloud. Por exemplo, pode obter informações sobre recursos da cloud, bem como atualizar ou implementar novos recursos.
  • CI/CD. Também pode ser utilizado como parte de um pipeline de Integração Contínua/Implementação Contínua.
  • Automatizar tarefas para o Active Directory e o Exchange. Pode utilizá-la para automatizar praticamente qualquer tarefa no Windows, como criar utilizadores no Active Directory e caixas de correio no Exchange.

Existem muitas mais áreas de utilização, mas a lista anterior dá-lhe uma sugestão de que o PowerShell percorreu um longo caminho.

Quem utiliza o PowerShell?

O PowerShell é uma ferramenta avançada que pode ajudar as pessoas a trabalhar em inúmeras funções. Tradicionalmente, o PowerShell tem sido utilizado pela função de Administrador de Sistema, mas está agora a ser utilizado por pessoas que se auto-intitulam DevOps, Cloud Ops e até Programadores.

Cmdlets do PowerShell

O PowerShell inclui centenas de comandos pré-instalados. Os comandos do PowerShell são denominados cmdlets ( command-lets pronunciados).

O nome de cada cmdlet consiste num par Verbo-Substantivo . Por exemplo, Get-Process. Esta convenção de nomenclatura facilita a compreensão do que o cmdlet faz. Também facilita a localização do comando que procura. Ao procurar um cmdlet para utilizar, pode filtrar no verbo ou substantivo.

Utilizar cmdlets para explorar o PowerShell

Quando apanhas o PowerShell pela primeira vez, pode parecer intimidante, pois parece haver tanto para aprender. O PowerShell foi concebido para o ajudar a aprender um pouco de cada vez, pois precisa dele.

O PowerShell inclui cmdlets que o ajudam a descobrir o PowerShell. Com estes três cmdlets, pode descobrir que comandos estão disponíveis, o que fazem e em que tipos funcionam.

  • Get-Verb. A execução deste comando devolve uma lista de verbos a que a maioria dos comandos cumpre. A resposta inclui uma descrição do que estes verbos fazem. Uma vez que a maioria dos comandos segue esta convenção de nomenclatura, define expectativas sobre o que um comando faz. Isto ajuda-o a selecionar o comando adequado e o nome de um comando, caso esteja a criar um.
  • Get-Command. Este comando obtém uma lista de todos os comandos instalados no seu computador.
  • Get-Member. Funciona na saída baseada em objetos e é capaz de descobrir que objetos, propriedades e métodos estão disponíveis para um comando.
  • Get-Help. Invocar este comando com o nome de um comando como argumento apresenta uma página de ajuda que descreve várias partes de um comando.

Com estes comandos, pode descobrir quase tudo o que precisa de 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 deverá seguir quando escrever os seus próprios comandos. A ideia é que o Verbo diga o que está a tentar 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, utilize o Get-Verb cmdlet :

Get-Verb

O cmdlet devolve uma longa lista de verbos. A Descrição fornece contexto para o que o verbo deve fazer. Eis 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 devolve uma lista de todos os comandos disponíveis instalados no seu sistema. A lista que obtém é bastante grande. Pode limitar a quantidade de informações que são apresentadas ao filtrar a resposta através de parâmetros ou cmdlets auxiliares.

Filtrar pelo nome

Pode filtrar o resultado da utilização de Get-Command parâmetros diferentes. A filtragem permite-lhe encontrar comandos com determinadas propriedades. O parâmetro Nome permite-lhe encontrar 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 quiser encontrar todos os comandos que funcionam com processos? Pode utilizar um caráter universal * para corresponder a outras formas da cadeia. 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

Filtrar no Substantivo e no Verbo

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

  • Filtrar no verbo. No comando Get-Process, a parte do verbo é Get. Para filtrar na parte do verbo, utilize o parâmetro Verbo .

    Get-Command -Verb 'Get'
    

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

  • Filtrar no substantivo. No comando Get-Process, a parte do substantivo é Process. Para filtrar no substantivo, utilize o parâmetro Noun . O exemplo seguinte devolve todos os cmdlets que têm substantivos a começar pela letra U.

    Get-Command -Noun U*
    

Além disso, pode combinar parâmetros para restringir a 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

Utilizar cmdlets auxiliares para filtrar resultados

Também pode utilizar outros cmdlets para filtrar resultados.

  • Select-Object. Este comando versátil ajuda-o a escolher propriedades específicas de um ou mais objetos. Também pode limitar o número de itens que recebe de volta. O exemplo seguinte devolve os valores das propriedades Nome e Origem 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-lhe filtrar os objetos devolvidos com base nos valores das propriedades. O comando utiliza uma expressão que pode testar o valor de uma propriedade. O exemplo seguinte devolve todos os processos em que começa ProcessName com p.

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

    O Get-Process cmdlet devolve uma coleção de objetos de processo. Para filtrar a resposta, encaminhe a saída para Where-Object. A tubagem significa que dois ou mais comandos estão ligados através de um caráter de pipe | . O resultado de um comando é enviado como a entrada para o comando seguinte. A expressão de filtro para Where-Object utiliza o -like operador para corresponder aos processos que começam com a letra p.

Explorar objetos com Get-Member

Assim que conseguir localizar o cmdlet pretendido, quer saber mais sobre o resultado que produz. O Get-Member cmdlet apresenta o tipo, propriedades e métodos de um objeto. Encaminhe o resultado que pretende inspecionar para Get-Member.

Get-Process | Get-Member

O resultado apresenta o tipo devolvido como TypeName e todas as propriedades e métodos do objeto. Eis um excerto de tal resultado:

TypeName: System.Diagnostics.Process

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

Com o parâmetro MemberType , pode limitar as informações devolvidas.

Get-Process | Get-Member -MemberType Method

Por predefinição, o PowerShell apresenta apenas algumas propriedades. O exemplo anterior apresentou os Namemembros e DefinitionMemberType . Pode utilizar Select-Object para especificar as propriedades que pretende ver. Por exemplo, quer apresentar apenas as Name propriedades e Definition :

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

Procurar por tipo de parâmetro

Get-Member mostrou-nos que Get-Processdevolve objetos do Tipo de processo. O parâmetro ParameterType de Get-Command pode ser utilizado para encontrar outros comandos que assumem 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…

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

Recursos adicionais