powershell重启服务如果失败

时间:2015-04-15 09:42:36

标签: powershell service crash restart

我遇到的问题是服务正在崩溃,因此停止了。 这意味着状态显示为正在运行但是......

然而 - 我写了一个小的(绝对初学者(!) - )Powershell-Script来检查应用程序是否崩溃,但我该如何继续?

如果脚本在Eventlog中找到一个条目,它就会停止并启动服务..

Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-10)
$eventid = "10016"
$log = "System"
$app = "SID"
$check = "Get-WinEvent -LogName $log | Where-Object {($_.TimeCreated -ge $timetocheck) -and ($_.id -eq $eventid) -and  ($_.Message -Like *$app*)}"

修改

只是为了澄清 -

如果此片段在事件日志中找不到任何内容,则不会发生任何事情。

如果此代码段在事件日志中发现至少1个错误,则应停止并重新启动该服务。

换句话说 - 如果进程崩溃重启,则不执行任何操作

THX

2 个答案:

答案 0 :(得分:1)

嗯 - 现在我可以回答我自己的问题..;)

这有效:

Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-30)
$eventid = "10016"
$log = "System"
$app = "SID"
$checking = Get-WinEvent -FilterHashtable @{Logname="$log";ID="$eventid" ;StartTime="$timetocheck"}|`
Where-Object {$_.Message -like "*$app*"}
if ($checking -like "*") {ReStart-Service -Name DistributedCOM -Force}

诡计是 $ checking -like“*”。我完全不满意,因为这个“唯一”检查 Get-Winevent 是否回复了至少一个标志。我宁愿搜索我知道的字符串......

当要检查的字符串更短时,它使用定义的字符串....

然而 - 它的工作。这很重要。也许其他人需要这个。

thx to all

修改的 和第一个改进....

命令 Get-WinEvent -FilterHashtable @ {Logname =“$ log”; ID =“$ eventid”; StartTime =“$ timetocheck”} | Where-Object {$ _。Message-like“ $ app ”} 需要 0,7秒

命令 Get-WinEvent $ log | Where-Object {($ .TimeCreated -ge $ timetocheck) - 和($ .id -eq $ eventid) - 和($ _。消息-Like“ $ app “)} 需要 4,2秒

所以我改变了它

答案 1 :(得分:0)

使用以下代码

尝试
Clear-Host
$timetocheck = [DateTime]::Now.AddMinutes(-10)
$eventid = "10016"
$log = "System"
$app = "SID"
$check = Get-WinEvent -LogName $log | Where-Object {($_.TimeCreated -ge $timetocheck) -and ($_.id -eq $eventid) -and  ($_.Message -Like "*$app*")}

if ($check -ne $null)
{
    Restart-Service -Name YourService -Force
}