我在Start-Job中使用Start-Process时遇到问题,尤其是在使用-NoNewWindow
时。例如,此测试代码:
Start-Job -scriptblock {
Start-Process cmd -NoNewWindow -Wait -ArgumentList '/c', 'echo' | out-null
Start-Process cmd # We'll never get here
}
get-job | wait-job | receive-job
get-job | remove-job
返回以下错误,显然谷歌还没有听说过:
如果我删除
-NoNewWindow
,一切正常。我是在做傻事,还是没有办法开始包含Start-Process -NoNewWindow
的工作?有什么好的选择吗? 最佳答案
有点晚了,但是对于仍然对此特定错误消息仍有疑问的人,此示例的一个解决方法是使用-WindowStyle Hidden
而不是-NoNewWindow
,我发现-NoNewWindow
似乎在很多时候被忽略了,并导致了自己的问题。
但是对于这个似乎是通过将Start-Process
与各种可执行文件结合使用而产生的特定错误,我发现似乎一致工作的解决方案是重定向输出,因为返回的输出似乎引起了问题。不幸的是,尽管这样做确实会导致写入临时文件并清除它。
举个例子;
Start-Job -ScriptBlock {
# Create a temporary file to redirect output to.
[String]$temporaryFilePath = [System.IO.Path]::GetTempFileName()
[HashTable]$parmeters = @{
'FilePath' = 'cmd';
'Wait' = $true;
'ArgumentList' = @('/c', 'echo');
'RedirectStandardOutput' = $temporaryFilePath;
}
Start-Process @parmeters | Out-Null
Start-Process -FilePath cmd
# Clean up the temporary file.
Remove-Item -Path $temporaryFilePath
}
Get-Job | Wait-Job | Receive-Job
Get-Job | Remove-Job
希望这会有所帮助。