我错误地使用下面的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无法操作的语法。
答案 0 :(得分:1)
显然,将数组传递到write-host时会出现问题,这会破坏将来的命令输入。