我在启动作业中使用启动进程时遇到问题,特别是在使用时-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
返回以下错误,显然谷歌还没有听说过:
接收作业:处理来自后台进程的数据时出错。报告错误:无法处理节点类型为“文本”的元素。仅支持 Element 和 EndElement 节点类型。
如果我删除-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
希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)