Scripting
從文件伺服器中刪除許多舊使用者配置文件的腳本?
我在 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 文件,其中包含不應刪除的文件或文件夾,並且對於您循環瀏覽的每個文件,您可以讀取並與該文件進行比較,如果它應該被保存或刪除(在獲得所有權之後)。