我遇到的问题是服务正在崩溃,因此停止了。 这意味着状态显示为正在运行但是......
然而 - 我写了一个小的(绝对初学者(!) - )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
答案 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
}