Scripting

從文件伺服器中刪除許多舊使用者配置文件的腳本?

  • May 31, 2019

我在 Windows Server 2012 機器上有一個網路共享,用於儲存所有使用者配置文件(我的文件、桌面等)。

我需要擺脫數百個老使用者,我將逐一檢查它們…首先使管理員成為一個使用者的所有文件的所有者…然後完全控制該使用者的所有文件文件給管理員…然後刪除該使用者的文件…然後轉到下一個使用者。

這需要幾天時間。

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

有沒有更省時的方法來刪除此網路共享中的特定文件夾?

我可以在所有老使用者中輸入某種腳本,讓它在幾個小時內完成它的工作?

我不得不再次這樣做,所以今天根據@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 文件。

該腳本遍歷所有使用者配置文件目錄,查詢該名稱是否在活動目錄中,如果不是:獲取所有權,設置完全權限,然後刪除。它運作良好。

當然,使用 PowerShell 一切皆有可能!:-) 這是如何做到這一點的一個整體過程。

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

對於每個頂級文件夾,在 ForEach 塊中,您可以讀取所有子文件夾和文件Get-ChildItem -Recurse

然後,您可以擁有第二個 CSV 文件,其中包含不應刪除的文件或文件夾,並且對於您循環瀏覽的每個文件,您可以讀取並與該文件進行比較,如果它應該被保存或刪除(在獲得所有權之後)。

引用自:https://serverfault.com/questions/897640