Eu encontrei um script Powershell que é perfeito para mim, eu só preciso personalizar um pouco. Aqui está o link link (alemão, mas o script na parte inferior do a página é toda em inglês). No entanto, preciso de ajuda com essa parte (linhas 130 e seguintes):
foreach ($item in $report){
Write-Host "Starting Service " $item.Name " on server: " $item.Server -Foregroundcolor yellow
$start = Get-Date
$startSVCblock = {param($item) Start-Service -InputObject (Get-Service -ComputerName $item.Server -Name $item.Name)}
$j = Start-Job -ScriptBlock $startSVCblock -Arg $item
do {
if ($j.State -ne 'Running') { break}
$j | Receive-Job
} while (((Get-Date) - $start) -le $timeout)
}
Eu vejo que esta é a parte em que o script inicia um serviço, mas não estou acostumado a empregos em Powershell. Como devo editar o script para que, ao iniciar o serviço, ele grave o nome do serviço em um arquivo de log? Talvez com try / catch?
Editar:
Se alguém se depara com isso e quer saber como eu resolvi isso: Depois de muita pesquisa, descobri que é extremamente difícil gravar a saída de Receive-Job em um arquivo de log. Por isso, escolhi uma abordagem diferente: verifiquei se o servidor está em execução após o término do trabalho. Aqui está o código:
foreach ($item in $report){
Write-Output "Starting Service " $item.Name " on server: " $item.Server
$start = Get-Date
$startSVCblock = {param($item) Start-Service -InputObject (Get-Service -ComputerName $item.Server -Name $item.Name)}
$j = Start-Job -ScriptBlock $startSVCblock -Arg $item
do {
if ($j.State -ne 'Running') { break}
$j | Receive-Job
} while (((Get-Date) - $start) -le $timeout)
$newService = Get-Service -ComputerName $item.Server -Name $item.Name
if ($newService.Status -ne "Running") { LogWrite "$item could not start" }
}