powershell 重新打开已退出的进程(使用相同的变量)

yhxst69z  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(125)

我从这里得到了一些启发:Capturing standard out and error with Start-Process
我想要的是检查标准输出是否有一些特定的错误消息,并重新打开进程。
我的设置如下:

  • 运行powershell脚本的windows计划任务
  • 在powershell脚本中运行一个bat文件
  • bat文件运行.NET可执行文件

我的脚本看起来像这样:

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "Console.bat"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = @("-s SomeArgument")

$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null   

$stdout=""

do
{
   $stdout += $p.StandardOutput.ReadLine()
}
while (!$p.HasExited)

if($stdout.Contains("Error while processing data"))
{
    Start-Sleep -Seconds 30;
    $p.Start() | Out-Null   
}

字符串
问题是,当我运行计划任务时,我看到cmd.exe和conhost.exe进程,我看到.NET exe正在运行,我强制它失败,以便看到进程再次启动,但什么都没有。我只能看到conhost.exe保持打开30秒,然后关闭。该过程不会再次启动
我错过了什么吗?谢谢你的好意

o7jaxewo

o7jaxewo1#

似乎我在最后一部分遗漏了一些东西,我把它改成了这个,它工作了:

if($stdout.Contains("Error while processing data"))
{
Start-Sleep -Seconds 30;
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null   
}

字符串

相关问题