Powershell
用於重新啟動自動 Windows 服務並在失敗時通知的 Powershell 腳本
我找到了一個 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 中“工作”。我應該如何編輯腳本,以便在啟動服務失敗時將服務名稱寫入日誌文件?也許用try/catch?
任何幫助是極大的讚賞!
如果有人偶然發現並想知道我是如何解決的:經過大量研究,我發現將 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}