VB.NETからPowerShellを利用する
VB.NETからPowerShellを利用するには?(peerさんからの質問です)
今回は、PowerShellのコマンドもしくはスクリプトを記述した文字列を、
VB.NETで実行・評価する方法を紹介します。
利用手順
System.Management.Automation.dllを参照に追加する
デフォルトでは「C:\Program Files\Windows PowerShell\v1.0」あります。
必要な名前空間をインポート
Imports System.Management.Automation Imports System.Management.Automation.Runspaces
RunspaceInvokeオブジェクトを生成する
Dim runspaceInvoke As RunspaceInvoke = New RunspaceInvoke()
invokeメソッドで、スクリプト文字列を実行・評価する
Dim result As Object = _ runspaceInvoke.Invoke("get-process | ?{$_.name -like ""win*""}")
結果を確認する
以下は実行結果となるPSObjectオブジェクトのメンバを確認しています。
For Each member As PSMemberInfo In result(0).Members() Debug.Print(member.Name & ":" & member.Value.ToString()) Next
出力結果は以下のようになります。
__NounName:Process Name:winlogon Handles:479 VM:64794624 WS:5132288 PM:8908800 NPM:54656 ・ ・ ・
※途中、特定のプロパティ解析時、エラー(NullReferenceException)が出ます。
printする前に、存在チェックが必要ですね。(^^;
上記サンプルのソース
Dim runspaceInvoke As RunspaceInvoke = New RunspaceInvoke() Dim result As Object = _ runspaceInvoke.Invoke("get-process | ?{$_.name -like ""win*""}") For Each member As PSMemberInfo In result(0).Members() If IsNothing(member) = True Then Continue For Debug.Print(member.Name & ":" & member.Value.ToString()) Next
VSでWindowsアプリケーションを選び、フォームにボタンを配置。
ボタンのClickイベントに書いたコードです。
ソースの先頭でImportsを忘れずに・・・。
Imports System.Management.Automation
Imports System.Management.Automation.Runspaces