この記事は、Office 365 Advent Calendarに参加しています。
AD FSやディレクトリ同期を利用すると、オンプレミスのADとOffice365の間でシームレスな運用が可能になります。ただ、
- 同期間隔が3時間
- 同期後のサブスクリプションの割り当てが管理者が実行しなくてはならない
など、いくつか運用として管理者が対処を行わなければならない部分が存在します。
今回はディレクトリ同期で新規で作成されたユーザーに対してOffice365のプロビジョニング(サブスクリプションの割り当て)を自動で実施できるようにしたいと思います。特に社内でIdMなどを利用している場合などについては有用だと思います。
同期ユーザーの中でどのユーザーにライセンスを割り当てるかの判定は、各組織によって色々と実装方式は有ると思いますが、今回WAAD Premium のグループ管理機能と同じようにグループで判断したいと思います。
まずは、以下の内容のps1スクリプトファイルを作成して適当なフォルダに配置します。管理者のID、PassやSKU(Get-MsolAccountSkuコマンドで取得可能)、グループ名などは実際の環境に合わせて修正してください。今回はc:workscriptsautodirsync.ps1として保存します。
###################################################################### # # Office 365 Auto Provisioning Script for DirSync (autodirsync.ps1) # 2013/12/11 https://blog.o365mvp.com/ # ###################################################################### $adminuser = "admin@contoso.onmicrosoft.com" # TenantAdmin UserName $adminpass = "P@ssw0rd" # TenantAdmin Passrord $group = "Office365e3" # Target Group $sku = "contoso:ENTERPRISEPACK" # Office365 SKU ID (cf.Get-MsolAccountSku) $skuname = "E3" # Office365 SKU name $log = "c:workscriptsautodirsync.log" # Log Filename (Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Office 365 Auto Provisioning Script Start" | Out-File $log -Append sleep 60 # Wait for reflect DirSync information Import-Module MSOnline $password = ConvertTo-SecureString $adminpass -AsPlainText -Force $LiveCred = New-Object System.Management.Automation.PSCredential $adminuser,$password Connect-MsolService -Credential $LiveCred $member = Get-MsolGroupMember -GroupObjectId (Get-MsolGroup -SearchString $group).ObjectId -All $unlicensed = Get-MsolUser -UnlicensedUsersOnly foreach ( $user in $unlicensed ){ $result = $member | ? {$_.ObjectID -eq $user.ObjectID} if ($result) { (Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Add $skuname License to " + $user.UserPrincipalName | Out-File $log -Append Set-MsolUser -UserPrincipalName $user.UserPrincipalName -UsageLocation JP Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -AddLicenses $sku } } (Get-Date -Format "yyyy/MM/dd HH:mm:ss") + " Office 365 Auto Provisioning Script Finished" | Out-File $log -Append
このスクリプトをディレクトリ同期が終了したタイミングで実行すれば良いので、今回はタスクのトリガーで実行したいと思います。バージョンにより異なりますが、サーバのイベントログを確認して、Directory Syncronizationサービスの4か114のExport完了のイベントログを特定します。
続いてはタスクスケジューラへの登録です。右の操作ペインから基本タスクの作成を選択してウィザードを起動します。
名前は適当に付けて、トリガーを「特定イベントのログへの記録時」にして、ソースやイベントIDは前の項目で特定したエクスポート完了時のイベントログを指定します。
実施するアクションはプログラムの開始にします。.ps1のスクリプトファイルをタスクから起動する場合は、プログラム/スクリプトの項目には c:windowssystem32WindowsPowerShellv1.0powershell.exe を、引数として -command [.ps1スクリプトのフルパス]を指定します。
最後に、作成したタスクのプロパティを開いて、[ユーザーがログオンしているかどうかにかかわらず実行する]を選択して実行アカウントのパスワードを保存します。
これにより、デイレクトリ同期完了後、指定のグループ(上記ではOffice365e3)のメンバーでライセンスの割り当てられていないユーザーが存在した場合には自動的にライセンスが割り当てられるようになります。
実際の運用の中では、環境に応じてsleepの値を調整したりUsageLocationにJP以外が有ったり複数のサブスクリプションがある場合はその処理部分などを修正すれば良いかと思います。ライセンスの残数を見て閾値を下回ったら自動的にメールを飛ばすなども入れておくと楽になりますね。