Score:0

การลบการเข้าถึงโดยตรงไปยังโฟลเดอร์จำนวนมากผ่าน PowerShell ACL

ธง cn

ในเซิร์ฟเวอร์จำนวนหนึ่งที่ฉันทำงานอยู่ สิทธิ์การแชร์โฟลเดอร์นั้นยุ่งเหยิงกับการอนุญาตโดยตรงสำหรับเทคโนโลยีบางอย่างของเรา เนื่องจากพวกเขาจำเป็นต้องเป็นเจ้าของ ฉันได้ทราบวิธีแก้ไขปัญหาความเป็นเจ้าของแล้ว ดังนั้นปัญหาจะไม่เกิดขึ้นอีกต่อไป แต่ฉันติดอยู่กับการล้างสิทธิ์เหล่านี้ น่าเสียดายที่เมื่อฉันเรียกใช้คำสั่งนี้ ไม่มีอะไรเกิดขึ้นแม้แต่ข้อผิดพลาด ฉันเดาว่ามันเป็นข้อผิดพลาดทางตรรกะในส่วนของฉัน แต่ฉันไม่สามารถมองเห็นได้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

# $vData เป็นเส้นทางรูท
รับรายการ $vData | แต่ละคน { $_ ; $_ | Get-ChildItem -directory -Force -Recurse }| แต่ละ { $currentDir = $_; $acl = ($_ | รับ Acl).Access; $IDs = $acl | เลือกการอ้างอิงตัวตน ; foreach ($ID ใน $IDs) { if (($ID.ToString()).endswith('-admin')) { $acesToRemove = $acl | โดยที่{ $_.IsInherited -eq $false -และ $_.IdentityReference -eq $ID }; $acl.RemoveAccessRuleAll($acesToRemove); ชุด-Acl -AclObject $acl $currentDir.ToString(); } } }

เนื่องจากเป็น 1 ซับฉันจึงแยกไว้ด้านล่างเพื่อความสะดวกในการอ่าน

รับรายการ $vData |`
foreach {`
 $_ ; $_ | Get-ChildItem -directory -Force -Recurse `
}`
| foreach {`
   $currentDir = $_;`
   $acl = ($_ | รับ Acl).Access; `
   $IDs = $acl | เลือกข้อมูลอ้างอิง ;`
   foreach ($ID ใน $IDs) { `
     ถ้า (($ID.ToString()).endswith('-admin')) {`
        $acesToRemove = $acl | โดยที่{ $_.IsInherited -eq $false -and $_.IdentityReference -eq $ID };'
        $acl.RemoveAccessRuleAll($acesToRemove); `
        ชุด-Acl -AclObject $acl $currentDir.ToString(); `
           }`
     }`
    }

รหัสเพื่อลบการอนุญาตนั้นขึ้นอยู่กับรหัสที่ฉันพบที่นี่ ลบผู้ใช้ออกจาก ACL อย่างสมบูรณ์โดยใช้ PowerShell

Score:0
ธง in

ฉันเชื่อว่า RemoveAccessRuleAll (และ RemoveAccessRule) ทำงานบน ACL ไม่ใช่ในคุณสมบัติ Access ลองสิ่งนี้แทน:

Get-ChidItem -Path $root -Directory -Force -Recurse |
  สำหรับแต่ละวัตถุ - กระบวนการ {
    $path = $_.ชื่อเต็ม
    การเขียนเอาต์พุต "การทำงานบน '$path'"
    $acl = Get-Acl -เส้นทาง $เส้นทาง
    ถ้า ($aclsToRemove = $acl.Access | Where-Object -FilterScript { $_.IdentityReference -like '*-admin' }) {
      การเขียนเอาต์พุต " พบ $($aclsToRemove.Count) ACLs ที่จะลบ:"
      foreach ($aclToRemove ใน $aclsToRemove) {
        การเขียนเอาต์พุต " การลบ $($aclToRemove.IdentityReference) - $($aclToRemove.FileSystemRights) - $($aclToRemove.AccessControlType) จากรายการ ACL"
        $acl.RemoveAccessRule($aclToRemove)
      }
      การเขียนเอาต์พุต " การตั้งค่า ACL ใหม่บนระบบไฟล์"
      Set-Acl -Path $_.FullName -AclObject $acl
    }
  }
Robyn H avatar
cn flag
ฉันลงเอยด้วยการโพสต์คำถามเดียวกันบน reddit เพราะฉันคิดว่าคำถามของฉันจบลงที่นี่ ฉันใช้วิธีนี้ 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 เพิ่งกลับมาอัปเดตด้วย ขอบคุณทุกคนเหมือนกัน!
Score:0
ธง cn

พบคำตอบด้านล่างจาก reddit และดูเหมือนว่าจะบรรลุสิ่งที่ฉันต้องการ

จาก https://www.reddit.com/r/PowerShell/comments/p19br8/bulk_removing_direct_access_to_a_folder_via/ PS_อเล็กซ์

ฉันคิดว่าปัญหาของคุณที่นี่คือ $acl = ($_ | Get-Acl).Access วัตถุ $acl ของคุณมี ACE เท่านั้น cmdlet Set-Acl คาดว่าวัตถุ ACL เต็มเป็นอินพุตไปยังอาร์กิวเมนต์ -AclObject

คุณสามารถลองสิ่งนั้นแทน:

#สมมติว่า $vdata เป็นเส้นทางรูทของคุณ

foreach (โฟลเดอร์ $ ใน Get-ChildItem -Path $vdata -Directory -Recurse -Force) {

#รับ ACL ปัจจุบันของโฟลเดอร์
$acl = Get-Acl -Path $folder.FullName

#Uncomment เพื่อสำรวจวัตถุ $acl
#$acl | ชั้น

#กรอง ACE เพื่อระบุตัวที่จะลบ และลบออก
foreach ($aceToRemove ใน $acl.Access.Where({$psitem.IdentityReference -match "-admin$" -and $psitem.IsInherited -eq $false})) {
    $acl.RemoveAccessRule($aceToRemove)
}

#Uncomment เพื่อสำรวจวัตถุ $acl
#$acl | ชั้น

#รับสมัครพคส
Set-Acl -AclObject $acl -Path $folder.FullName

}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา