Điểm:0

xóa hàng loạt quyền truy cập trực tiếp vào thư mục qua PowerShell ACL

lá cờ cn

Trên một số máy chủ nơi tôi làm việc, các quyền đối với thư mục chia sẻ trở nên lộn xộn với các quyền trực tiếp đối với một số kỹ thuật viên của chúng tôi do họ cần có quyền sở hữu. Tôi đã tìm ra cách khắc phục vấn đề về quyền sở hữu để vấn đề này không xảy ra nữa nhưng tôi gặp khó khăn trong việc xóa các quyền này. thật không may khi tôi chạy lệnh này, không có gì xảy ra thậm chí không có lỗi. Tôi đoán đó là một lỗi logic nào đó từ phía tôi nhưng tôi không thể phát hiện ra nó. Bất kỳ trợ giúp sẽ được đánh giá cao.

# $vData là đường dẫn gốc
Nhận vật phẩm $vData | tìm kiếm { $_ ; $_ | Get-ChildItem -directory -Force -Recurse }| tìm kiếm { $currentDir = $_; $acl = ($_ | Get-Acl).Access; $ID = $acl | chọn tham chiếu nhận dạng; foreach ($ID in $IDs) { if (($ID.ToString()).endswith('-admin')) { $acesToRemove = $acl | trong đó{ $_.IsInherited -eq $false -and $_.IdentityReference -eq $ID }; $acl.RemoveAccessRuleAll($acesToRemove); Set-Acl -AclObject $acl $currentDir.ToString(); } } }

vì nó là 1 lớp lót nên tôi đã tách nó ra bên dưới để dễ đọc.

Nhận vật phẩm $vData |`
thuyết minh {`
 $_ ; $_ | Get-ChildItem -directory -Force -Recurse `
}`
| thuyết minh {`
   $currentDir = $_;`
   $acl = ($_ | Get-Acl).Access; `
   $ID = $acl | chọn tham chiếu nhận dạng ;`
   foreach ($ID tính bằng $ID) { `
     if (($ID.ToString()).endswith('-admin')) {`
        $acesToRemove = $acl | trong đó{ $_.IsInherited -eq $false -and $_.IdentityReference -eq $ID };`
        $acl.RemoveAccessRuleAll($acesToRemove); `
        Set-Acl -AclObject $acl $currentDir.ToString(); `
           }`
     }`
    }

mã để xóa quyền dựa trên mã tôi tìm thấy ở đây Xóa hoàn toàn người dùng khỏi ACL bằng PowerShell

Điểm:0
lá cờ cn

Tìm thấy câu trả lời bên dưới từ reddit và nó dường như hoàn thành những gì tôi cần.

từ https://www.reddit.com/r/PowerShell/comments/p19br8/bulk_removing_direct_access_to_a_folder_via/ PS_Alex

Tôi nghĩ vấn đề của bạn ở đây là $acl = ($_ | Get-Acl).Access. Đối tượng $acl của bạn chỉ chứa ACE. Lệnh ghép ngắn Set-Acl mong muốn đối tượng ACL đầy đủ làm đầu vào cho đối số -AclObject.

Bạn có thể thử điều đó thay vào đó:

#Giả sử $vdata là đường dẫn gốc của bạn

foreach ($thư mục trong Get-ChildItem -Path $vdata -Directory -Recurse -Force) {

#Nhận ACL hiện tại của thư mục
$acl = Get-Acl -Path $folder.FullName

#Uncomment để khám phá đối tượng $acl
#$acl | fl

#Lọc các ACE để xác định những cái cần xóa và xóa chúng
foreach ($aceToRemove in $acl.Access.Where({$psitem.IdentityReference -match "-admin$" -and $psitem.IsInherited -eq $false})) {
    $acl.RemoveAccessRule($aceToRemove)
}

#Uncomment để khám phá đối tượng $acl
#$acl | fl

#Áp dụng ACL
Set-Acl -AclObject $acl -Path $folder.FullName

}

Điểm:0
lá cờ in

Tôi tin rằng RemoveAccessRuleAll (và RemoveAccessRule) hoạt động trên ACL chứ không phải trên thuộc tính Access. Thay vào đó, hãy thử một cái gì đó như thế này:

Get-ChidItem -Path $root -Directory -Force -Recurse |
  ForEach-Object -Process {
    $path = $_.Họ Tên
    Đầu ra ghi "Đang làm việc trên '$path'"
    $acl = Get-Acl -Path $path
    if ($aclsToRemove = $acl.Access | Where-Object -FilterScript { $_.IdentityReference -like '*-admin' }) {
      Đầu ra ghi " Đã tìm thấy $($aclsToRemove.Count) ACL cần xóa:"
      foreach ($aclToRemove trong $aclsToRemove) {
        Kết quả ghi " Đang xóa $($aclToRemove.IdentityReference) - $($aclToRemove.FileSystemRights) - $($aclToRemove. AccessControlType) khỏi danh sách ACL"
        $acl.RemoveAccessRule($aclToRemove)
      }
      Đầu ra ghi "Đặt ACL mới trên hệ thống tập tin"
      Set-Acl -Path $_.FullName -AclObject $acl
    }
  }
Robyn H avatar
lá cờ cn
Tôi thực sự đã đăng cùng một câu hỏi trên reddit vì tôi nghĩ rằng câu hỏi của mình đã kết thúc ở đây. Tôi đã sử dụng giải pháp này https://www.reddit.com/r/PowerShell/comments/p19br8/bulk_removing_direct_access_to_a_folder_via/h8c4wcv?utm_source=share&utm_medium=web2x&context=3 vừa mới quay lại để cập nhật giải pháp này. Cảm ơn tất cả các bạn như nhau!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.