從檔案伺服器刪除許多舊用戶設定檔的腳本?

從檔案伺服器刪除許多舊用戶設定檔的腳本?

我在 Windows Server 2012 電腦上有一個網路共用,用於儲存所有使用者設定檔(我的文件、桌面等)。

我需要擺脫數百個舊用戶,我正在一一檢查它們...首先讓管理員成為一個用戶的所有文件的所有者...然後完全控制該用戶的所有文件文件發送給管理員...然後刪除該使用者的檔案...然後轉到下一個使用者。

這需要幾天的時間。

有許多有效/當前用戶文件,我不想成為其所有者或在同一目錄中刪除它們。

有沒有更省時的方法來刪除此網路共用中的特定資料夾?

我可以在所有舊用戶中輸入某種腳本,然後讓它執行幾個小時的操作?

答案1

當然,有了 PowerShell,一切都有可能! :-) 這是如何完成此操作的整體過程。

您可以先使用命令從 CSV 檔案中讀取要刪除的頂級資料夾/使用者Import-CSV $Filename | ForEach-Object

對於每個頂級資料夾,在 ForEach 區塊中,您可以讀取所有帶有Get-ChildItem -Recurse.

然後,您可以擁有第二個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 檔案。

此腳本循環遍歷所有使用者設定檔目錄,查詢該名稱是否在活動目錄中,如果不在:取得所有權,設定完全權限,然後刪除。效果很好。

相關內容