AD 上から削除されたユーザーを検出して SharePoint 上から削除する

こんにちは。SharePoint サポートチームの荒川です。
今回は AD 上から削除されたユーザーを検出して SharePoint 上から削除する便利なスクリプトをご紹介します。
通常は削除しなくても問題ありませんが、運用上の都合により古い情報を残しておきたくない場合には役に立つかもしれません。

概要
一度 SharePoint に登録したユーザーは、AD 上から削除されても SharePoint のユーザー情報に残ります。このスクリプトでは、AD 上から削除されたユーザーを検出して、SharePoint 上から削除します。

前提
・対象製品は SPS2010 および SPS2013 です。
・このスクリプトを実行する前には必ずコンテンツデータベースのバックアップを取得されることをお勧めします。
・運用環境で実施する前に検証環境で動作確認を行うことをお勧めします。
・このスクリプトは SharePoint が単一ドメインで構成されていることを想定しています。複数ドメインの環境で実施する際はさらにテストする必要があります。
・最悪のケースを想定し、事前に障害復旧プランをご確認ください。

手順
以下のスクリプトを使用して、予めテキストファイルに削除対象となるユーザー情報を出力しておきます。

IdentifiedUser.ps1
************************************************************************
$web = get-spweb https://urlofweb
$allusers = $web.siteusers
$array = @()
foreach($user in $allusers)
{
    $login_full = $user.UserLogin
    $elements = $login_full.split("\")
    $login = $elements[1]
    $ds = New-Object System.DirectoryServices.DirectorySearcher
    $filter = "(&(objectCategory=User)(sAMAccountname=" + $login + "))"
    $ds.Filter = $filter
    if ($de = $ds.findone()) {write-host $login_full "User enabled"}
    else 
    {
        write-host $login_full "User disabled"
        $array+=$login_full
    }   
}
$array > Results.txt
write-host "Done!!!"
************************************************************************

 出力結果には以下のユーザーが含まれている場合があります。

     NT AUTHORITY\LOCAL SERVICE
     NT AUTHORITY\authenticated users
     SHAREPOINT\system

これらは、サイトから削除すべきではありません。したがって、テキストファイルからこれらのエントリを削除してください。
次に、その他のアカウントが実際に AD 上から削除されていることを確認します。
最後に、以下のスクリプトを使用して、出力されたテキストファイルに含まれるユーザー情報を SharePoint 上から削除します。

RemoveUser.ps1
************************************************************************
$users = get-content -path "Results.txt"
$web = get-spweb https://urlofweb
$allusers = $web.siteusers
foreach($temp in $users)
{
        write-host $temp "needs to be removed"
        remove-spuser -id $temp -web $web
}
write-host "Done!!!"
************************************************************************