![從檔案伺服器刪除許多舊用戶設定檔的腳本?](https://rvso.com/image/717740/%E5%BE%9E%E6%AA%94%E6%A1%88%E4%BC%BA%E6%9C%8D%E5%99%A8%E5%88%AA%E9%99%A4%E8%A8%B1%E5%A4%9A%E8%88%8A%E7%94%A8%E6%88%B6%E8%A8%AD%E5%AE%9A%E6%AA%94%E7%9A%84%E8%85%B3%E6%9C%AC%EF%BC%9F.png)
我在 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 檔案。
此腳本循環遍歷所有使用者設定檔目錄,查詢該名稱是否在活動目錄中,如果不在:取得所有權,設定完全權限,然後刪除。效果很好。