すべての配布リストのメンバーを一括更新する方法について記載する。各部署で異動が行われるたびに手動でメンバーを更新するには手間がかかるため、PowerShellを使用して一括変更する。配布リストには部署を設定する項目が存在しないためCustomAttribute1に部署名を設定した。配布リストの部署情報を設定する項目はCustomAttribute10でもExtensionCustomAttribute1でも問題ないが、組織内で必ず情報を統一すること。
検証環境について
動作確認した検証環境は以下の通り。
OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0
ExchangeOnlineManagementのモジュール名とバージョン
ExchangeOnlineManagement:3.4.0サインインアカウントの権限はグローバル管理者。
使用するコマンド
Get-DistributionGroup
使用例
Get-DistributionGroup -ResultSize unlimited取得できる情報例
Name DisplayName GroupType PrimarySmtpAddress
---- ----------- --------- ------------------
ユーザー全員 ユーザー全員 Universal, SecurityEnabled all-user@*****.onmicrosoft.com
総務部 総務部 Universal soumu@*****.onmicrosoft.com
人事部 人事部 Universal, SecurityEnabled jinji@*****.onmicrosoft.com
Get-Recipient
使用例
Get-Recipient -ResultSize unlimited取得できる情報例
Name RecipientType
---- -------------
佐藤 太郎 MailContact
総務部 MailUniversalDistributionGroup
ユーザー全員 MailUniversalSecurityGroup
システム UserMailbox配布リストのメンバーを一括更新する
#ExchangePowerShellに接続する
Connect-ExchangeOnline
#すべての配布リストからCustomAttribute1の値が$nullでないもの
#(=何か値が設定されているもの)を取得する
$allDgList = Get-DistributionGroup `
-Filter "(GroupType -eq 'Universal') -and (CustomAttribute1 -ne '$null')" `
-ResultSize unlimited
foreach($dg in $allDgList){
#該当するユーザーを絞り込みするための値を設定する
$filterVal = $dg.CustomAttribute1
#ExtensionCustomAttribute1の値を使用するのであれば以下
#$filterVal = $dg.ExtensionCustomAttribute1
#ユーザーの[部署]の値が配布リストの[CustomAttribute1]の値と
#同じであるユーザーメールボックスを全て取得する
$memberList = Get-Recipient `
-RecipientType UserMailbox `
-Filter "Department -eq '$filterVal'" `
-ResultSize unlimited
#配布リストのメンバーを上記で取得したユーザーに変更する
Update-DistributionGroupMember `
-Identity $dg.PrimarySmtpAddress `
-Members $memberList `
-Confirm:$false
}
#ExchangeOnlinePowerShellから接続を切断する
Disconnect-ExchangeOnline -Confirm:$false配布リストのCustomAttribute1の値を一括取得・更新する
配布リストのCustomAttribute1の値を一括取得する
#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"
#CSVの保存先を指定する windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"
#CSVのファイル名を指定する
$csvFileName = "distributionGroup_CustomAttribute1_${yyyyMMddFFFFF}.csv"
#ExchangePowerShellに接続する
Connect-ExchangeOnline
#現在の設定を取得する
$allDgList = Get-DistributionGroup `
-Filter "(GroupType -eq 'Universal')" `
-ResultSize unlimited | Select-Object Name,PrimarySmtpAddress,CustomAttribute1
#CSVファイルとして保存する
$allDgList | Export-Csv -Encoding UTF8 `
-NoTypeInformation `
-Path "${csvSavePath}\${csvFileName}"保存したCSVファイルをメモ帳等で開き、必要ある配布リストのみCustomAttribute1に値を書き込むこと。
配布リストのCustomAttribute1の値を一括変更する
#CSVのデータを取得する
$csvData = Import-Csv -Path "${csvSavePath}\${csvFileName}" -Encoding UTF8
#CSVのデータの分だけ繰り返し
ForEach($db in $csvData){
Set-DistributionGroup `
-Identity $db.PrimarySmtpAddress `
-CustomAttribute1 $db.CustomAttribute1
}
#ExchangeOnlinePowerShellから接続を切断する
Disconnect-ExchangeOnline -Confirm:$false問い合わせフォーム
リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。







