[VB.NET][PS1] VB から Powershell Script を呼び出す

2014年12月12日

 VB から Powershell Script を呼び出す方法についてのメモ。

  1. まずは参照設定を行います。 (Windows 8 x64 の場合)
    C:Program Files (x86)Reference AssembliesMicrosoftWindowsPowerShell3.0System.Management.Automation.dll
    
  2. Imports しておきます。
    Imports System.Management.Automation
    Imports System.Management.Automation.Runspaces
    
  3. 標準入力を与えて、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 *」とします。

  4. 結果を取得する場合のサンプル。
    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
    





カテゴリー: PowerShell, Program, VB.NET, Windows

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org