見出し画像

ExchangeのMLメンバーをPowershellで更新した話

みなさんこんにちは。この記事を夜見ている方はこんばんは。
GWの休みボケが治らず5月病を発病しかけている増田です。

前回はイントラのサイトからCSVファイルをPowershellでダウンロードした・・・という話を書きました。
こんなの作ったよ~って現場で見せた時は大盛り上がりで、それはそれは大きなやりがいを感じる瞬間でした。

種明かしをすると、ただCSVファイルを落としまくっただけではなく、実はこのCSVはExchange Onlineのメーリングリスト(配布リスト、メール利用可能なセキュリティグループ)に登録したいメンバーが記載されたリストなのでした。

・・・というわけで今回はExchangeのML更新処理について記載します。

大枠の流れは以下のような感じです。

  1. MLの登録メンバーを取得する

  2. 対応するCSV(変更後のメンバーリスト)を読み込む

  3. 追加登録すべきアドレス、登録解除すべきアドレスを割り出す

  4. メンバー追加する

  5. メンバー削除する

使う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 }

・・・とまあこんな感じの簡単な処理を一連のスクリプトにまとめて、定期的に実行できるようにタスク登録すれば、裏で勝手にメンバー更新してくれるようになり、得られた感謝がやりがいに直結するというカラクリです。

それでは今日はこの辺で。。。

いいなと思ったら応援しよう!