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
[ps]
$diario = New-JobTrigger -Daily -at 3am
$umavez = New-JobTrigger -Once -At (Get-Date).AddHours(1)
$semanal = New-JobTrigger -Weekly -DaysOfWeek Monday -At 6pm
[/ps]
Com o Job Scheduling você executa comandos de acordo com o agendamento ou em resposta a um evento.
[ps]
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
[/ps]
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:
[ps]
# 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
[/ps]
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
[ps]
# 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
[/ps]
- Artigo migrado – 3615 acessos até a data 30/09/2015
Seja o primeiro a comentar