Introdução ao PowerShell
O PowerShell é o novo prompt de comando da Microsoft e ao mesmo tempo é uma nova linguagem de script criada especialmente para a administração de sistemas.
O PowerShell é muito fácil de aprender, pois emula a maioria dos comandos do prompt Cmd tornando a transição do prompt CMD para o PowerShell mais natural.
A grande diferença em termos de prompt é que o PowerShell não é baseado em texto e, sim, em objetos. No PowerShell a gente interage diretamente com os objetos e não precisamos construir rotinas de tratamento de string para realizar tarefas.
O PowerShell é construído sobre o .Net Framework e, consequentemente, está muito bem integrado com o .NET, COM e WMI.
Por ser orientado a objetos não é necessário escrever códigos de baixo nível, pois o .NET Framework e os comandos do PowerShell já encapsulam essa codificação.
Os Cmdlet’s (pronuncia-se command-let), como o nome sugere, são os comandos ou funcionalidades do PowerShell. Eles seguem o padrão de nomenclatura verbo-substantivo.
Os cmdlets possuem um bom desempenho uma vez que eles são carregados quando o PowerShell é iniciado. Os três cmdlets básicos são: Get-Command, Get-Member e Get-Help.
O Get-Command é usado para descobrir os comandos. Você pode pesquisar por verbo, substantivo ou tipo. Exemplos de consultas:
#para pesquisar os cmdlets que possuem o nome service:
Get-Command -Noun service
#para pesquisar os cmdlets cujo nome termina com service:
Get-Command -Noun *service
#para obter todos os cmdlets cujo verbo seja get
Get-Command –verb get
#para consultar os cmdlets cujo verbo termine com w
Get-Command –verb *w
#para consutlar os cmdlets que possuem a palavra item
Get-Command *item*
#para listar todos os cmdlets:
get-command –commandtype cmdlet
Vamos imaginar que eu quero consultar um ou mais serviços. Eu posso utilizar o Get-Command informando que o atributo utilizado será o –noun e o valor service para pesquisar pelo substantivo service, conforme:
Get-Command -noun service
O resultado será:
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
O cmdlet utilizado para retornar os serviços é, como o nome sugere, o Get-Service. Para eu obter maiores detalhes e exemplos sobre o cmdlet eu posso usar o Get-Help, conforme:
Get-Help Get-Service
Dessa forma, se eu digitar apenas Get-Service eu vou obter a relação de serviços do computador. Se eu quiser consultar um determinado serviço eu posso informar o nome do mesmo. Por exemplo:
get-service -Name netlogon
O Get-Member (ou apenas gm,caso preferir utilizar o alias) é utilizado para retornar as propriedades e métodos do objeto passado para ele (veja o artigo para maiores detalhes PowerShell | Objetos). Por exemplo, para consultar todos os métodos e propriedades que o cmdlet get-service expõe:
Get-Service Spooler | get-member
Resultado:
Status Name DisplayName
------ ---- -----------
Running Netlogon netlogon
Para obter apenas as propriedades do objeto retornado pelo get-service:
Get-Service Spooler | get-member -MemberType property
Resultado:
Name
----
CanPauseAndContinue
CanShutdown
CanStop
Container
DependentServices
DisplayName
MachineName
ServiceHandle
ServiceName
ServicesDependedOn
ServiceType
Site
Status
Para obter apenas os métodos do objeto retornado pelo get-service:
Get-Service Spooler | get-member -MemberType method
Resultado:
Name
----
Close
Continue
CreateObjRef
Dispose
Equals
ExecuteCommand
GetHashCode
GetLifetimeService
GetType
InitializeLifetimeService
Pause
Refresh
Start
Stop
WaitForStatus
Por exemplo, eu posso consultar o serviço Spooler de Impressão e retornar o resultado em uma variável, conforme:
$spooler = get-service spooler
Para consultar o valor do serviço eu digito o nome da variável e pressiono o enter:
$spooler
Resultado:
Status Name DisplayName
------ ---- -----------
Running spooler Print Spooler
Uma vez que o status do serviço é em execução (running) eu posso pará-lo através do comando abaixo que deve ser executado com o PowerShell elevado (executado como administrador):
$spooler.Stop()
Para atualizar a variável $spooler é necessário executar o comando abaixo:
$spooler.Refresh()
Para verificar se o serviço foi parado basta digitar o nome da variável e pressionar o enter:
$spooler
Resultado:
Status Name DisplayName
------ ---- -----------
Stopped spooler Print Spooler
Também é possível verificar o status do serviço através da propriedade Status ($spooler.Status) cujo resultado será Stopped.