« コンソールコマンド出力をHTAウィンドウにテキスト形式で表示、印刷、名前を付けて保存する。 | トップページ | PowerShellの外部への出力が79桁で折り返される。 »

2010年7月15日 (木)

PowerShellのワンライナをWScript.ShellのExec()すると、終了待ちが解けない。

例えば、

MsgBox CreateObject("WScript.Shell").Exec("PowerShell ""dir""").StdOut.ReadAll

は、コンソールが開いたまま動きません。コンソールを閉じると動きます。

PowerShellが標準入力を待つからのようです。

この待ちを解くには、スクリプトから、StdIn.Closeするか、あるいは、コマンドラインの先頭に、"cmd /c <nul "を付けます。

Set oExec=CreateObject("WScript.Shell").Exec("PowerShell ""dir""")
oExec.StdIn.Close
MsgBox oExec.StdOut.ReadAll

または、

MsgBox CreateObject("WScript.Shell").Exec("cmd /c <nul PowerShell ""dir""").StdOut.ReadAll

« コンソールコマンド出力をHTAウィンドウにテキスト形式で表示、印刷、名前を付けて保存する。 | トップページ | PowerShellの外部への出力が79桁で折り返される。 »