500人を超える従業員が企業のメールを使用している会社でMicrosoft Exchange Server 2016を6か月間使用していたときに、 Active Directoryで無効になっているユーザーに関する情報を完全に削除する問題に遭遇しました。
ADでユーザーアカウンティングを無効にした後に自動化するタスク:
- メインおよびアーカイブメールボックスからすべてのレターを.pstファイルにエクスポートします。
- レターをエクスポートした後の完全なメールボックスロック。
- 「デッドユーザー」のすべてのメーリングリストをクリアする(自動的にクリアされない)。
- アクティブなユーザーに切断されたユーザーが表示されないように、 グローバルアドレス一覧とオフラインアドレス帳を更新します。
手作業が完全に嫌いだと感じたため、 PowerShellを使用してこれらすべてのタスクを自動化することにしました。
準備:
Exchange Management PowerShellライブラリを接続します。
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;
Active Directoryで切断されたすべてのユーザーのリストを取得し、一部のサービスレコードを除外します。
$DisableUsers = get-user -Filter {(UserAccountControl -eq 'AccountDisabled, NormalAccount') -and (RecipientType -eq 'UserMailbox')} | ? {($_.SamAccountName -ne 'krbtgt') -and ($_.SamAccountName -ne 'SM_2013a5b0c2bd4ca2a') -and ($_.SamAccountName -ne 'testvc')}
変数を宣言します:
# . $BatchName = 'MassRequest' # $CMounth = (Get-Date).month $CYear = (Get-Date).year $CurrentDate = "$CYear.$CMounth" # . $MainDir = "\\% %" $ExportPath = $MainDir + $CurrentDate + "\"
処理中:
解雇されたユーザーの.pstアーカイブを見つけやすくするために、Year.Monthビューのフォルダーを作成することにしました。 したがって、2017年4月にレイオフされたすべてのユーザーは2017.4フォルダーに分類され、5月に2017.5フォルダーにレイオフされます。
# , ., , . if ((Test-Path $ExportPath -PathType Container) -eq $false){ New-Item -Path $MainDir -Name $CurrentDate -ItemType "directory" }
無効なユーザーのサイクルでは、メインおよびアーカイブメールボックスから.pstファイルのメールをアンロードし、Year.Monthフォルダーに保存します。
-BatchNameパラメーターを使用して、1つの名前でリクエストを組み合わせて、各リクエストを個別にではなく、アップロード全体のステータスを一度に追跡できるようにします。
foreach($User in $DisableUsers){ $PrimaryPath = $ExportPath + $User.SamAccountName + ".pst" $ArhivePath = $ExportPath + $User.SamAccountName + "_Archive.pst" New-MailboxExportRequest -Mailbox $User.SamAccountName -BatchName $BatchName -FilePath $PrimaryPath New-MailboxExportRequest -Mailbox $User.SamAccountName -BatchName $BatchName -FilePath $ArhivePath -IsArchive }
スクリプトが機能するのを待っています。 待つ必要があります さらに、メールボックスを無効ステータスに転送し、この前にメールのアンロードが終了したことを確認したいと思います。
# , $i=1; while ((Get-MailboxExportRequest -BatchName $BatchName | Where {($_.Status -eq “Queued”) -or ($_.Status -eq “InProgress”)})) { sleep 60 Write-Host " $i . .." $i=$i+1 }
エクスポートが完了したら、ステータスが完了になったすべてのリクエストを削除します
# Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest -Confirm:$false
最初の部分が完了したら、メーリングリストのクリーニングを開始します。 まず、すべてのリストの配列を取得します。
# . . $DistribList = Get-DistributionGroup
サイクルで、すべてのメーリングリストを調べて、切断されたユーザーを削除します。
# foreach($List in $DistribList){ foreach($User in $DisableUsers){ Remove-DistributionGroupMember -Identity $List -Member $User -Confirm:$false -ErrorAction Ignore } }
最後から2番目の段階:メールボックスを無効にします。 ADのユーザーのアカウントから電子メールが消え、メールボックス自体が削除されます。 現在では、標準のExchangeツールを使用してしばらくの間のみ復元できます。
# , foreach($User in $DisableUsers){ Disable-Mailbox -Identity $User.SamAccountName -Archive -Confirm:$false Disable-Mailbox -Identity $User.SamAccountName -Confirm:$false }
ユーザーができるだけ早く変更を確認できるように、GALとOABを更新します。
# Global Adress List, Get-GlobalAddressList | Update-GlobalAddressList Get-OfflineAddressBook | Update-OfflineAddressBook Get-AddressList | Update-AddressList
小さなコメント:
当社では、この処理を1Cのカスタムボタンに添付しました。 従業員のプロファイルの人事部門は、彼にステータス「解雇」を設定し、スクリプトが機能し始めます。
したがって、アドレス帳で切断されたユーザーを確認することはほとんど不可能であり、解雇された従業員はすぐにメールにアクセスできなくなります。 ( Active Directoryでアカウンティングをオフにするだけの場合、従業員は依然としてメールにアクセスできますが、これは当社のポリシーでは受け入れられません)。
誰かがこのスクリプトを役に立つと思うことを願っています。 よろしくお願いします!