如果在 Windows Powershell 中失败,如何重新启动特定命令?
How to RESTART a specific command if it fails in Windows Powershell?
在 ps1 文件中,我启动了 2 个单独的进程,如下所示:
如您所见,唯一的区别是 CPU 亲和力。
$Process1 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process1.ProcessorAffinity = 65535
$Process1.PriorityClass = 'RealTime'
$Process2 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process2.ProcessorAffinity = 4294901760
$Process2.PriorityClass = 'RealTime'
有时,2 个进程之一随机失败并显示:
问题事件名称:BEX64
发生此类故障时,必须立即重新启动进程。所以我遇到了这个问题。
Can I monitor within the PS1 file the 2 processes and if one fails to
restart it? The monitoring process must be able to distinguish which
of the 2 processes has failed, so that the correct affinity is used to
restart it.
如果您有涉及 windows 批处理脚本的解决方案,请访问 How to RESTART a specific command if it fails in Windows Batch file?
谢谢
$Process1 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process1.ProcessorAffinity = 1
$Process1.PriorityClass = 'RealTime'
Write-Host Process ID $process1.Id started with CPU affinity $Process1.ProcessorAffinity
$Process2 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process2.ProcessorAffinity = 2
$Process2.PriorityClass = 'RealTime'
Write-Host Process ID $process2.Id started with CPU affinity $Process2.ProcessorAffinity
while($true){
foreach($process in $Process1,$Process2){
if($process.hasexited){
Write-Host "Process ID $($process.id) has exited, restarting."
$priority = $process.PriorityClass
$affinity = $process.ProcessorAffinity
if($newprocess = $process.Start()){
Write-Host Successfully restarted process ID $process.Id with CPU affinity $process.ProcessorAffinity
$process.PriorityClass = $priority
$process.ProcessorAffinity = $affinity
Write-Host Priority Class set back to $process.PriorityClass
Write-Host Process affinity set back to $process.ProcessorAffinity
}
}
}
Start-Sleep -Milliseconds 500
}
在 ps1 文件中,我启动了 2 个单独的进程,如下所示: 如您所见,唯一的区别是 CPU 亲和力。
$Process1 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process1.ProcessorAffinity = 65535
$Process1.PriorityClass = 'RealTime'
$Process2 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process2.ProcessorAffinity = 4294901760
$Process2.PriorityClass = 'RealTime'
有时,2 个进程之一随机失败并显示: 问题事件名称:BEX64
发生此类故障时,必须立即重新启动进程。所以我遇到了这个问题。
Can I monitor within the PS1 file the 2 processes and if one fails to restart it? The monitoring process must be able to distinguish which of the 2 processes has failed, so that the correct affinity is used to restart it.
如果您有涉及 windows 批处理脚本的解决方案,请访问 How to RESTART a specific command if it fails in Windows Batch file?
谢谢
$Process1 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process1.ProcessorAffinity = 1
$Process1.PriorityClass = 'RealTime'
Write-Host Process ID $process1.Id started with CPU affinity $Process1.ProcessorAffinity
$Process2 = Start-Process -FilePath 'C:\Windows\system32\notepad.exe' -PassThru
$Process2.ProcessorAffinity = 2
$Process2.PriorityClass = 'RealTime'
Write-Host Process ID $process2.Id started with CPU affinity $Process2.ProcessorAffinity
while($true){
foreach($process in $Process1,$Process2){
if($process.hasexited){
Write-Host "Process ID $($process.id) has exited, restarting."
$priority = $process.PriorityClass
$affinity = $process.ProcessorAffinity
if($newprocess = $process.Start()){
Write-Host Successfully restarted process ID $process.Id with CPU affinity $process.ProcessorAffinity
$process.PriorityClass = $priority
$process.ProcessorAffinity = $affinity
Write-Host Priority Class set back to $process.PriorityClass
Write-Host Process affinity set back to $process.ProcessorAffinity
}
}
}
Start-Sleep -Milliseconds 500
}