PowerShell VBAでPowerShellを実行して結果を取得する(Exec編)【初実験編07】

2018-12-09

Excel(VBA)からPowerShellを実行して、結果をセルに出力してみる

 

VBAからPowerShellを実行するには、WshShellオブジェクトを使用しますが、
Execメソッドを使って実行すると、PowerShellの実行画面が表示されてしまい、目障りです。

実行方法には、Execメソッド以外に、Runメソッドを使用する方法もあり、それぞれ下のような特徴があります。
・Runメソッドは、実行するウィンドウを非表示にできますが、Execメソッドではできません。
・Runメソッドは、実行結果を標準出力から拾うことはできませんが、Execメソッドではそれが可能です。
・Runメソッドは、処理の完了を待つことができますが、Execメソッドで完了を判定するには、監視が必要です。

今回はPowerShellの実行画面が表示されてしまうのはあきらめて、比較的簡単に実装できるExecメソッドを使った方法を試してみます。

実行結果は、名前参照を設定した結果出力用のセルを準備し、そこに表示させるように実装します。
過去の投稿「Excel お手軽名前参照」を見て、結果出力用のセルに名前を付けます
(”testCell”という名前にしました)

Execメソッドを用いた実装

コマンドボタンを配置して、クリックイベントのSubプロシージャを実装します

スリープを使うので、この宣言が必要です。

クリックイベントではこんな感じ。

 ExecPowerShell()の中身

コマンドを受けて、実行し、終わるのを待って、出力結果を返します

PowerShellの画面が一瞬現れるので目障りですが、実装は比較的シンプルです。
しかし、処理の完了をsleepを入れて監視する必要があるところは、あまりいい気持ちがしません。
PowerShell Treeをファイルにリダイレクトしてみた【初実験編01】
PowerShell 同一階層のファイル名一覧をテキストファイルにリダイレクトしてみる【初実験編02】
PowerShell 起動方法(Windows10)【初実験編03】
PowerShell ファイル名の一括置換【初実験編04】
PowerShell ファイル検索【初実験編05】
PowerShell 文字列検索【初実験編06】
PowerShell VBAでPowerShellを実行して結果を取得する(Exec編)【初実験編07】
PowerShell VBAでPowerShellを実行して結果を取得する(Run編)【初実験編08】
PowerShell UNIXのシェルやDOSコマンド【初実験編09】