Powershell

用於重新啟動自動 Windows 服務並在失敗時通知的 Powershell 腳本

  • November 4, 2015

我找到了一個 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} 

引用自:https://serverfault.com/questions/731217