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
のように値を取得することもできます。
コメント