# PowerShell commands: Os 40 comandos PoweShell mais importantes

Ao fazer uso dos comandos PowerShell (*PowerShell commands*) certos, você conseguirá implementar e automatizar tarefas com muito mais rapidez e precisão. Chamados de `cmdlets`, eles também podem ser personalizados com a adoção de parâmetros operacionais. Este tutorial apresenta a você os 40 comandos PowerShell mais importantes, para ajudá-lo a otimizar o seu trabalho em ambientes Windows.

## O que são PowerShell commands?

O [PowerShell](https://www.ionos.com/digitalguide/server/know-how/windows-powershell/ " Windows 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 possibilita a execução de tarefas administrativas e o gerenciamento de sistemas, por meio de [comandos `cmd`](https://www.ionos.com/digitalguide/server/know-how/windows-cmd-commands/ "Comandos cmd para Windows"). Especificamente no PowerShell, comandos são chamados de `cmdlets`. Estes, **compostos por um verbo e por um substantivo separados por hífen**, só podem ser entendidos por essa ferramenta. A vantagem de `cmdlets` é que eles podem ser **personalizados por parâmetros operacionais** separados por espaços.

Em ambientes Windows, o PowerShell não é valioso somente para administradores de sistemas, mas também para desenvolvedores. Ao aprenderem os comandos PowerShell mais importantes, estes profissionais economizam tempo e aumentam a produtividade.

## Comandos PowerShell básicos

Como já explicado, comandos PowerShell permitem a realização de tarefas administrativas com bem menos esforço. Dentre os PowerShell commands mais básicos e frequentemente utilizados estão aqueles capazes de apresentar panoramas sobre a estrutura da rede, de listar outros comandos, de auxiliar nas configurações de segurança essenciais e de possibilitar a realização de análises. Apresentaremos, abaixo, os comandos PowerShell que mais lhe ajudarão no dia a dia, e explicaremos cada um deles:

### 1. Get-Module -All

Para obter um panorama com todos os módulos PowerShell importados, faça uso do comando **Get-Module -All**.

```shell
Get-Module -All
```

### 2. Get-Command

Existem por aí algumas centenas de comandos PowerShell predefinidos. 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, juntamente com breves explicações sobre cada `cmdlet` — comandos continuam válidos mesmo após a instalação de módulos adicionais.

```shell
Get-Command
```

### 3. Get-Help

O comando Get-Command, apresentado acima, fornece apenas informações básicas sobre PowerShell commands. Se você procura por informações mais detalhadas sobre um comando específico, assim como sobre suas opções, opte pelo `cmdlet` **Get-Help**. Ele acessa os arquivos de ajuda do seu computador e apresenta todas as informações lá disponibilizadas. Para executá-lo, combine Get-Help com o comando cuja sintaxe você deseja consultar.

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

### 4. Get-Process

Para checar superficialmente a sua lista de aplicações, programas e processos ativos no sistema, use o comando **Get-Process**. Ao especificar uma aplicação, você receberá informações adicionais a respeito dela.

```shell
Get-Process
```

### 5. Get-Service

O comando **Get-Service** funciona de forma similar ao Get-Process. No entanto, ele apresenta informações relativas a todos os serviços ativos. Se você procura mais informações sobre um serviço ou categoria de serviços em particular, também é possível especificar a solicitação.

```shell
Get-Service
```

### 6. Stop-Process

Vários PowerShell commands têm o poder de interromper processos pelo ambiente de linha de comando. Um deles é o `cmdlet` **Stop-Process**. Defina o processo correspondente inserindo seu nome, ID ou outro atributo que o especifique.

```shell
Stop-Process -Name "nome do processo"
```

Observe o exemplo:

```shell
Stop-Process -Id 3582 -Confirm -PassThru
```

Com *-Confirm*, a confirmação do comando será solicitada. Já *-PassThru* solicitará a confirmação do processo interrompido — isso não pode ser feito automaticamente.

### 7. ConvertTo-HTML

Para identificar problemas ou potenciais complicações com rapidez, é de extrema importância que você leia e compreenda códigos de forma clara. Para facilitar a visualização deles, faça uso do PowerShell command **ConvertTo-HTML**: ele transforma resultados PowerShell em arquivos HTML, de compreensão mais intuitiva. A estrutura desse comando costuma ser a seguinte:

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

### 8. ConvertTo-Xml

Você pode proceder de forma semelhante se quiser obter a representação de um objeto específico em XML. Faça essa conversão com o comando **ConvertTo-Xml**. No exemplo abaixo, convertemos a data atual para o formato XML:

```shell
Get-Date | ConvertTo-Xml
```

### 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 informações que as estritamente necessárias. Execute, em seguida, o Where-Object com um pipe, para que apenas as informações que você procura sejam exibidas. Por exemplo, para ver os serviços criados ou atualizados neste ano, você poderia executar o comando abaixo:

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

### 10. Get-History

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

```shell
Get-History
```

Já para listar apenas os últimos dez comandos PowerShell executados, use a seguinte especificação:

```shell
Get-History -Count 10
```

### 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**:

```shell
Clear-History
```

Para excluir somente comandos PowerShell específicos, faça uso de parâmetros que os identifiquem. No exemplo de código abaixo, determinamos a exclusão do registro de todos os comandos contendo a palavra “Help” e terminados em “Syntax”.

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

### 12. Add-History

Também é possível vincular comandos PowerShell a sessões específicas, para que eles possam ser chamados a qualquer momento. O `cmdlet` certo para fazer isso é **Add-History**.

```shell
Add-History
```

### 13. Out-File

Para salvar, no seu computador, os resultados produzidos por comandos PowerShell por você utilizados, use o `cmdlet` **Out-File**. Ele armazena PowerShell commands em um arquivo de texto bruto no local especificado.

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

### 14. Copy-Item

O PowerShell também permite que elementos sejam copiados e salvos em diferentes locais. Basta usar o comando **Copy-Item** e especificar o diretório em que a cópia deve ser salva.

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

### 15. Get-ChildItem

Use o `cmdlet` **Get-ChildItem** para buscar itens em um ou mais locais de armazenamento. Caso eles contenham subelementos, estes também serão exibidos. Por padrão, esse comando PowerShell lista os atributos, a data e a hora da última modificação, assim como o tamanho do arquivo e o nome dos subelementos. Por outro lado, se o local de armazenamento estiver vazio, o resultado será omitido.

```shell
Get-ChildItem -Path C:\exemplo
```

Os atributos correspondentes são exibidos abaixo da linha “Mode”. Suas propriedades mais comuns são:

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

### 16. Set-AuthenticodeSignature

Para proteger seus arquivos, você pode equipá-los com uma assinatura Authenticode. Para tanto, use o comando **Set-AuthenticodeSignature**. Saiba, contudo, que ela só poderá ser adicionada a arquivos que oferecem suporte ao *Subject Interface Package* (SIP).

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

### 17. Invoke-Item

Se você quer realizar uma ação padrão associada a um arquivo específico, o comando PowerShell **Invoke-Item** é o ideal. Ele assegura, por exemplo, a execução direta de um arquivo executável (extensão *.exe*) ou a abertura de um documento na aplicação padrão. No nosso exemplo, o arquivo em questão será automaticamente aberto pelo Microsoft Word, aplicação padrão da extensão *.doc*:

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

### 18. Start-Job

Para iniciar uma tarefa em segundo plano no seu computador local, você deve usar o comando **Start-Job**. Ele possibilita a execução de um comando específico em segundo plano sem que este interaja com a sessão atual.

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

## Comandos PowerShell para executar ações

Os comandos PowerShell até então apresentados são voltados à exibição de diferentes tipos de panoramas. Contudo, um `cmdlet` também é capaz de executar uma ação e melhorar a eficiência do seu sistema. Conheça, agora, PowerShell commands capazes de simplificar 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:

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

### 20. ForEach-Object

O comando **ForEach-Object** possibilita a realizaçã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:

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

### 21. Compare-Object

Para que você não precise comparar diferentes conjuntos de objetos manualmente, execute o PowerShell command **Compare-Object**. Ele gera um relatório que destaca diferenças entre registros: o primeiro registro serve como objeto de referência enquanto o segundo representa o objeto de diferença. Especifique os fatores a serem comparados ou omita essa informação para obter apenas resultados de *strings* que serão comparados. Resultados são divididos em propriedades que só aparecem no objeto de referência (*&lt;==*) e em propriedades que só estão presentes no objeto de diferença (*==&gt;*). 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ã.

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

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

### 22. New-Object

Um dos comandos PowerShell mais úteis é o **New-Object**. Ele pode ser usado para instanciar 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 construtora, execute o comando a seguir:

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

### 23. Select-Object

Use o comando **Select-Object** para selecionar um objeto ou grupo de objetos que apresenta propriedades definidas por você. Estes são os parâmetros que podem ser especificados:

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

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

### 24. Set-Alias

Assim como [atalhos de teclado do Windows](https://www.ionos.com/digitalguide/server/configuration/windows-shortcuts/ "Atalhos do Windows") facilitam a execução de ações no sistema operacional, 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, apelidamos de “ci” o comando Get-ChildItem quando executado na sessão atual.

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

### 25. Set-Location

Para alterar o local da memória de trabalho, use o comando **Set-Location**. Entre as opções disponíveis estão diretórios, subdiretórios, locais de registro e caminhos do provedor. Abaixo, especificamos o disco *C:* como local de armazenamento.

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

### 26. Set-Service

Você pode usar o `cmdlet` **Set-Service** para interagir com um serviço, iniciá-lo, interrompê-lo ou pausá-lo. Ele também permite a alteração de propriedades 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”.

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

### 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:

```shell
Set-TimeZone -Id "UTC"
```

### 28. Restart-Computer

Você consegue reiniciar o sistema operacional do seu computador local ou remoto por meio do PowerShell command **Restart-Computer**. Ele pode ser executado das seguintes formas:

No computador local:

```shell
Restart-Computer
```

Em computadores específicos de uma rede:

```shell
Restart-Computer -ComputerName Servidor01, Servidor03
```

### 29. Restart-Service

Para interromper 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:

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

### 30. Clear-RecycleBin

Esvazie a sua lixeira com regularidade. Com o PowerShell, você pode executar essa ação por meio do `cmdlet` **Clear-RecycleBin**.

```shell
Clear-RecycleBin
```

### 31. Get-ComputerInfo

O `cmdlet` **Get-ComputerInfo** pode ser usado para consultar propriedades do seu sistema ou sistema operacional.

```shell
Get-ComputerInfo
```

### 32. Move-Item

Diferentes PowerShell commands têm a capacidade 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, renomeamos o arquivo para “novo.txt”.

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

## Comandos PowerShell de monitoramento e depuração

Alguns PowerShell commands considerados especialmente interessantes possibilitam o monitoramento e a verificação do sistema. Estes são uteis em situações de teste de desempenho de rede sob condições realistas. A seguir, listamos os comandos PowerShell mais importantes que servem a essas finalidades.

### 33. Debug-Process

O processo de depuração (*debugging*) é importante, pois assegura que todas as configurações e processos rodem sem erros. Antes de executar o **Debug-Process**, contudo, você deverá baixar e configurar os depuradores certos. No próximo exemplo, depuramos o Explorer:

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

Para depurar vários processos simultaneamente, adicione-os, um a um, separando-os por vírgulas.

### 34. Enable-PSBreakpoint

Para ativar determinados pontos de interrupção (*breakpoints*), faça uso de **Enable-PSBreakpoint**. Ele define o valor do `cmdlet` como “verdadeiro” (*true*) pelo prisma técnico. Execute esse PowerShell command para ativar todos os pontos de interrupção da sessão atual:

```shell
Get-PSBreakpoint | Enable-PSBreakpoint
```

Abaixo, observe um exemplo desse `cmdlet` sendo usado para ativar pontos de interrupção por meio de IDs:

```shell
Enable-PSBreakpoint -ID 0, 3, 4
```

### 35. Disable-PSBreakpoint

Para desativar pontos de interrupção do PowerShell, o `cmdlet` certo é o **Disable-PSBreakpoint**. Pelo mesmo prisma técnico, ele define o valor do comando Enable-PSBreakpoint como “falso” (*false*). Para desativar um ponto de interrupção cujo ID é 0, você deve executar o seguinte comando:

```shell
Disable-PSBreakpoint -Id 0
```

### 36. Get-Counter

Em ambientes Windows, é possível consultar dados de desempenho por meio do PowerShell. O comando que executa essa tarefa é o **Get-Counter**, que pode ser usado tanto no seu computador local quanto em computadores remotos. No exemplo a seguir, consultamos dados no computador local:

```shell
Get-Counter -ListSet *
```

### 37. Start-Sleep

Pausar um script ou sessão pode ser de fundamental importância, especialmente quando o sistema enfrenta sobrecargas. Para tanto, o PowerShell oferece o comando **Start-Sleep**: ele permite que você especifique o tempo pelo qual suas atividades devem ser pausadas. No próximo exemplo, pausamos a execução por dois segundos:

```shell
Start-Sleep -Seconds 2
```

### 38. Test-Path

Use o comando **Test-Path** para verificar se todos os elementos de um caminho específicos se encontram presentes. Os resultados possíveis são “verdadeiro” (*true*) e “falso” (*false*).

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

### 39. Test-Connection

Você também pode avaliar a conectividade da sua rede com o PowerShell. Faça isso ao enviar pacotes “ICMP Echo Request” aos destinatários especificados, por meio do `cmdlet` **Test-Connection** — ele solicita respostas por meio do *Internet Control Message Protocol* (ICMP). No nosso exemplo, enviamos uma solicitação ao Servidor02 por meio do [protocolo IPv6](https://www.ionos.com/digitalguide/server/know-how/what-are-the-benefits-of-ipv6/ "Vantagens do IPv6").

```shell
Test-Connection -TargetName Servidor02 -IPv6
```

### 40. Get-WinEvent

Diferentes PowerShell commands possibilitam a visualizaçã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 computador local, use o comando a seguir:

```shell
Get-WinEvent -ListLog *
```


This is a markdown version of: [https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/powershell-commands/](https://www.ionos.com/pt-br/digitalguide/servidor/configuracao/powershell-commands/) for AI/LLM consumption.