VB.NETやC#からPowerShellのコマンドレットを使用する

VB.NETやC#からPowerShellを利用するには、System.Management.Automation.dllを使用します。

これは通常、システムディレクトリの下の windowspowershell\v1.0\SDK にあります。

この dll を参照設定で追加し、

VB.NETなら


Imports System.Management.Automation


C#なら


Using System.Management.Automation;


を追加します。

VB.NETでPowerShellのGet-Commandコマンドレットを使用する方法について見てみましょう。 

VB.NET内でPowerShellのコマンドレットを実行するには RunspaceInvokeクラスのInvokeメソッドを使用します。

最初にRunspaceInvokeクラスのインスタンスを作成します。 (1)

次にInvokeメソッドを利用して、PowerShellのコマンドレットを実行するのですが、このInvokeメソッドはPSObject型の値を返してきます。

Get-Commandコマンドレットは、複数の値(PSObject型のコレクション)を返すのでFor Eachを使用して1つずつ変数resultへ取り出します。(2)

resultへ代入された個々の値へアクセスするにはMembersプロパティを使用します。(3)

この例ではNameの値を取り出すことになります。

VB.NETのソース


Imports System.Management.Automation

Module Module1

    Sub Main()
        Dim invoker As RunspaceInvoke = New RunspaceInvoke() ・・・・・(1)

        For Each result As PSObject In invoker.Invoke("Get-Command") ・・・・・(2)
            Console.WriteLine(result.Members("Name").Value) ・・・・・(3)
        Next

        Console.ReadLine()
    End Sub

End Module


C# のソース


using System.Management.Automation;

namespace Sample1_CS
{
    class Program
    {
        static void Main(string[] args)
        {
            RunspaceInvoke invoker = new RunspaceInvoke();

            foreach (PSObject result in invoker.Invoke("Get-Command"))
            {
                Console.WriteLine(result.Members["Name"].Value);
            }

            Console.ReadLine();
        }
    }
}


 

ちなみに、Get-Dateコマンドレットのように結果を1つしか返さないようなコマンドレットの場合は

invoker.Invoke("Get-Date")(0).Members("DateTime").Value

 

のように値を取得することもできます。

コメント

タイトルとURLをコピーしました