2011年9月6日火曜日

◆C#からPowershellコマンドレットを使う

まずはPowershell用のdll(System.Management.Automation)を参照設定。
このdllは通常、
C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0
にある。

あとはスクリプトを文字列で定義してRunspaceInvokeクラスのInvokeメソッドに渡してやるだけだ。
結果はCollection<PSObject>で返ってくるのでPSObjectを実際の型にキャストしてあげればOK。
目的にもよるのだろうが、単一値の取得などであればPowershellの方で文字列まで変換して返したほうが簡単な気がする。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
using System.Collections.ObjectModel;
using System.Diagnostics;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
//            string script = @"Write-Output 'Start ----'
//                              ps | %{$_.name}";
            string script = @"ipmo ActiveDirectory
                              Get-ADUser test | %{$_.name}";

            RunspaceInvoke ivk = new RunspaceInvoke();
            Collection<PSObject> psList = ivk.Invoke(script);
            foreach (var pso in psList)
            {
                //string st = pso.BaseObject.ToString();
                string st = pso.ToString();

                Console.WriteLine("TestUserName:{0}",st );
            }

            Console.Write("Enter eny key");
            Console.ReadLine();
        }
    }
}

image

0 件のコメント:

コメントを投稿