2012年2月3日

Windows PowerShellで.NETライブラリを動かす

Windows Power Shellから.NETのクラスライブラリを動かしてみました。
クラスライブラが.NET 4.0フレームワークとジェネリックを利用するため、ちょっとはまりましたが、何とかできました。
手順は下記通り

  • PowerShell設定(.NET 4.0クラスライブラリがの時)
     PowerShellはデフォルトで.NET 2.0ランタイムを利用するため、.NET 4.0ランタイムを使うよう設定する必要がある。powershell.exeの実行ファイルフォルダにpowershell.exe.configを追加、中身は下記通り
    <?xml version="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0.30319"/>
            <supportedRuntime version="v2.0.50727"/>
        </startup>
    </configuration>
  • ライブラリをロード
    下記コマンドでクラスライブラリをロードします。ライブラリファイルは絶対パスで指定。
    [Reflection.Assembly]::LoadFrom('C:\XXX\XXX.dll')
  • クラスインスタンスを新規作成
    $obj1 = New-Object test.TestClass1
    $obj2 = New-Object test.TestClass2("Hello World", 1234, "true", [System.DateTime]::UtcNow)
  • プロパティGet/プロパティSet/メソッドコール
    $val = $obj1.Val
    $obj2.Val = 123

    $obj1.echo(“Hello world”)
  • 配列/ジェネリックリスト
    $arrays = "id", "name", "detail"
    $list = New-Object System.Collections.Generic.List[int]
    ジェネリックのタイプがmscorlibアセンブリ以外の場合、下記コマンドでモジュールをインポートする必要があります
    "@{ModuleVersion='1.0'; RequiredAssemblies='XXX.dll'}" | Set-Content ./temp.psd1
    Import-Module ./temp.psd1
    $list2 = New-Object System.Collections.Generic.List[test.TestClass1]

1 件のコメント: