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 letraU
.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çaProcessName
comp
.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 paraWhere-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 paraWhere-Object
utiliza o-like
operador para corresponder aos processos que começam com a letrap
.
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 Name
membros e Definition
MemberType
. 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-Process
devolve 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.