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.