" Start-Process -NoNewWindow"在一个开始工作?

时间:2014-07-11 03:12:21

标签: powershell powershell-v2.0 start-job start-process

我在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

返回以下错误,显然谷歌没有听说过:

  

接收作业:处理来自后台进程的数据时出错。报告错误:无法处理节点类型为" Text"的元素。仅支持Element和EndElement节点类型。

如果我删除-NoNewWindow一切正常。我是在做傻事,还是无法开始包含Start-Process -NoNewWindow的工作?有什么好的选择?

1 个答案:

答案 0 :(得分:1)

有点晚了,但对于仍然遇到此特定错误消息问题的人来说,此示例的一个修复是使用-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

希望这有帮助。