我错误地使用了以下PowerShell构造来捕获标准输出:

 $output = devenv.exe .....

或者,如果我将exe作为函数参数调用:
 obj.LogOutput((devenv.exe ...))

执行这些命令中的任何一个之后,在同一命令窗口内执行的所有将来的命令将不执行任何操作。例如,如果我运行了devenv,echo或xcopy,它们将立即返回而不执行。如果我运行“devenv /?”没有产出。如果关闭命令窗口并启动一个新窗口,则一切恢复正常。我能够再次执行这些命令。

是什么赋予了?我知道语法不正确,但是PowerShell绝对不会在语法上出错。相反,它在执行后续EXE时会静默失败(PowerShell命令继续起作用,顺便说一句)。那么我的语法让PowerShell如此糟糕呢?我之所以这么问,是因为我再次看到了这种现象,但是我可以在脚本中找到以上任何一种构造。

更新:我最好的猜测是这种结构:
$o = new-object psobject
$o | add-member -force -memberType ScriptMethod -name Test -value { param($t) $t > c:\temp\output.txt" }
$o.Test((xcopy /?))

这与在我的原始脚本中导致问题的代码行非常相似,但是独立的此代码无法重现该问题。无论如何,我认为我不会梦到任何会使所有EXE无法运行的语法。

最佳答案

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/5148df55-b1bf-4eeb-a84c-ca0e1a728db4

显然存在将数组传递到写入主机的问题,这会破坏将来的命令输入。

关于powershell - PowerShell使exes命令呈惰性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4796725/

10-17 03:14