Сценарий Powershell, чтобы перезапустить автоматические службы Windows и уведомить, если отказавший

Я нашел сценарий 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. Как я должен отредактировать сценарий так, чтобы при запуске сервисных сбоев, он написал сервисное имя к файлу журнала? Возможно, с попыткой/выгодой?

Любая справка значительно ценится!

-2
задан 23 October 2015 в 17:52
2 ответа

Если кто-нибудь наткнется на это и захочет узнать, как я его решил: После долгих исследований я обнаружил, что очень сложно записать вывод 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" }

}

0
ответ дан 5 December 2019 в 21:42

В строках 103, 123 и 137 запишите в свой журнал до разрыва.

Так что замените

 if ($j.State -ne 'Running') { break} 

на

 if ($j.State -ne 'Running') { Add-Content c:\log.txt "$item Did not Start" ; break} 
0
ответ дан 5 December 2019 в 21:42

Теги

Похожие вопросы