2013年7月20日土曜日

[Office365]PowerShellを使った自動化を行う際のTIPS

Office365 の管理を自動化する際、PowerShell を使うのが一般的かと思います。

例えば、Forefront Identity Manager(FIM)を使って Office365 のアイデンティティ管理を行う場合も海外の事例を見ているとデンマークの FIM MVP の Soren が提供している PowerShell MA と Office365 用のスクリプトを組み合わせて対応している例が多いようです。

 PowerShell Management Agent

しかし、実際に PowerShell を使って Offie365 の管理の自動化を行う際に一番最初に引っかかるのが Connect-MsolService コマンドレットでの ID / パスワードのポップアップです。



バックグラウンドで使おうと思うとこのようなユーザ・インタラクションは回避したいところです。

ということで、今回は PowerShell で Credential 情報をポップアップせずに入力する方法の紹介です。

まず、問題になるのはパスワードの扱いです。Connect-MsolService 自体は -Credential オプションに PSCredential 型のオブジェクトを渡してあげることでポップアップせずに実行することが出来ますが、この PSCredential 型のオブジェクトを作成する際に使うパスワードが普通の文字列ではなく、SecureString という型なので、平文をそのまま渡してもうまくいきません。

ということでひと工夫です。

まず、SecureString として入力したパスワードをファイルに保存します。
> Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File pwd.txt
******* <- p="">
結果出来上がったファイル(pwd.txt)の中にはハッシュ化されたパスワードが保存されます。
> cat .\pwd.txt
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000c40a300be3002b4a9920bd16c95a674b000000000200000000001066000000010000200000002a7eb8f2b74a57c5a22ab44b53c3b4d685d1c227575e9ee3ceb7f8eb16d1a2e3000000000e8000000002000020000000ca45d7964ca3162a30dcb5d680490235a9899cf1a72ef55c3271982e22d307ab20000000ed0adf53a7ce(以下、略)

これでパスワードを保存できましたので、変数に入れておきます。
> $password = cat .\pwd.txt | ConvertTo-SecureString

これを元にクレデンシャル情報を生成します。
> $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList user@xxx.onmicrosoft.com,$password

これのクレデンシャル情報を使って Offie365 へ接続します。
> Connect-MsolService -Credential $cred


これでポップアップなしに Office365 へ接続できますので、バックグラウンドでの処理を行うことが出来ます。

ちょっとした小ネタでした。

0 件のコメント: