Os comandos do PowerShell são es­sen­ci­ais para uma uti­li­za­ção eficaz do shell. Estes cmdlets estão es­tru­tu­ra­dos de forma lógica e podem ser per­so­na­li­za­dos com pa­râ­me­tros adi­ci­o­nais. Neste guia, apre­sen­ta­mos-lhe os 40 comandos mais im­por­tan­tes do PowerShell para que possa trabalhar da melhor forma no seu sistema ou rede.

O que são os comandos do PowerShell?

O PowerShell, que vem pré-instalado nos sistemas Windows 7 e versões pos­te­ri­o­res, permite in­tro­du­zir comandos de PowerShell para serem exe­cu­ta­dos pelo sistema. Ao contrário dos comandos cmd na linha de comandos, o PowerShell dispõe do seu próprio conjunto de cmdlets, que são compostos por um verbo e um subs­tan­tivo separados por um hífen. Além disso, os comandos do PowerShell podem ser mais de­ta­lha­dos uti­li­zando pa­râ­me­tros opcionais, separados por um espaço. Atu­al­mente, não são apenas os ad­mi­nis­tra­do­res que utilizam o PowerShell, uma vez que a fer­ra­menta oferece serviços muito valiosos para a área do de­sen­vol­vi­mento. Embora existam centenas de comandos do PowerShell pré-ins­ta­la­dos, apre­sen­ta­mos aqui os mais im­por­tan­tes.

Os comandos mais im­por­tan­tes do PowerShell

Os comandos do PowerShell permitem-lhe realizar tarefas de ad­mi­nis­tra­ção complexas com apenas algumas entradas. A seguir, apre­sen­ta­mos os cmdlets que lhe serão mais úteis. Os comandos que vamos mostrar-lhe fornecem uma visão geral da estrutura completa de uma rede, listam outros comandos do PowerShell, ajudam nas con­fi­gu­ra­ções de segurança ne­ces­sá­rias e geram análises úteis. Aqui estão alguns dos comandos mais im­por­tan­tes do PowerShell:

1. Get-Module -All

Utilize o comando Get-Module -All para obter uma visão geral completa de todos os módulos do PowerShell que foram im­por­ta­dos para o seu sistema.

Get-Module -All
shell

2. Get-Command

O comando Get-Command fornece uma lista completa de todos os comandos pre­de­fi­ni­dos do PowerShell dis­po­ní­veis. Utilize o Get-Command para obter uma lista de todas as ações possíveis, apre­sen­ta­das de forma or­ga­ni­zada e acom­pa­nha­das de uma breve ex­pli­ca­ção de cada cmdlet. Isto aplica-se tanto aos comandos pre­de­fi­ni­dos como aos que possam estar dis­po­ní­veis após a ins­ta­la­ção de módulos adi­ci­o­nais.

Get-Command
shell

3. Get-Help

A lista apre­sen­tada pelo comando Get-Command oferece-lhe uma visão geral, mas o cmdlet Get-Help fornece-lhe in­for­ma­ções mais de­ta­lha­das sobre um comando es­pe­cí­fico e as suas opções. O Get-Help acede aos ficheiros de ajuda presentes no seu com­pu­ta­dor e fornece-lhe todas as in­for­ma­ções dis­po­ní­veis. Para utilizar esta função de ajuda, basta combinar o Get-Help com o comando cuja sintaxe pretende consultar.

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

4. Get-Process

Em várias situações, é útil obter ra­pi­da­mente uma visão geral de todas as apli­ca­ções, programas e processos atu­al­mente em execução no seu sistema. Pode obter essa visão geral uti­li­zando o comando Get-Process. Se o utilizar em conjunto com uma aplicação es­pe­cí­fica, obterá in­for­ma­ções de­ta­lha­das sobre a mesma.

Get-Process
shell

5. Get-Service

O comando Get-Service funciona de forma se­me­lhante ao cmdlet Get-Process. No entanto, a diferença reside no facto de o Get-Service fornecer in­for­ma­ções sobre todos os serviços ativos no seu sistema. Se pretender obter in­for­ma­ções apenas sobre um serviço es­pe­cí­fico ou um tipo es­pe­cí­fico de serviço, basta es­pe­ci­fi­car o seu pedido.

Get-Service
shell

6. In­ter­rom­per processo

Pode utilizar vários comandos do PowerShell para in­ter­rom­per processos di­re­ta­mente a partir da linha de comandos. Uma opção para o fazer é utilizar o comando Stop-Process. Introduza o nome, o ID ou outros atributos do processo que pretende in­ter­rom­per, conforme mostrado a seguir:

Stop-Process -Name "nombredelproceso"
shell
Stop-Process -Id 3582 -Confirm -PassThru
shell

Pode solicitar a con­fir­ma­ção da execução do comando uti­li­zando a opção –Confirm. Por sua vez, a opção -PassThru permite-lhe solicitar a con­fir­ma­ção de que o processo foi in­ter­rom­pido. Se não utilizar nenhuma destas duas opções, não receberá qualquer con­fir­ma­ção au­to­ma­ti­ca­mente.

7. ConvertTo-HTML

Obter uma apre­sen­ta­ção clara e rápida é essencial, pois permite iden­ti­fi­car possíveis problemas ou com­pli­ca­ções o mais cedo possível. O comando ConvertTo-HTML converte os re­sul­ta­dos dos comandos do PowerShell num ficheiro HTML e apresenta todas as in­for­ma­ções de forma or­ga­ni­zada, num formato em colunas de fácil leitura. Aqui está um exemplo prático que demonstra a sua eficácia:

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

8. ConvertTo-Xml

Se precisar de re­pre­sen­tar um objeto es­pe­cí­fico em formato XML, pode fazê-lo com o comando ConvertTo-Xml. No exemplo seguinte, é mostrado como o comando converte a data atual para um formato XML:

Get-Date | ConvertTo-Xml
shell

9. Where-Object

O comando Where-Object é utilizado para filtrar os re­sul­ta­dos de um cmdlet. Ao executar um comando, é comum obter uma quan­ti­dade con­si­de­rá­vel de objetos, mas é provável que nem todos sejam ne­ces­sá­rios. Por exemplo, se pretender ver apenas os serviços criados ou atu­a­li­za­dos durante o ano em curso, pode executar o seguinte comando:

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

10. Get-History

Se quiseres ver todos os comandos do PowerShell que exe­cu­taste durante uma sessão, o Get-History é o cmdlet que procuras. O Get-History permite-te obter uma lista completa de todos os comandos do PowerShell que exe­cu­taste:

Get-History
shell

Com o comando seguinte, só vais ver os últimos dez comandos do PowerShell que exe­cu­taste:

Get-History -Count 10
shell

11. Limpar histórico

Claro, também tem a opção de eliminar o histórico dos comandos do PowerShell que utilizou. Utilize o cmdlet Clear-History se quiser eliminar todas as entradas:

Clear-History
shell

Se pretender eliminar apenas de­ter­mi­na­dos comandos do PowerShell, basta adicionar os pa­râ­me­tros cor­res­pon­den­tes. O comando apre­sen­tado a seguir elimina todos os comandos do PowerShell que contenham o termo «Help» ou terminem com o termo «Syntax».

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

12. Adicionar histórico

Também podes adicionar comandos do PowerShell a uma sessão, o que te permite reutilizá-los di­re­ta­mente na próxima vez. O cmdlet que deves utilizar é o Add-History.

Add-History
shell

13. Ficheiro de saída

Se quiser guardar no seu com­pu­ta­dor o resultado obtido com os comandos do PowerShell, utilize o cmdlet Out-File. O Out-File guarda os comandos do PowerShell num ficheiro de texto simples no caminho que indicar.

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

14. Copiar item

No PowerShell, é possível duplicar elementos e guardar a cópia noutro local. Para tal, utilize o comando Copy-Item e es­pe­ci­fi­que também o diretório onde pretende guardar a cópia. Funciona da seguinte forma:

Copy-Item "C:\Carpeta1\Archivo.txt" -Destination "C:\Carpeta 2"
shell

15. Get-ChildItem

Utilize o comando Get-ChildItem para aceder a itens de um ou vários locais de ar­ma­ze­na­mento. O Get-ChildItem também apresenta os itens su­bor­di­na­dos. Por pre­de­fi­ni­ção, o comando apresenta os atributos, a hora da última mo­di­fi­ca­ção, o tamanho do ficheiro e o nome do item. Se um local de ar­ma­ze­na­mento estiver vazio, não será apre­sen­tado nada.

Get-ChildItem -Path C:\Ejemplo
shell

Os atributos são apre­sen­ta­dos na categoria «Modo». Aqui estão as pro­pri­e­da­des mais comuns:

  • a (ficheiro)
  • d (diretório)
  • h (oculto)
  • l (ligação)
  • r (somente leitura)
  • s (sistema)

16. Definir as­si­na­tura Authen­ti­code

Utilize o comando Set-Authen­ti­co­de­Sig­na­ture para aplicar uma as­si­na­tura Authen­ti­code aos seus ficheiros e, assim, protegê-los. No entanto, tenha em atenção que o Set-Authen­ti­co­de­Sig­na­ture só é eficaz em ficheiros com­pa­tí­veis com o Subject Interface Package (SIP).

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

17. Invoke-Item

Utilize o comando Invoke-Item se pretender executar uma ação pre­de­fi­nida num ficheiro es­pe­cí­fico. O comando garante que, por exemplo, um ficheiro exe­cu­tá­vel seja executado di­re­ta­mente ou que um ficheiro seja aberto na aplicação cor­res­pon­dente. No exemplo que se segue, o ficheiro seria aberto no Microsoft Word por pre­de­fi­ni­ção:

Invoke-Item "C:\Test\Ejemplo.doc"
shell

18. Iniciar tarefa

Existe um comando concebido para iniciar tarefas em segundo plano no seu com­pu­ta­dor local. O Start-Job permite-lhe executar um comando es­pe­cí­fico em segundo plano, sem afetar a sua sessão atual.

Start-Job -ScriptBlock { Get-Process -Name pwsh }
shell

Executar ações com comandos do PowerShell

Embora os comandos do PowerShell an­te­ri­o­res se cen­tras­sem em fornecer uma visão geral, também é possível realizar muitas ações com os cmdlets adequados, per­mi­tindo-lhe utilizar o seu sistema de forma mais produtiva. Os seguintes comandos do PowerShell serão úteis nas suas tarefas.

19. Limpar conteúdo

O comando Clear-Content permite-lhe eliminar o conteúdo de um elemento sem que o próprio elemento seja afetado. Um exemplo da sua aplicação seria um documento cujo texto pretenda eliminar, mantendo o ficheiro em si intacto. O comando seria o seguinte:

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

20. ForEach-Object

O comando ForEach-Object permite-lhe executar uma ação em todos os elementos de uma coleção de objetos de entrada ao mesmo tempo. No exemplo seguinte, dividimos três números inteiros de uma matriz por 10:

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

21. Compare-Object

Pode utilizar o cmdlet Compare-Object para evitar ter de comparar ma­nu­al­mente di­fe­ren­tes conjuntos de objetos. O comando gera um relatório que destaca as di­fe­ren­ças entre os conjuntos de objetos. O primeiro conjunto é con­si­de­rado o objeto de re­fe­rên­cia, enquanto o segundo funciona como o objeto de com­pa­ra­ção. Pode es­pe­ci­fi­car os critérios que pretende comparar. Se omitir esta in­for­ma­ção, apenas serão com­pa­ra­dos os re­sul­ta­dos das cadeias de ca­rac­te­res. O resultado é apre­sen­tado como elementos que só estão no objeto de re­fe­rên­cia (<) e elementos que só estão no objeto de com­pa­ra­ção (>).

No exemplo seguinte, o ficheiro Documento1.txt contém os valores Berlim, Londres e Paris, enquanto o ficheiro Documento2.txt contém os valores Berlim, Viena e Ames­ter­dão.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Documento1.txt) -DifferenceObject (Get-Content -Path C:\Test\Documento2.txt)
InputObject	SideIndicator
---------------	-----------------
Vienna		==>
Amsterdam	==>
London		<==
Paris		<==
shell

Os elementos contidos em ambos os do­cu­men­tos (neste caso, «Berlim») não são exibidos au­to­ma­ti­ca­mente por pre­de­fi­ni­ção.

22. Novo objeto

O New-Object é um dos comandos mais úteis do PowerShell, per­mi­tindo-lhe criar ins­tân­cias de um framework .NET ou de um Component Object Model (COM). Por exemplo, se pretender criar um objeto System.Version no cons­tru­tor com a cadeia de ca­rac­te­res “1.2.3.4”, o comando funciona da seguinte forma:

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

23. Select-Object

Utilize o comando Select-Object para se­le­ci­o­nar um objeto ou um grupo de objetos que cor­res­pon­dam a de­ter­mi­na­dos pa­râ­me­tros, os quais pode definir você mesmo. Os pa­râ­me­tros que pode es­pe­ci­fi­car para este efeito são os seguintes:

  • Primeiro
  • Último
  • Único
  • Ignorar
  • Índice

No exemplo seguinte, uti­li­za­mos os comandos Get-Process e Sort-Object do PowerShell para apre­sen­tar os três processos que mais consomem memória no momento em que são exe­cu­ta­dos.

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

24. Definir alias

Os atalhos de teclado do Windows oferecem uma forma mais rápida de executar de­ter­mi­na­das ações. Da mesma forma, o PowerShell também oferece esta opção. O cmdlet Set-Alias permite definir um atalho de teclado para vários comandos do PowerShell. No exemplo seguinte, criamos o alias «ci» para executar o comando Get-ChildItem durante a sessão atual.

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

25. Set-Location

Utilize o comando Set-Location para alterar o local de ar­ma­ze­na­mento pre­de­fi­nido do seu trabalho. Os novos locais podem ser di­re­tó­rios, sub­di­re­tó­rios, locais do registo ou percursos de for­ne­ce­do­res. No exemplo seguinte, definimos a unidade C: como o local de ar­ma­ze­na­mento atual:

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

26. Set-Service

Utilize o cmdlet Set-Service para gerir um serviço, seja para o iniciar, parar, colocar em pausa ou alterar as suas pro­pri­e­da­des. No exemplo seguinte, 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 Nueva Workstation -DisplayName "Vieja Workstation"
shell

27. Definir fuso horário

Utilize o comando Set-TimeZone para alterar o fuso horário do seu sistema. Se pretender definir a Hora Universal Co­or­de­nada (UTC) como o novo fuso horário do seu sistema, utilize o seguinte comando:

Set-TimeZone -Id "UTC"
shell

28. Reiniciar o com­pu­ta­dor

Podes reiniciar o sistema operativo do teu com­pu­ta­dor local ou de um com­pu­ta­dor remoto uti­li­zando os comandos adequados do PowerShell, como o Restart-Computer. Aqui está a estrutura do comando.

Para o teu com­pu­ta­dor local:

Restart-Computer
shell

Para outros com­pu­ta­do­res es­pe­cí­fi­cos na sua rede:

Restart-Computer -ComputerName Server01, Server03
shell

29. Reiniciar serviço

Pode utilizar o comando Restart-Service do PowerShell para parar e reiniciar um serviço. Por exemplo, execute o seguinte comando para reiniciar todos os serviços cujo nome comece por «Net»:

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

30. Esvaziar a Re­ci­cla­gem

É re­co­men­dá­vel esvaziar a Re­ci­cla­gem pe­ri­o­di­ca­mente. Podes esvaziá-la a partir do PowerShell uti­li­zando o comando Clear-Recy­cle­Bin.

Clear-RecycleBin
shell

31. Get-Com­pu­te­rInfo

O comando Get-Com­pu­te­rInfo é utilizado para consultar in­for­ma­ções de­ta­lha­das sobre as pro­pri­e­da­des do sistema e do sistema operativo.

Get-ComputerInfo
shell

32. Mover item

Existem vários comandos no PowerShell que permitem mover um elemento de um local para outro. No entanto, o comando mais utilizado para esse fim é o Move-Item. No exemplo seguinte, movemos o ficheiro «viejo.txt» da unidade C: para o diretório D:\Temp, ao mesmo tempo que o re­no­me­a­mos para «nuevo.txt».

Move-Item -Path C:\viejo.txt -Destination D:\Temp\nuevo.txt
shell

Mo­ni­to­ri­za­ção e depuração com os comandos adequados do PowerShell

Os comandos do PowerShell des­ti­na­dos à mo­ni­to­ri­za­ção e depuração do sistema são fer­ra­men­tas úteis, es­pe­ci­al­mente quando se pretende avaliar o de­sem­pe­nho de uma nova rede em condições reais. A seguir, apre­sen­ta­mos os comandos do PowerShell que podem ser-lhe úteis nestas situações.

33. Processo de depuração

A depuração é um processo im­por­tante para garantir o fun­ci­o­na­mento correto de todas as con­fi­gu­ra­ções e processos. Para realizar este processo, deve primeiro des­car­re­gar e con­fi­gu­rar os de­pu­ra­do­res adequados. Em seguida, pode utilizar o comando Debug-Process. No exemplo seguinte, uti­li­za­mos um depurador para o processo Explorer:

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

Se quiseres depurar vários processos em si­mul­tâ­neo, basta separá-los com vírgulas.

34. Ativar ponto de in­ter­rup­ção no PowerShell

O comando Enable-PS­Bre­ak­point permite ativar pontos de in­ter­rup­ção (bre­ak­points) es­pe­cí­fi­cos. Tec­ni­ca­mente, atribui-se o valor «true» ao cmdlet Enable-PS­Bre­ak­point. Utilize o seguinte comando do PowerShell para ativar todos os pontos de in­ter­rup­ção da sua sessão atual:

Get-PSBreakpoint | Enable-PSBreakpoint
shell

Também podes ativar pontos de in­ter­rup­ção uti­li­zando os seus IDs es­pe­cí­fi­cos da seguinte forma:

Enable-PSBreakpoint -ID 0, 3, 4
shell

35. Desativar ponto de in­ter­rup­ção

O comando Disable-PS­Bre­ak­point permite-lhe desativar os pontos de in­ter­rup­ção do PowerShell. Tec­ni­ca­mente, atribui-se o valor «false» ao comando Enable-PS­Bre­ak­point. Introduza o seguinte comando para desativar um ponto de in­ter­rup­ção com o ID 0:

Disable-PSBreakpoint -Id 0
shell

36. Get-Counter

Quando trabalha com dis­po­si­ti­vos que executam sistemas ope­ra­ti­vos Windows, pode utilizar o comando Get-Counter para consultar os seus dados de de­sem­pe­nho a partir do PowerShell. Pode utilizar o comando tanto no seu com­pu­ta­dor local como num com­pu­ta­dor remoto. No exemplo seguinte, con­sul­ta­mos os dados de de­sem­pe­nho do com­pu­ta­dor local:

Get-Counter -ListSet *
shell

37. Iniciar-Suspender

Em certas ocasiões, pode ser ne­ces­sá­rio in­ter­rom­per tem­po­ra­ri­a­mente a execução de um script ou de uma sessão, es­pe­ci­al­mente quando o sistema está so­bre­car­re­gado. O PowerShell dispõe do comando Start-Sleep para esse fim, que permite es­pe­ci­fi­car o período de tempo durante o qual as ati­vi­da­des devem ser in­ter­rom­pi­das. No exemplo seguinte, a execução é in­ter­rom­pida durante dois segundos.

Start-Sleep -Seconds 2
shell

38. Test-Path

Utilize o comando Test-Path para verificar se um ficheiro existe ou não. Introduza o nome de um ficheiro seguido do seu caminho e verifique se o ficheiro se encontra realmente nesse caminho. Os re­sul­ta­dos que pode obter são «True» ou «False».

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

39. Teste de ligação

Pode verificar as ligações na sua rede através do PowerShell uti­li­zando o comando Test-Con­nec­tion, que envia um pacote de pedido de eco ICMP aos des­ti­na­tá­rios que es­pe­ci­fi­car e aguarda uma resposta através do Protocolo de Mensagens de Controlo da Internet. No nosso exemplo, enviamos um pedido ao Server02 através do protocolo IPv6.

Test-Connection -TargetName Server02 -IPv6
shell

40. Get-WinEvent

Para vi­su­a­li­zar um ou vários registos de eventos no PowerShell, pode utilizar vários comandos. Um dos mais práticos é o cmdlet Get-WinEvent. Introduza o seguinte comando para ver todos os registos do seu com­pu­ta­dor local:

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