我有一個非常大的文件夾列表,我需要從每個文件夾中刪除一個ACL。我試圖編寫一個腳本來在很短的時間內完成它,但我遇到了一些麻煩。如何從一大組文件夾中刪除單個用戶ACL?
這是我到目前爲止有:
$filepath = "C:\ALCTEST"
$user = "domain\username"
$folders = @((get-item $filePath))
$folders += Get-ChildItem $filePath -Recurse |
where { $_.PSIsContainer -ne $false }
##Need to do this in order to remove item 0 from the array, otherwise
##item 0 is the parent folder
$newfolders = $folders[1,2 + 3..($folders.length - 1)]
foreach ($folder in $newfolders) {
$acl = Get-Acl -Path $folder.FullName
foreach ($access in $acl.access) {
foreach ($value in $access.IdentityReference.Value) {
if ($value -eq $user) {
$acl.RemoveAccessRule($access) | Out-Null
}
}
}
Set-Acl -Path $folder -AclObject $acl
}
從我的調試過程中的注視下,我覺得一切作品的權利,直到我嘗試設置ACL放回文件夾。當它到達該行時,出現錯誤
找不到路徑'C:\ Windows \ system32 \ 01',因爲它不存在。
ACLTEST的父文件夾內有七個名爲「01」...「07」的文件夾,各種ACL用於測試。
我不確定該從哪裏出發。我正在閱讀this Scripting Guy article,它幫助我度過了很多,但他的腳本似乎專注於手動輸入文件夾路徑,對於需要更改的幾百個文件夾,我絕對無法做到這一點。
任何幫助表示讚賞。我是PowerShell腳本的新手,所以如果您發現除了我在上面的腳本中提到的錯誤之外的其他錯誤,我很樂意聽到他們的聲音。
非常感謝您!這正是我正在尋找的,因爲我知道我的代碼可能不是最好的。 –