Ao fazer uso dos comandos PowerShell (PowerShell commands) certos, você con­se­guirá im­ple­men­tar e au­to­ma­ti­zar tarefas com muito mais rapidez e precisão. Chamados de cmdlets, eles também podem ser per­so­na­li­za­dos com a adoção de pa­râ­me­tros ope­ra­ci­o­nais. Este tutorial apresenta a você os 40 comandos PowerShell mais im­por­tan­tes, para ajudá-lo a otimizar o seu trabalho em ambientes Windows.

O que são PowerShell commands?

O PowerShell, ambiente de linha de comando e linguagem de script da Microsoft, vem pré-instalado em todas as versões mais novas do Windows (a partir do Windows 7). Ele pos­si­bi­lita a execução de tarefas ad­mi­nis­tra­ti­vas e o ge­ren­ci­a­mento de sistemas, por meio de comandos cmd. Es­pe­ci­fi­ca­mente no PowerShell, comandos são chamados de cmdlets. Estes, compostos por um verbo e por um subs­tan­tivo separados por hífen, só podem ser en­ten­di­dos por essa fer­ra­menta. A vantagem de cmdlets é que eles podem ser per­so­na­li­za­dos por pa­râ­me­tros ope­ra­ci­o­nais separados por espaços.

Em ambientes Windows, o PowerShell não é valioso somente para ad­mi­nis­tra­do­res de sistemas, mas também para de­sen­vol­ve­do­res. Ao apren­de­rem os comandos PowerShell mais im­por­tan­tes, estes pro­fis­si­o­nais eco­no­mi­zam tempo e aumentam a pro­du­ti­vi­dade.

Comandos PowerShell básicos

Como já explicado, comandos PowerShell permitem a re­a­li­za­ção de tarefas ad­mi­nis­tra­ti­vas com bem menos esforço. Dentre os PowerShell commands mais básicos e fre­quen­te­mente uti­li­za­dos estão aqueles capazes de apre­sen­tar panoramas sobre a estrutura da rede, de listar outros comandos, de auxiliar nas con­fi­gu­ra­ções de segurança es­sen­ci­ais e de pos­si­bi­li­tar a re­a­li­za­ção de análises. Apre­sen­ta­re­mos, abaixo, os comandos PowerShell que mais lhe ajudarão no dia a dia, e ex­pli­ca­re­mos cada um deles:

1. Get-Module -All

Para obter um panorama com todos os módulos PowerShell im­por­ta­dos, faça uso do comando Get-Module -All.

Get-Module -All
shell

2. Get-Command

Existem por aí algumas centenas de comandos PowerShell pre­de­fi­ni­dos. Para obter uma lista com todos eles, basta fazer uso do comando Get-Command. Ele apresenta, de forma ordenada, todas as possíveis ações, jun­ta­mente com breves ex­pli­ca­ções sobre cada cmdlet — comandos continuam válidos mesmo após a ins­ta­la­ção de módulos adi­ci­o­nais.

Get-Command
shell

3. Get-Help

O comando Get-Command, apre­sen­tado acima, fornece apenas in­for­ma­ções básicas sobre PowerShell commands. Se você procura por in­for­ma­ções mais de­ta­lha­das sobre um comando es­pe­cí­fico, assim como sobre suas opções, opte pelo cmdlet Get-Help. Ele acessa os arquivos de ajuda do seu com­pu­ta­dor e apresenta todas as in­for­ma­ções lá dis­po­ni­bi­li­za­das. Para executá-lo, combine Get-Help com o comando cuja sintaxe você deseja consultar.

Get-Help [[-Name] <String>] [-Path <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Role <String[]>] [-Examples] [<CommonParameters>]
shell

4. Get-Process

Para checar su­per­fi­ci­al­mente a sua lista de apli­ca­ções, programas e processos ativos no sistema, use o comando Get-Process. Ao es­pe­ci­fi­car uma aplicação, você receberá in­for­ma­ções adi­ci­o­nais a respeito dela.

Get-Process
shell

5. Get-Service

O comando Get-Service funciona de forma similar ao Get-Process. No entanto, ele apresenta in­for­ma­ções relativas a todos os serviços ativos. Se você procura mais in­for­ma­ções sobre um serviço ou categoria de serviços em par­ti­cu­lar, também é possível es­pe­ci­fi­car a so­li­ci­ta­ção.

Get-Service
shell

6. Stop-Process

Vários PowerShell commands têm o poder de in­ter­rom­per processos pelo ambiente de linha de comando. Um deles é o cmdlet Stop-Process. Defina o processo cor­res­pon­dente inserindo seu nome, ID ou outro atributo que o es­pe­ci­fi­que.

Stop-Process -Name "nome do processo"
shell

Observe o exemplo:

Stop-Process -Id 3582 -Confirm -PassThru
shell

Com -Confirm, a con­fir­ma­ção do comando será so­li­ci­tada. Já -PassThru so­li­ci­tará a con­fir­ma­ção do processo in­ter­rom­pido — isso não pode ser feito au­to­ma­ti­ca­mente.

7. ConvertTo-HTML

Para iden­ti­fi­car problemas ou po­ten­ci­ais com­pli­ca­ções com rapidez, é de extrema im­por­tân­cia que você leia e com­pre­enda códigos de forma clara. Para facilitar a vi­su­a­li­za­ção deles, faça uso do PowerShell command ConvertTo-HTML: ele trans­forma re­sul­ta­dos PowerShell em arquivos HTML, de com­pre­en­são mais intuitiva. A estrutura desse comando costuma ser a seguinte:

Get-Command | ConvertTo-Html > c:\temp\Comandos.html
shell

8. ConvertTo-Xml

Você pode proceder de forma se­me­lhante se quiser obter a re­pre­sen­ta­ção de um objeto es­pe­cí­fico em XML. Faça essa conversão com o comando ConvertTo-Xml. No exemplo abaixo, con­ver­te­mos a data atual para o formato XML:

Get-Date | ConvertTo-Xml
shell

9. Where-Object

Use o PoweShell command Where-Object para filtrar o resultado de um cmdlet. Ao executar um cmdlet, você poderá receber respostas contendo bem mais in­for­ma­ções que as es­tri­ta­mente ne­ces­sá­rias. Execute, em seguida, o Where-Object com um pipe, para que apenas as in­for­ma­ções que você procura sejam exibidas. Por exemplo, para ver os serviços criados ou atu­a­li­za­dos neste ano, você poderia executar o comando abaixo:

Get-Service | Where-Object { $_.LastWriteTime -gt "01.01.2024" }
shell

10. Get-History

Para listar todos os PowerShell commands que você executou durante uma sessão, use o cmdlet Get-History.

Get-History
shell

Já para listar apenas os últimos dez comandos PowerShell exe­cu­ta­dos, use a seguinte es­pe­ci­fi­ca­ção:

Get-History -Count 10
shell

11. Clear-History

Você também pode excluir a lista de PowerShell commands que utilizou. Para deletar todas as entradas de uma só vez, use o cmdlet Clear-History:

Clear-History
shell

Para excluir somente comandos PowerShell es­pe­cí­fi­cos, faça uso de pa­râ­me­tros que os iden­ti­fi­quem. No exemplo de código abaixo, de­ter­mi­na­mos a exclusão do registro de todos os comandos contendo a palavra “Help” e ter­mi­na­dos em “Syntax”.

Clear-History -Command *Help*, *Syntax
shell

12. Add-History

Também é possível vincular comandos PowerShell a sessões es­pe­cí­fi­cas, para que eles possam ser chamados a qualquer momento. O cmdlet certo para fazer isso é Add-History.

Add-History
shell

13. Out-File

Para salvar, no seu com­pu­ta­dor, os re­sul­ta­dos pro­du­zi­dos por comandos PowerShell por você uti­li­za­dos, use o cmdlet Out-File. Ele armazena PowerShell commands em um arquivo de texto bruto no local es­pe­ci­fi­cado.

Get-Process | Out-File -FilePath .\Processo.txt
shell

14. Copy-Item

O PowerShell também permite que elementos sejam copiados e salvos em di­fe­ren­tes locais. Basta usar o comando Copy-Item e es­pe­ci­fi­car o diretório em que a cópia deve ser salva.

Copy-Item "C:\pasta1\arquivo.txt" -Destination "C:\pasta2"
shell

15. Get-ChildItem

Use o cmdlet Get-ChildItem para buscar itens em um ou mais locais de ar­ma­ze­na­mento. Caso eles contenham su­be­le­men­tos, estes também serão exibidos. Por padrão, esse comando PowerShell lista os atributos, a data e a hora da última mo­di­fi­ca­ção, assim como o tamanho do arquivo e o nome dos su­be­le­men­tos. Por outro lado, se o local de ar­ma­ze­na­mento estiver vazio, o resultado será omitido.

Get-ChildItem -Path C:\exemplo
shell

Os atributos cor­res­pon­den­tes são exibidos abaixo da linha “Mode”. Suas pro­pri­e­da­des mais comuns são:

  • a (arquivo)
  • d (diretório)
  • h (oculto)
  • l (link)
  • r (somente leitura)
  • s (sistema)

16. Set-Authen­ti­co­de­Sig­na­ture

Para proteger seus arquivos, você pode equipá-los com uma as­si­na­tura Authen­ti­code. Para tanto, use o comando Set-Authen­ti­co­de­Sig­na­ture. Saiba, contudo, que ela só poderá ser adi­ci­o­nada a arquivos que oferecem suporte ao Subject Interface Package (SIP).

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
shell

17. Invoke-Item

Se você quer realizar uma ação padrão associada a um arquivo es­pe­cí­fico, o comando PowerShell Invoke-Item é o ideal. Ele assegura, por exemplo, a execução direta de um arquivo exe­cu­tá­vel (extensão .exe) ou a abertura de um documento na aplicação padrão. No nosso exemplo, o arquivo em questão será au­to­ma­ti­ca­mente aberto pelo Microsoft Word, aplicação padrão da extensão .doc:

Invoke-Item "C:\Teste\exemplo.doc"
shell

18. Start-Job

Para iniciar uma tarefa em segundo plano no seu com­pu­ta­dor local, você deve usar o comando Start-Job. Ele pos­si­bi­lita a execução de um comando es­pe­cí­fico em segundo plano sem que este interaja com a sessão atual.

Start-Job -ScriptBlock { Get-Process -Name pwsh }
shell
Dedicated Servers
Per­for­mance through in­no­va­tion

O encontro do hardware com a nuvem: servidor dedicado com nuvem integrada e cobrança por minuto, incluindo as­sis­tente pessoal!

  • Dedicated en­ter­prise hardware
  • Con­fi­gu­ra­ble hardware equipment
  • ISO-certified data centers

Comandos PowerShell para executar ações

Os comandos PowerShell até então apre­sen­ta­dos são voltados à exibição de di­fe­ren­tes tipos de panoramas. Contudo, um cmdlet também é capaz de executar uma ação e melhorar a efi­ci­ên­cia do seu sistema. Conheça, agora, PowerShell commands capazes de sim­pli­fi­car o seu fluxo de trabalho.

19. Clear-Content

Para apagar o conteúdo de um elemento, mas preservar o elemento em si, faça uso do cmdlet Clear-Content. Por exemplo, ele pode ser usado para limpar o texto de um documento, deixando o arquivo em si intacto. Execute-o com o seguinte código:

Clear-Content C:\Temp\exemplo.txt
shell

20. ForEach-Object

O comando ForEach-Object pos­si­bi­lita a re­a­li­za­ção de operações em todos os elementos de uma coleção de objetos de entrada. Neste exemplo, dividimos três inteiros de um array por 10:

10000, 1000, 100 | ForEach-Object -Process {$_/10}
1000
100
10
shell

21. Compare-Object

Para que você não precise comparar di­fe­ren­tes conjuntos de objetos ma­nu­al­mente, execute o PowerShell command Compare-Object. Ele gera um relatório que destaca di­fe­ren­ças entre registros: o primeiro registro serve como objeto de re­fe­rên­cia enquanto o segundo re­pre­senta o objeto de diferença. Es­pe­ci­fi­que os fatores a serem com­pa­ra­dos ou omita essa in­for­ma­ção para obter apenas re­sul­ta­dos de strings que serão com­pa­ra­dos. Re­sul­ta­dos são divididos em pro­pri­e­da­des que só aparecem no objeto de re­fe­rên­cia (<==) e em pro­pri­e­da­des que só estão presentes no objeto de diferença (==>). No exemplo a seguir, o Documento1.txt contém os valores Berlim, Londres e Paris. Já o Documento2.txt contém Berlim, Viena e Amsterdã.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Documento1.txt) -DifferenceObject (Get-Content -Path C:\Test\Documento2.txt)
InputObject	SideIndicator
---------------	-----------------
Viena		==>
Amsterdã	==>
Londres	<==
Paris		<==
shell

Por padrão, o conteúdo presente em ambos os do­cu­men­tos (nesse caso, “Berlim”) não é exibido.

22. New-Object

Um dos comandos PowerShell mais úteis é o New-Object. Ele pode ser usado para ins­tan­ciar um objeto do .NET Framework ou do Component Object Model (COM). Por exemplo, para criar um objeto System.Version com “1.2.3.4” como string cons­tru­tora, execute o comando a seguir:

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
shell

23. Select-Object

Use o comando Select-Object para se­le­ci­o­nar um objeto ou grupo de objetos que apresenta pro­pri­e­da­des definidas por você. Estes são os pa­râ­me­tros que podem ser es­pe­ci­fi­ca­dos:

  • First
  • Last
  • Unique
  • Skip
  • Index

No exemplo de código abaixo, usamos os comandos Get-Process e Sort-Object para que os três processos com o mais alto consumo de memória no momento da execução sejam exibidos.

Get-Process | Sort-Object -Property WS | Select-Object -Last 3
shell

24. Set-Alias

Assim como atalhos de teclado do Windows facilitam a execução de ações no sistema ope­ra­ci­o­nal, comandos PowerShell facilitam trabalhos neste mesmo ambiente. O cmdlet Set-Alias, por exemplo, pode ser usado para definir atalhos de comandos PowerShell. No próximo exemplo, ape­li­da­mos de “ci” o comando Get-ChildItem quando executado na sessão atual.

PS> Set-Alias -Name ci -Value Get-ChildItem
PS> Get-Alias -Name ci
shell

25. Set-Location

Para alterar o local da memória de trabalho, use o comando Set-Location. Entre as opções dis­po­ní­veis estão di­re­tó­rios, sub­di­re­tó­rios, locais de registro e caminhos do provedor. Abaixo, es­pe­ci­fi­ca­mos o disco C: como local de ar­ma­ze­na­mento.

PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>
shell

26. Set-Service

Você pode usar o cmdlet Set-Service para interagir com um serviço, iniciá-lo, in­ter­rompê-lo ou pausá-lo. Ele também permite a alteração de pro­pri­e­da­des desse mesmo serviço. A seguir, alteramos o nome de exibição de um serviço, de “Nova Estação de Trabalho” para “Antiga Estação de Trabalho”.

Set-Service -Name Nova Estação de Trabalho -DisplayName "Antiga Estação de Trabalho"
shell

27. Set-TimeZone

Para alterar o fuso horário do seu sistema, faça uso do PowerShell command Set-TimeZone. Para coordenar o tempo universal como novo horário do sistema, digite o seguinte:

Set-TimeZone -Id "UTC"
shell

28. Restart-Computer

Você consegue reiniciar o sistema ope­ra­ci­o­nal do seu com­pu­ta­dor local ou remoto por meio do PowerShell command Restart-Computer. Ele pode ser executado das seguintes formas:

No com­pu­ta­dor local:

Restart-Computer
shell

Em com­pu­ta­do­res es­pe­cí­fi­cos de uma rede:

Restart-Computer -ComputerName Servidor01, Servidor03
shell

29. Restart-Service

Para in­ter­rom­per e reiniciar um serviço, opte pelo cmdlet Restart-Service. Para reiniciar todos os serviços iniciados com “net”, por exemplo, proceda da seguinte forma:

PS C:\> Restart-Service -DisplayName "net*"
shell

30. Clear-Recy­cle­Bin

Esvazie a sua lixeira com re­gu­la­ri­dade. Com o PowerShell, você pode executar essa ação por meio do cmdlet Clear-Recy­cle­Bin.

Clear-RecycleBin
shell

31. Get-Com­pu­te­rInfo

O cmdlet Get-Com­pu­te­rInfo pode ser usado para consultar pro­pri­e­da­des do seu sistema ou sistema ope­ra­ci­o­nal.

Get-ComputerInfo
shell

32. Move-Item

Di­fe­ren­tes PowerShell commands têm a ca­pa­ci­dade de realocar um item, movendo-o de um local para outro. O mais popular deles é o Move-Item. No exemplo abaixo, movemos o arquivo “antigo.txt” do disco C: para o diretório D:\Temp. Ao mesmo tempo, re­no­me­a­mos o arquivo para “novo.txt”.

Move-Item -Path C:\antigo.txt -Destination D:\Temp\novo.txt
shell

Comandos PowerShell de mo­ni­to­ra­mento e depuração

Alguns PowerShell commands con­si­de­ra­dos es­pe­ci­al­mente in­te­res­san­tes pos­si­bi­li­tam o mo­ni­to­ra­mento e a ve­ri­fi­ca­ção do sistema. Estes são uteis em situações de teste de de­sem­pe­nho de rede sob condições realistas. A seguir, listamos os comandos PowerShell mais im­por­tan­tes que servem a essas fi­na­li­da­des.

33. Debug-Process

O processo de depuração (debugging) é im­por­tante, pois assegura que todas as con­fi­gu­ra­ções e processos rodem sem erros. Antes de executar o Debug-Process, contudo, você deverá baixar e con­fi­gu­rar os de­pu­ra­do­res certos. No próximo exemplo, depuramos o Explorer:

PS C:\> Debug-Process -Name "Explorer"
shell

Para depurar vários processos si­mul­ta­ne­a­mente, adicione-os, um a um, separando-os por vírgulas.

34. Enable-PS­Bre­ak­point

Para ativar de­ter­mi­na­dos pontos de in­ter­rup­ção (bre­ak­points), faça uso de Enable-PS­Bre­ak­point. Ele define o valor do cmdlet como “ver­da­deiro” (true) pelo prisma técnico. Execute esse PowerShell command para ativar todos os pontos de in­ter­rup­ção da sessão atual:

Get-PSBreakpoint | Enable-PSBreakpoint
shell

Abaixo, observe um exemplo desse cmdlet sendo usado para ativar pontos de in­ter­rup­ção por meio de IDs:

Enable-PSBreakpoint -ID 0, 3, 4
shell

35. Disable-PS­Bre­ak­point

Para desativar pontos de in­ter­rup­ção do PowerShell, o cmdlet certo é o Disable-PS­Bre­ak­point. Pelo mesmo prisma técnico, ele define o valor do comando Enable-PS­Bre­ak­point como “falso” (false). Para desativar um ponto de in­ter­rup­ção cujo ID é 0, você deve executar o seguinte comando:

Disable-PSBreakpoint -Id 0
shell

36. Get-Counter

Em ambientes Windows, é possível consultar dados de de­sem­pe­nho por meio do PowerShell. O comando que executa essa tarefa é o Get-Counter, que pode ser usado tanto no seu com­pu­ta­dor local quanto em com­pu­ta­do­res remotos. No exemplo a seguir, con­sul­ta­mos dados no com­pu­ta­dor local:

Get-Counter -ListSet *
shell

37. Start-Sleep

Pausar um script ou sessão pode ser de fun­da­men­tal im­por­tân­cia, es­pe­ci­al­mente quando o sistema enfrenta so­bre­car­gas. Para tanto, o PowerShell oferece o comando Start-Sleep: ele permite que você es­pe­ci­fi­que o tempo pelo qual suas ati­vi­da­des devem ser pausadas. No próximo exemplo, pausamos a execução por dois segundos:

Start-Sleep -Seconds 2
shell

38. Test-Path

Use o comando Test-Path para verificar se todos os elementos de um caminho es­pe­cí­fi­cos se encontram presentes. Os re­sul­ta­dos possíveis são “ver­da­deiro” (true) e “falso” (false).

Test-Path -Path "C:\Documents and Settings\user"
False
shell

39. Test-Con­nec­tion

Você também pode avaliar a co­nec­ti­vi­dade da sua rede com o PowerShell. Faça isso ao enviar pacotes “ICMP Echo Request” aos des­ti­na­tá­rios es­pe­ci­fi­ca­dos, por meio do cmdlet Test-Con­nec­tion — ele solicita respostas por meio do Internet Control Message Protocol (ICMP). No nosso exemplo, enviamos uma so­li­ci­ta­ção ao Servidor02 por meio do protocolo IPv6.

Test-Connection -TargetName Servidor02 -IPv6
shell

40. Get-WinEvent

Di­fe­ren­tes PowerShell commands pos­si­bi­li­tam a vi­su­a­li­za­ção de um ou mais registros de eventos. O cmdlet mais simples que atende esse propósito é o Get-WinEvent. Para consultar todos os registros do seu com­pu­ta­dor local, use o comando a seguir:

Get-WinEvent -ListLog *
shell
Ir para o menu principal