PowerShell呈现exes命令是否惰性?

时间:2011-01-25 17:21:37

标签: powershell command return exe

我错误地使用下面的PowerShell构造来捕获stdout:

 $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无法操作的语法。

1 个答案:

答案 0 :(得分:1)

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

显然,将数组传递到write-host时会出现问题,这会破坏将来的命令输入。