ExchangeOnline

ExchangePowerShellを利用して配布リストのメンバーを一括更新する

すべての配布リストのメンバーを一括更新する方法について記載する。各部署で異動が行われるたびに手動でメンバーを更新するには手間がかかるため、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へお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

    ExchangeOnlineでメールが検疫された際にユーザーに通知メールが送信されるよう設定する前のページ

    ExchangeOnlinePowershellからMicrosoft365グループを一括作成する次のページ

    関連記事

    1. ExchangeOnline

      ExchangePowershellを使用して配布リストのメンバーを一括取得する

      配布リストに所属するメンバーの一覧を一括取得しCSVファイル…

    2. ExchangeOnline

      ExchangePowerShellを使用して会議室を一括作成する

      会議室メールボックスをCSVファイルから一括作成する方法につ…

    3. ExchangeOnline

      CSVから共有メールボックスのアクセス権を一括設定する

      共有メールボックスのアクセス権を一括設定する方法について記載…

    4. ExchangeOnline

      ExchangePowerShellを使用してMicrosoft365グループへCSVからメンバーを…

      Microsoft365グループにアカウントを一括追加する方…

    5. PCからメールが飛び出す画像

      ExchangeOnline

      ユーザーメールボックスのメッセージサイズを確認、変更する

      ユーザーメールボックスのメッセージサイズをPowerShellを使用し…

    最近の記事

    PAGE TOP