Chúng tôi có một cấu trúc thư mục với nhiều quyền rõ ràng như
root Folder
- subfolder 1 (explicit acl, no inherit acl)
- subfolder 2 (explicit acl, no inherit acl)
--subsubfolder 1 (no explicit rights, inherit acl)
--subsubfolder 2 (explicit acl, no inherit acl)
và v.v.
Tôi muốn thêm quyền (Tài khoản hệ thống) cho tất cả các ACL rõ ràng nhưng không cho phép những ACL không rõ ràng. Và tất nhiên, có một số Thư mục không thể truy cập được ngay cả bởi tài khoản Quản trị viên, vì vậy tôi cần bỏ qua Lỗi.
Bất cứ ai cũng biết về một kịch bản có thể đạt được điều này?
Edit1
Nhờ Hardoman, đây là một giải pháp làm việc cho thư mục hiện hành, thư mục con và các tập tin và không bắt lỗi ...
$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
$inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
if ($inheritance -eq $false) {
icacls.exe $item /grant 'System:(OI)(CI)(RX)'
}
}
Không tìm thấy giải pháp với set-acl, có thể ai đó có ý tưởng, đây là trạng thái set-acl hiện tại của tôi nhưng thư mục con không nhận được quyền ngay cả khi chúng được kế thừa.
$folders = (Get-ChildItem C:\Temp -Directory -Recurse) | select -ExpandProperty fullname
foreach ($item in $folders) {
$inheritance = (Get-Acl $item).access[0] | select -ExpandProperty isinherited
if ($inheritance -eq $false) {
try {
$acl = Get-Acl $item
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("System","FullControl, Synchronize", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.SetAccessRule($AccessRule)
Set-Acl $item $acl
}
catch {
"Failed to access folder $item"
"Exception type is $($_.Exception.GetType().Name)"
}
}
}
icacls
công cụ và thêm quyền ưa thích của bạn. Thêm chi tiết tại đây: ss64.com/nt/icacls.html