ExchangeのMLメンバーをPowershellで更新した話
みなさんこんにちは。この記事を夜見ている方はこんばんは。
GWの休みボケが治らず5月病を発病しかけている増田です。
前回はイントラのサイトからCSVファイルをPowershellでダウンロードした・・・という話を書きました。
こんなの作ったよ~って現場で見せた時は大盛り上がりで、それはそれは大きなやりがいを感じる瞬間でした。
種明かしをすると、ただCSVファイルを落としまくっただけではなく、実はこのCSVはExchange Onlineのメーリングリスト(配布リスト、メール利用可能なセキュリティグループ)に登録したいメンバーが記載されたリストなのでした。
・・・というわけで今回はExchangeのML更新処理について記載します。
大枠の流れは以下のような感じです。
MLの登録メンバーを取得する
対応するCSV(変更後のメンバーリスト)を読み込む
追加登録すべきアドレス、登録解除すべきアドレスを割り出す
メンバー追加する
メンバー削除する
使うExchangeモジュールのコマンドレットは以下3つです。
Get-DistributionGroupMember
Add-DistributionGroupMember
Remove-DistributionGroupMember
1は↓こんな感じで。CSVはメンバーのメールアドレスが一覧化されているので、比較できるように結果のPrimarySmtpAddressだけ取ります。
Get-DistributionGroupMember -Identity <MLの識別子> -ResultSize Unlimited | Select-Object PrimarySmtpAddress
2は普通にImport-Csvで必要なメールアドレスの一覧を読み込みます。
3は以下のようにして2つの配列($a、$b)の差分を2回に分けて取る(1の配列 - 2の配列 = 削除対象者、2の配列 - 1の配列 = 追加対象者)だけです。
$sub = $a | Where-Object { $b -notcontains $_ }
4は↓こんな感じです。
<追加対象者のリスト> | Foreach-Object { Add-DistributionGroupMember -Identity <ML識別子> -Member $_ }
同様に、5は↓こんな感じです。
<削除対象者のリスト> | Foreach-Object { Remove-DistributionGroupMember -Identity <ML識別子> -Member $_ -Confirm:$false }
・・・とまあこんな感じの簡単な処理を一連のスクリプトにまとめて、定期的に実行できるようにタスク登録すれば、裏で勝手にメンバー更新してくれるようになり、得られた感謝がやりがいに直結するというカラクリです。
それでは今日はこの辺で。。。