配布リストのメンバーシップをメールボックス間で移動する方法

配布リストのメンバーシップをメールボックス間で移動する方法

配布リストのメンバーシップを別のユーザー アカウントに転送する最善の方法を質問する読者これが少数の DL を含む 1 回限りの操作である場合、適切な解決方法として、適切な管理インターフェイス (Microsoft 365 管理センター、Exchange 管理センター、または PowerShell) を使用して、新しいアカウントを DL に追加します。

配布リストの更新の自動化

GUI を使用して配布リストのメンバーシップに対するいくつかの調整を処理することは許容されます。しかし、30 または 40 の配布リストのメンバーシップを調整する必要がある場合 (ユーザーが転職したときに発生する場合もあります) は、プロセスを自動化する方が良いです (退屈を避けるためだけ)。

Exchange オンライン PowerShell の機能により、このタスクは非常に簡単になります。基本的なアプローチは次のとおりです。

  • ソース メールボックスを検索します (存在するかどうか確認します)。
  • ターゲット メールボックスを検索します。
  • ソース メールボックスがメンバーである配布リストのセットを検索します。メールボックスが配布リストに属していない場合は、その配布リストを選択して終了します。
  • 転送する配布リストのセットを表示し、続行する承認を求めるプロンプトを表示します。
  • [はい]の場合は、先に進み、対象のメールボックスをセット内の各配布リストのメンバーシップに追加します。必要に応じて、同じ配布リストから移行元のメールボックスを削除します。

この原理を説明するコードを次に示します。

$SM = Read-Host "Enter name of source mailbox"
$SourceMailbox = (Get-ExoMailbox -Identity $SM -ErrorAction SilentlyContinue -RecipientTypeDetails UserMailbox)
If (!($SourceMailboxDetails)) { Write-Host "Unable to find mailbox for" $SM " - exiting"; break }
$TM = Read-Host "Enter name of target mailbox"
$TargetMailbox = (Get-ExoMailbox -Identity $TM -ErrorAction SilentlyContinue -RecipientTypeDetails UserMailbox)
If (!($SourceMailboxDetails)) { Write-Host "Unable to find mailbox for" $TM " - exiting"; break }
$DN = $SourceMailbox.DistinguishedName
$NewDN = $TargetMailbox.DistinguishedName
[array]$DLs = (Get-DistributionGroup -ResultSize Unlimited -Filter "Members -eq '$DN'" | Select DisplayName, Notes, ExternalDirectoryObjectId, ManagedBy, PrimarySmtpAddress)

If ($DLs.Count -eq 0) { Write-Host "Sorry, but" $SourceMailbox.DisplayName "isn't a member of any distribution groups - exiting" ; break }

CLS
$DLs | Format-Table DisplayName, PrimarySMTPaddress -AutoSize
$PromptTitle="Transfer membership of Distribution Lists"

$PromptMessage="Please confirm whether to go ahead and transfer membership of " + $DLS.Count + ' distribution lists from ' + $SM  + ' to ' + $TM
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&yes", 'yes?'
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&no", 'no?'
$cancel = New-Object System.Management.Automation.Host.ChoiceDescription "&cancel", 'Exit'
$PromptOptions = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no, $cancel)
$PromptDecision = $host.ui.PromptForChoice($PromptTitle, $PromptMessage, $PromptOptions, 0) 

If ($PromptDecision -eq 0) { # Yes
  ForEach ($DL in $DLs) {
     Write-Host "Adding user" $TargetMailbox.DisplayName "to DL" $DL.DisplayName "and removing" $SourceMailbox.DisplayName
     Add-DistributionGroupMember -Identity $DL.ExternalDirectoryObjectID -BypassSecurityGroupManagerCheck -Member $TargetMailbox.PrimarySmtpAddress -ErrorAction SilentlyContinue
     Remove-DistributionGroupMember -Identity $DL.ExternalDirectoryObjectId -Confirm:$False -Member $SourceMailbox.PrimarySmtpAddress -BypassSecurityGroupManagerCheck -ErrorAction SilentlyContinue
  } # End Foreach
} # End if

[array]$NewDLs = (Get-DistributionGroup -ResultSize Unlimited -Filter "Members -eq '$NewDN'" | Select DisplayName, Notes, ExternalDirectoryObjectId, ManagedBy, PrimarySmtpAddress)
Write-Host " "
Write-Host ("All done. {0} is now a member of {1} distribution lists." -f $TargetMailbox.DisplayName, $NewDLs.Count)
$NewDLs | Format-Table DisplayName, PrimarySmtpAddress

ソース メールボックスが配布リストの所有者かどうか、削除によって配布リストが所有者なしの状態になっているかどうか (これは良くない) など、コードに対して多くの機能強化が行われます。コードは Exchange Online 用に記述されていますが、いくつかの調整 (切り替えなど) でオンプレミスで動作する必要があります メールボックスを取得する 対して 取得 -エキソメールボックス 配布リスト ID に別のプロパティを使用します)。

動的配布リスト メンバーシップの処理

動的配布リストのメンバーシップの転送は、より困難です。 動的配布リスト 受信者のセットを解決するには、Exchange ディレクトリに対して実行されるクエリ (フィルタ) に依存します。フィルタは、部署や市区町村などの既知のオブジェクト プロパティのセットに対して実行される、事前設定できます。または、リスト所有者または保守担当者は、 PowerShell を使用してカスタム フィルターを作成する をクリックして、メールが有効なオブジェクトで使用できるプロパティに対してクエリを実行します。カスタムフィルタは、検索するための優れた方法です。

既定のフィルターとカスタム フィルターの両方が、ディレクトリ データに依存します。したがって、あるメールボックスから別のメールボックスにメンバーシップを転送するには、フィルタで使用されるプロパティを理解し、ディレクトリ内のターゲット メールボックスのプロパティを調整して、フィルターの実行時に結果セットにターゲット メールボックスが含まれるようにする必要があります。PowerShell を使用してディレクトリプロパティを更新して、メールボックスが事前設定されたカスタム フィルタまたは単純なカスタム フィルタで見つかるようにすることができますが、これはより困難になります。 複雑なカスタム フィルタ.あるメールボックスから別のメールボックスへのメンバーシップの移動に関連する可能性がある動的配布リストの数を考えると、手動で変更を行うことをお勧めします。

そして、グラフ?

また、Microsoft グラフ グループ API を使用して配布リストのメンバーシップを転送することもできます。しかし、これは、単純でシンプルな PowerShell が必要な状況の例です。更新を大幅に高速化することはなく、コードの記述に長い時間を費やします。これは良いトレードオフではないので、PowerShellに固執し、ほんの数個のコマンドでこのような操作を自動化するのがいかに簡単かを考えます。


Office 365 が実際にどのように機能するかについては、サブスクリプションを作成してください。 IT 担当者向け Office 365 電子書籍。毎月の更新プログラムでは、Office 365 エコシステム全体で重要な情報を購読者に通知します。


未分類

Posted by admin