Conceitos básicos do PowerShell
a) Cmdlets:
Cmdlets são pequenos comandos no PowerShell projetados para executar uma única operação. Por exemplo, Get-Content lê o conteúdo de um arquivo, enquanto Set-Content grava o conteúdo em um arquivo. Os cmdlets podem ser combinados e sua saída pode ser manipulada para lidar com tarefas complexas. Eles constituem a base da funcionalidade do PowerShell.
b) Scripts:
Os scripts do PowerShell são arquivos de texto que contêm cmdlets e outros comandos do PowerShell salvos com uma extensão .ps1. Eles automatizam sequências mais longas de tarefas e podem ser simples ou complexos.
c) Pipeline:
O PowerShell Pipeline conecta vários cmdlets, passando a saída de um como entrada para o próximo. Esse encadeamento de comandos permite executar operações complexas com o mínimo de código. Por exemplo, você pode listar todos os arquivos em um diretório e filtrá-los por tamanho ou tipo em uma única linha de código.
O PowerShell possui uma vasta gama de comandos (cmdlets) que cobrem diversas funções. Listar todos os comandos, incluindo os avançados, seria muito extenso para uma única resposta. No entanto, você pode obter uma lista completa de comandos disponíveis em seu sistema PowerShell usando alguns cmdlets específicos. Aqui estão alguns comandos que você pode usar para listar todos os cmdlets, funções e aliases disponíveis no PowerShell:
Listar todos os cmdlets, funções e aliases
Cmdlets:
Get-Command
Filtrar por tipo específico de comando
Cmdlets:
Get-Command -CommandType Cmdlet
Funções:
Get-Command -CommandType Function
Aliases:
Get-Command -CommandType Alias
Listar cmdlets avançados Cmdlets avançados são geralmente os que requerem mais conhecimento técnico ou estão relacionados a tarefas administrativas complexas. Esses não são classificados de forma explícita como "avançados" no PowerShell, mas você pode identificar alguns dos cmdlets mais avançados e frequentemente usados em contextos administrativos e de automação, por exemplo:
Cmdlets para gerenciamento de sistema:
Get-Command -Noun Service
Get-Command -Noun Process
Get-Command -Noun EventLog
Cmdlets para gerenciamento de usuários e grupos:
Get-Command -Noun User
Get-Command -Noun Group
Cmdlets para gerenciamento de arquivos e diretórios:
Get-Command -Noun File
Get-Command -Noun Item
Exportar lista completa de comandos para um arquivo Se você deseja exportar todos os comandos para um arquivo para revisão, você pode usar o seguinte comando:
Get-Command | Out-File -FilePath "C:\caminho\para\seu\arquivo\ComandosPowerShell.txt"
Obter ajuda detalhada para um cmdlet específico
Para obter ajuda detalhada sobre um cmdlet específico, você pode usar:
Get-Help NomeDoCmdlet -Detailed
Exemplos de cmdlets avançados
Gerenciamento de processos:
Get-Process
Start-Process
Stop-Process
Manipulação de eventos:
Get-EventLog
New-EventLog
Remove-EventLog
Gerenciamento de serviços:
Get-Service
Start-Service
Stop-Service
Essa é apenas uma introdução.
PowerShell é uma ferramenta poderosa e versátil, e a melhor maneira de se familiarizar com todos os comandos é explorá-los diretamente no console.
Comandos essenciais do PowerShell que você deve conhecer
Existem tantos comandos do Windows PowerShell disponíveis que pode ser um pouco cansativo descobrir por onde começar. Compilamos uma lista abrangente de comandos do PowerShell com alguns dos comandos essenciais que você deve conhecer para tarefas que vão desde a navegação no sistema de arquivos e manipulação de arquivos até administração do sistema e rede.
Navegando no sistema de arquivos
Get-ChildItem
lista itens em um diretório.
Set-Location
Altera o diretório atual.
Push-Location
salva o diretório atual em uma pilha para que você possa retornar a ele.
Pop-Location
Retorna ao diretório salvo pelo Push-Location.
Manipulação de arquivos
New-Item
Cria um novo arquivo ou diretório.
Remove-Item
Exclui um arquivo ou diretório.
Copy-Item
Copia um arquivo ou diretório para outro local.
Move-Item
Move um arquivo ou diretório para um novo local.
Rename-Item
Renomeia um arquivo ou diretório.
Administração do Sistema
Get-Service
lista todos os serviços em um computador.
Start-Service
Inicia um serviço interrompido.
Stop-Service
interrompe um serviço em execução.
Restart-Service
Reinicia um serviço.
Gerenciamento de usuários e permissões
Get-LocalUser
Recupera contas de usuários locais.
New-LocalUser
Cria uma nova conta de usuário local.
Remove-LocalUser
Exclui uma conta de usuário local.
Get-Acl
Obtém a lista de controle de acesso (ACL) para um arquivo ou recurso.
Set-Acl
Define a ACL para um arquivo ou recurso.
Comandos de rede
Test-Connection
Envia solicitações de eco ICMP para um host de destino para testar a conectividade.
Get-NetIPAddress
Recupera a configuração do endereço IP.
Get-NetAdapter
Lista adaptadores de rede.
Resolve-DnsName
Resolve um nome DNS para um endereço IP.
Gerenciamento de processos
Get-Process
Lista os processos atualmente em execução.
Start-Process
Inicia um novo processo.
Stop-Process
interrompe um processo em execução.
Wait-Process
Aguarda a saída de um processo.
Trabalhando com objetos
Select-Object
Seleciona propriedades específicas de um objeto.
Where-Object
Filtra objetos com base em valores de propriedades.
Sort-Object
Classifica objetos por valores de propriedade.
Group-Object
Agrupa objetos por valores de propriedade.
Comandos e técnicas avançadas do PowerShell
Os scripts do PowerShell ampliam a funcionalidade da linha de comando, permitindo operações mais complexas e poderosas. Aqui estão alguns dos elementos principais.
Estruturas de controle:
são instruções if, else e switch para tomada de decisão e loops (for, for each, while, do-while) para tarefas repetitivas.
Funções:
Funções são blocos de código reutilizáveis que você pode chamar com um nome. Eles ajudam a organizar scripts em seções gerenciáveis e podem aceitar parâmetros para operação dinâmica.
Tratamento de erros:
O PowerShell usa blocos try, catch e finalmente para tratamento de erros. Isso permite que os scripts tratem erros normalmente e continuem a execução ou finalizem corretamente.
Os scripts podem automatizar quase todas as tarefas que podem ser executadas na linha de comando do PowerShell. Scripts complexos podem gerenciar atualizações do sistema, implantar software em redes, automatizar o gerenciamento de arquivos e muito mais.
O segredo é combinar cmdlets, estruturas de controle e funções personalizadas para criar uma sequência de operações executadas sem intervenção manual.
Os módulos expandem os recursos do PowerShell adicionando novos comandos, incluindo cmdlets e funções. Depois de importar um módulo com Import-Module, você pode acessar funcionalidades adicionais para tarefas específicas, como AzureRM para recursos do Azure, ActiveDirectory para serviços de diretório e PSDsc para gerenciamento de configuração.
Os módulos podem ser integrados, baixados da Galeria do PowerShell ou personalizados.
Práticas recomendadas de script do PowerShell
Ao escrever scripts do PowerShell, seguir as práticas recomendadas manterá seu código limpo, legível e utilizável. Aqui estão algumas diretrizes gerais que você deve seguir.
1- Use convenções de nomenclatura claras:
Escolha nomes descritivos para funções e variáveis. Isso torna seu script auto documentado e mais fácil de entender.
2- Mantenha a simplicidade:
Escreva comandos simples e diretos. One-liners complexos podem ser impressionantes, mas difíceis de ler e manter.
3- Modularize seu código:
Divida seu script em funções. Essa abordagem torna seu código reutilizável e mais fácil de testar.
4- Use formatação consistente:
Use recuo, espaçamento e posicionamento de colchetes consistentes. Essa consistência melhora a legibilidade e a manutenção.
5- Evite valores codificados:
Use parâmetros e arquivos de configuração em vez de valores codificados. Isso torna seus scripts mais flexíveis e fáceis de atualizar. Implementar tratamento de erros: use blocos try, catch e, finalmente, blocos para tratar erros. O tratamento adequado de erros evita que seu script falhe silenciosamente e facilita a depuração.
5- Comente seu código:
Os comentários são muito importantes para explicar o propósito do seu código, como ele funciona e por que decisões específicas foram tomadas. Os comentários são valiosos para qualquer pessoa que possa trabalhar em seu roteiro no futuro, incluindo você mesmo no futuro.
6- Documente seu script:
Junto com os comentários in-line, documente no início do seu script sua finalidade, uso, parâmetros e quaisquer dependências. É importante que outras pessoas entendam e usem seu script.
Apoio:
Guia de referências dos comandos do PowerShell
Listamos os comandos do PowerShell mais comuns que você deve conhecer, mas e quanto a um alias para um determinado comando?
E quanto à sua sintaxe?
Com esta folha de dicas, você pode obter tudo o que precisa saber sobre esses comandos essenciais, junto com um exemplo, para referência rápida.
Alias | Command | Syntax | Example | Description | |
Navigating the File System | |||||
Gci, ls, dir | Get-ChildItem | Get-ChildItem -Path <Path> | Get-ChildItem -Path C:\Users | Lists items in a specified directory | |
Cd, chdir | Set-Location | Set-Location -Path <Path> | Set-Location -Path C:\Windows | Changes the current directory | |
pushd | Push-Location | Push-Location -Path <Path> | Push-Location -Path C:\Windows | Saves the current directory on a stack | |
popd | Pop-Location | Pop-Location | Pop-Location | Returns to the directory saved by Push-Location | |
File Manipulation | |||||
ni | New-Item | New-Item -Path <Path> -ItemType File | New-Item -Path .\file.txt -ItemType File | Creates a new file | |
del, erase, rd, ri, rm, rmdir, rp | Remove-Item | Remove-Item -Path <Path> | Remove-Item -Path .\file.txt | Deletes a file or directory | |
copy, cp, cpi, cpp | Copy-Item | Copy-Item -Path <Path> -Destination <Destination> | Copy-Item -Path .\file.txt -Destination .\backup\file.txt | Copies a file to a new location | |
mi, move, mp, mv | Move-Item | Move-Item -Path <Path> -Destination <Destination> | Move-Item -Path .\file.txt -Destination .\new\file.txt | Moves a file to a new location | |
ren, rni, | Rename-Item | Rename-Item -Path <Path> -NewName <NewName> | Rename-Item -Path .\file.txt -NewName new_file.txt | Renames a file | |
System Administration | |||||
gsv | Get-Service | Get-Service | Get-Service | Where-Object {$_.Status -eq “Running”}` | |
sasv | Start-Service | Start-Service -Name <Name> | Start-Service -Name “bits” | Starts a stopped service | |
spsv | Stop-Service | Stop-Service -Name <Name> | Stop-Service -Name “bits” | Stops a running service | |
– | Restart-Service | Restart-Service -Name <Name> | Restart-Service -Name “bits” | Restarts a service | |
User & Permissions Management | |||||
glu | Get-LocalUser | Get-LocalUser | Get-LocalUser | Select-Object Name` | |
nlu | New-LocalUser | New-LocalUser -Name <Name> | New-LocalUser -Name “User1” | Creates a new local user account | |
rlu | Remove-LocalUser | Remove-LocalUser -Name <Name> | Remove-LocalUser -Name “User1” | Deletes a local user account | |
– | Get-Acl | Get-Acl -Path <Path> | Get-Acl -Path .\file.txt | Gets ACL for a file or resource | |
– | Set-Acl | Set-Acl -Path <Path> -AclObject <AclObject> | Set-Acl -Path .\file.txt -AclObject $acl | Sets the ACL for a file or resource | |
Networking Commands | |||||
– | Test-Connection | Test-Connection -ComputerName <Name> | Test-Connection -ComputerName google.com | Tests network connectivity | |
– | Get-NetIPAddress | Get-NetIPAddress | Get-NetIPAddress -InterfaceAlias “Ethernet” | Retrieves IP address configuration | |
– | Get-NetAdapter | Get-NetAdapter | Get-NetAdapter -Name “Ethernet” | Lists network adapters | |
– | Resolve-DnsName | Resolve-DnsName -Name <Name> | Resolve-DnsName -Name google.com | Resolves a DNS name to an IP address | |
Process Management | |||||
gps, ps | Get-Process | Get-Process | Get-Process | Where-Object {$_.CPU -gt 100}` | |
start, saps | Start-Process | Start-Process -FilePath <FilePath> | Start-Process -FilePath “notepad.exe” | Starts a new process | |
spps, kill | Stop-Process | Stop-Process -Name <Name> | Stop-Process -Name “notepad” | Stops a running process | |
– | Wait-Process | Wait-Process -Name <Name> | Wait-Process -Name “notepad” | Waits for a process to exit | |
Working With Objects | |||||
select | Select-Object | Select-Object -Property <Property> | Get-Process | Select-Object Name, CPU | Selects specific properties of an object |
– | Where-Object | Where-Object {$_.Property -Condition <Value>} | Get-Process | Where-Object {$_.CPU -gt 100} | Filters objects based on property values |
sort | Sort-Object | Sort-Object -Property <Property> | Get-Process | Sort-Object CPU | Sorts objects by property values |
group | Group-Object | Group-Object -Property <Property> | Get-Process | Group-Object ProcessName | Groups objects by property values |