我从这里得到了一些启发: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秒,然后关闭。该过程不会再次启动
我错过了什么吗?谢谢你的好意
1条答案
按热度按时间o7jaxewo1#
似乎我在最后一部分遗漏了一些东西,我把它改成了这个,它工作了:
字符串