VB から Powershell Script を呼び出す方法についてのメモ。
- まずは参照設定を行います。 (Windows 8 x64 の場合)
C:Program Files (x86)Reference AssembliesMicrosoftWindowsPowerShell3.0System.Management.Automation.dll
- Imports しておきます。
Imports System.Management.Automation Imports System.Management.Automation.Runspaces
- 標準入力を与えて、msg.exe を起動した場合のサンプル。
Using rs = RunspaceFactory.CreateRunspace() rs.Open() Using ps = PowerShell.Create ps.Runspace = rs ' script に与える標準入力 Dim stdin = {"メッセージ1", "メッセージ2"} +' powershell script Dim script = "$OutputEncoding=[System.Text.Encoding]::GetEncoding('Shift_Jis'); " _ & "$input | msg *; " ' 実行 ps.AddScript(script) ps.Invoke(stdin) End Using End Using
- 註1
文字が UTF8 で渡され文字化けが起きるので、$OutputEncoding に ShiftJIS を設定します。
- 註2
OS が x64 かつ、アプリのターゲットCPU が "x86" 、または "AnyCPU で x86 優先" の場合は、「msg *」の部分は「c:windowssysnativemsg *」とします。
- 註1
- 結果を取得する場合のサンプル。
Using rs = RunspaceFactory.CreateRunspace() rs.Open() Using ps = PowerShell.Create ps.Runspace = rs ' script に与える標準入力 Dim stdin = {1, 2, 3, 4} ' powershell script Dim script = "$input | % {$_ * 2}" ' 実行と結果の取得 ps.AddScript(script) Dim results = ps.Invoke(stdin) ' 結果の表示 For Each x In results Console.WriteLine("{0}", x) Next End Using End Using
結果
2 4 6 8