Azure上からIT管理の自動化ができるAzure Automationですが、Igniteやde:codeを見ていても、Microsoftの自動化ツールの中心になっていくのではと思っています。solution.realtech.jp
Azure Automationでは実行エンジンとしてPowerShell Workflowを使っています。このため、自動化の実装で利用できるのはPowerShellのみです。
C#のクラスライブラリを使いたい場合はPowerShellを通して呼び出すことになります。ここでは、Azure AutomationでC#ライブラリを使う方法の一例を書こうと思います。
クラスライブラリ
以下のような「MyClassLibrary.dll」というDLLを持っていたとします。これをAzure Automationで使いたいです。
using System; namespace MyClassLibrary { public class MyMessage { public static string GetMessage(string Name) { return String.Format("Hello {0} !", Name); } } }
PowerShellコマンドレット
以下のように参照にSystem.Management.Automationを追加して、PowerShellコマンドレットを開発ます。ここから先程のDLLを呼び出しています。
DLLファイル名は「GetMessageCmdlet.dll」とします。
using System; using System.Management.Automation; using MyClassLibrary; namespace GetMessageCmdlet { [Cmdlet(VerbsCommon.Get, "HelloMessage")] public class GetHelloMessage : Cmdlet { [Parameter] public string Name { get; set; } protected override void ProcessRecord() { WriteObject(MyMessage.GetMessage(Name)); } } }
PowerShell Module化
SampleCmdletというフォルダを作成し、そこにPowerShellマニュフェストファイルを出力します。
New-ModuleManifest .\SampleCmdlet\SampleCmdlet.psd1
ファイルの中身を以下のように書き換えます。
#省略 RootModule = 'SampleCmdlet.dll' #省略 NestedModules = @('MyClassLibrary.dll') #省略
この時点でPowerShellモジュールのフォルダ構造ができました。モジュールをインポートして利用できるところまで確認できます。
PS> gci .\SampleCmdlet Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2015/07/24 21:43 4608 GetMessageCmdlet.dll -a--- 2015/07/24 21:43 4608 MyClassLibrary.dll -a--- 2015/07/24 21:45 4014 SampleCmdlet.psd1
PS> Import-Module .\SampleCmdlet
PS> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0 SampleCmdlet Get-HelloMessage
PS> Get-HelloMessage -Name yomon8 Hello yomon8 !
PowerShellモジュールをAzure Automationにアップロードして使う
まずはモジュールのフォルダ「.\SampleCmdlet」をZIPにします。「SampleCmdlet.zip」とします。
Azure Preview Portalからアップロードしてみます。
Azure Automationアカウント>アセット>モジュール>モジュールの追加でZIPファイルをアップロードします。
モジュールの読み込みが終わるまで数分待ちます。
読み込みが完了すればRunbookのコマンドレットとして使えるようになります。
実行すれば、DLLを使って処理が動いていることがわかります。
注意点
Azure Automationが実際に実行されているのはWindows Serverのはずですが、それでも手元のWindowsで動く全てのクラスライブラリが動くわけではありません。
WMIなどは使えないようですが、.Netの標準ライブラリは使えるので、それでOSの情報などを取得するとヒントになるかもしれません。yomon.hatenablog.com
Hybrid Workerを使ったオンプレミス環境などの自動化を行う場合は、Hybrid Worker側のOSにPowerShellモジュールをインストールします。PSModulePathに配置したり、Import-Moduleで明示的にインポートすれば使えます。