Automatizando Tarefas com o Windows PowerShell 3.0

By | 1 de outubro de 2012
Print Friendly, PDF & Email

 

Alguns recursos do Windows PowerShell facilitam o gerenciamento e a criação de scripts para automação de tarefas seja em sua máquina local ou remota.

Neste artigo você encontrará códigos de script do PowerShell com comentários para facilitar o entendimento.
A primeira é Job Scheduling que permite agendar a execução de um trabalho (job) do PowerShell em Background e ainda suporta diversos gatilhos (triggers).


Exemplo de triggers

$diario = New-JobTrigger -Daily -at 3am

$umavez = New-JobTrigger -Once -At (Get-Date).AddHours(1)

$semanal = New-JobTrigger -Weekly -DaysOfWeek Monday -At 6pm

Com o Job Scheduling você executa comandos de acordo com o agendamento ou em resposta a um evento.

Exemplos de Job Scheduling

Register-ScheduledJob -Name BackupDiario -Trigger $diario -ScriptBlock {Copy-Item C:\scripts f:\backup\bkp$((Get-Date).ToFileTime()) -Recurse -Force}

Register-ScheduledJob -Name RelatorioSemanal -Trigger $semanal -FilePath C:\scripts\Odata\View-OData.ps1

Utilizando  Job Scheduling em conjunto com as sessões remotas do PowerShell temos mais um recurso resiliente para automatização, pois caso existam falhas nas conexões de rede as sessões remotas permanecem em um estado “conectada” durante falhas de rede e após 4 minutos, sessões remotas alternam automaticamente para um novo estado “Desconectada”

Com os comandos persistentes e Jobs os scripts podem continuar a funcionar mesmo se a sessão estiver desconectada. E não é só em caso de falhas. Pois você pode criar uma sessão remota e então desconectar e quando pode se reconectar a uma sessão desconectada quando desejar.

Exemplo de uma sessão remota:

# Criando uma sessão no servidor

$s = New-PSSession -name install -ComputerName localhost

# Executando um comando remoto como um trabalho

Invoke-Command -Session $s -ScriptBlock {

1..1000000 | % {"Contando $_";sleep 1 }

} -AsJob -JobName LongoTrabalho

Get-Job -Name LongoTrabalho | Receive-Job -Keep

# Desconectando da sessão atual

Disconnect-PSSession $s

# Reconectando quando quiser

Get-PSSession -ComputerName . -Name Install | Connect-PSSession

$s

Receive-PSSession -Session $s -OutTarget Job -JobName LongoTrabalho

Get-Job LongoTrabalho | Receive-Job -Keep

Depois temos o Workflow, Um workflow funciona como se fosse um cmdlet do PowerShell, com a diferença de fazer o uso do Windows Workflow Foundation que habilita a criação de scripts de longa execução gerenciáveis. Usando um Workflow você pode Interromper, suspender, reiniciar, repetir e fazer execução paralela, o que o torna uma excelente ferramenta em ambientes de computação em nuvem, já que permite aos administradores automatizarem tarefas de execução diária e repetidas. Workflow suporta interrupções de maquinas e rede, como por exemplo a reinicialização de um servidor.
Exemplo de um WorkFlow


# um Trabalho executando um WorkFlow

workflow MeuWorkFlow

{

while(1)

{

(get-date).ToString() + " Script Demorado"

Start-Sleep -seconds 3

}

}

#invokar o comando como um trabaho (JOB)

$wfjob = MeuWorkFlow -AsJob

# Consulte e use o WFjob E não se esqueça de consular os cmdlets *-job.- workflow é gerenciando com job

$wfjob

Receive-Job $wfjob

# Você então pode suspender o trabalho e notar que ele não exibe informações, pois está suspenso.

Suspend-Job $wfjob -Force -Wait

$wfjob

Receive-Job $wfjob

# Por fim você pode resumir o trabalho.

Resume-Job $wfjob -Wait

# Finalizar o trabalho !!

Get-Job | Remove-Job –Force

  • Artigo migrado – 3615 acessos até a data 30/09/2015