ファイル サーバーから多数の古いユーザー プロファイルを削除するスクリプトはありますか?

ファイル サーバーから多数の古いユーザー プロファイルを削除するスクリプトはありますか?

Windows Server 2012 マシン上に、すべてのユーザー プロファイル ファイル (マイ ドキュメント、デスクトップなど) を保存するために使用するネットワーク共有があります。

削除する必要のある古いユーザーが何百人もいるので、私はそれらをすべて 1 人ずつ確認しています... 最初に、管理者を 1 人のユーザーのすべてのファイルの所有者にします... 次に、そのユーザーのすべてのファイルに対する完全な制御を管理者に与えます... 次に、そのユーザーのファイルを削除し... 次に、次のユーザーに進みます。

これには数日かかります。

この同じディレクトリ内には、所有者になりたくない、または削除したくない有効な/現在のユーザー ファイルも多数あります。

このネットワーク共有内の特定のフォルダーを削除するのに、時間のかからない方法はありますか?

すべての古いユーザーに入力して、数時間そのまま放置できるスクリプトのようなものはありますか?

答え1

もちろん、PowerShell を使えばすべてが可能です! :-) これは、これを実行するための全体的なプロセスです。

まず、コマンドを使用して、CSV ファイルから削除する上位のフォルダー/ユーザーを読み取りますImport-CSV $Filename | ForEach-Object

各トップ フォルダーに対して、ForEach ブロックで、 を使用してすべてのサブフォルダーとファイルを読み取ることができますGet-ChildItem -Recurse

次に、削除してはならないファイルまたはフォルダーを含む 2 番目の CSV ファイルを作成し、ループする各ファイルについて、このファイルを読み取って比較し、(所有権を取得した後で) 保存するか削除するかを判断できます。

答え2

もう一度やり直す必要があったので、今日これを再検討しました。@PatrikN からの提案に従って、使用した PowerShell スクリプトは次のとおりです。

Get-ChildItem C:\UserDocs |
    ForEach-Object {
        if (!(Get-ADUser -Filter "sAMAccountName -eq '$($_.Name)'")) {
            "$($_.Name) does not exist and is being deleted."
            takeown /a /r /d Y /f $_.FullName
            $Acl = Get-Acl $_.FullName
            $Acl.AddAccessRule(
                (New-Object System.Security.AccessControl.FileSystemAccessRule(
                    [System.Security.Principal.WindowsIdentity]::GetCurrent().Name,
                    "FullControl",
                    "ContainerInherit, ObjectInherit",
                    "None",
                    "Allow"
                ))
            )
            (Get-Item $_.FullName).SetAccessControl($Acl)
            Remove-Item -LiteralPath $_.FullName -Force -Recurse
        }
    }

結局、CSV ファイルは使用しませんでした。

このスクリプトは、すべてのユーザー プロファイル ディレクトリをループし、名前がアクティブ ディレクトリ内にあるかどうかを照会し、ない場合は所有権を取得し、完全な権限を設定してから削除します。うまく機能しました。

関連情報