Я нашел сценарий Powershell, который проверяет все автоматические сервисы на серверы Windows и если они не запускаются, попытки запустить их. Вот является ссылка http://doitcloudy.blogspot.de/2014/07/scriptgesteuerter-neustart-von-windows.html (Это является немецким, но сценарий внизу страницы является всеми англичанами). Я хотел бы настроить его немного. Однако я нуждаюсь в некоторой помощи с этой частью (строки 130 и после):
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)
}
Я вижу, что это - часть, где сценарий запускает сервис, но я не привык к "заданиям" в Powershell. Как я должен отредактировать сценарий так, чтобы при запуске сервисных сбоев, он написал сервисное имя к файлу журнала? Возможно, с попыткой/выгодой?
Любая справка значительно ценится!
Если кто-нибудь наткнется на это и захочет узнать, как я его решил: После долгих исследований я обнаружил, что очень сложно записать вывод Receive-Job в файл журнала. Поэтому я выбрал другой подход: проверяю, запущен ли сервер после завершения задания. Вот код:
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" }
}
В строках 103, 123 и 137 запишите в свой журнал до разрыва.
Так что замените
if ($j.State -ne 'Running') { break}
на
if ($j.State -ne 'Running') { Add-Content c:\log.txt "$item Did not Start" ; break}