Puncte:0

eliminarea în bloc a accesului direct la un folder prin PowerShell ACL

drapel cn

Pe o serie de servere pe care lucrez, permisiunile pentru folderele de partajare au devenit aglomerate cu permisiuni directe pentru unii dintre tehnicienii noștri, deoarece trebuie să preia proprietatea. Mi-am dat seama cum să rezolv problema de proprietate, astfel încât să nu se mai întâmple, dar sunt blocat cu curățarea acestor permisiuni. din pacate cand rulez aceasta comanda nu se intampla nimic nici macar o eroare. Bănuiesc că este o eroare logică de un fel din partea mea, dar nu o pot identifica. Orice ajutor ar fi apreciat.

# $vData este calea rădăcină
Obține-element $vData | foreach { $_ ; $_ | Get-ChildItem -directory -Force -Recurse }| foreach { $currentDir = $_; $acl = ($_ | Get-Acl).Acces; $ID-uri = $acl | selectați referința de identitate; foreach ($ID în $ID-uri) { if (($ID.ToString()).endswith('-admin')) { $acesToRemove = $acl | unde{ $_.IsInherited -eq $false -și $_.IdentityReference -eq $ID }; $acl.RemoveAccessRuleAll($acesToRemove); Set-Acl -AclObject $acl $currentDir.ToString(); } } }

deoarece este o linie de 1, l-am împărțit mai jos pentru ușurință de citit.

Get-Item $vData |`
foreach {`
 $_ ; $_ | Get-ChildItem -directory -Force -Recurse `
}`
| foreach {`
   $currentDir = $_;`
   $acl = ($_ | Get-Acl).Acces; `
   $ID-uri = $acl | selectați identityreference ;`
   foreach ($ID în $ID-uri) { `
     if (($ID.ToString()).endswith('-admin')) {`
        $acesToRemove = $acl | unde{ $_.IsInherited -eq $false -și $_.IdentityReference -eq $ID };`
        $acl.RemoveAccessRuleAll($acesToRemove); `
        Set-Acl -AclObject $acl $currentDir.ToString(); `
           }`
     }`
    }

codul pentru a elimina permisiunile se bazează pe codul pe care l-am găsit aici Eliminați complet un utilizator din ACL folosind PowerShell

Puncte:0
drapel in

Cred că RemoveAccessRuleAll (și RemoveAccessRule) funcționează pe ACL, nu pe proprietatea Access. Încercați ceva de genul acesta:

Get-ChidItem -Path $root -Directory -Force -Recurse |
  PentruFiecare-Obiect -Proces {
    $cale = $_.FullName
    Ieșire de scriere „Se lucrează la „$path””
    $acl = Get-Acl -Path $cale
    dacă ($aclsToRemove = $acl.Access | Where-Object -FilterScript { $_.IdentityReference -like '*-admin' }) {
      Scriere-Ieșire " S-au găsit $($aclsToRemove.Count) ACL-uri de eliminat:"
      foreach ($aclToRemove în $aclsToRemove) {
        Ieșire de scriere „Eliminarea $($aclToRemove.IdentityReference) - $($aclToRemove.FileSystemRights) - $($aclToRemove.AccessControlType) din lista ACL”
        $acl.RemoveAccessRule($aclToRemove)
      }
      Scriere-Ieșire „Setarea noului ACL pe sistemul de fișiere”
      Set-Acl -Path $_.FullName -AclObject $acl
    }
  }
Robyn H avatar
drapel cn
De fapt, am ajuns să postez aceeași întrebare pe reddit, deoarece am crezut că întrebarea mea a ajuns să apară aici. Am folosit această soluție 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 tocmai se întorcea pentru a actualiza cu ea. Multumesc la fel!
Puncte:0
drapel cn

Am găsit răspunsul de mai jos de la reddit și pare să realizeze ceea ce aveam nevoie.

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

Cred că problema dvs. aici este $acl = ($_ | Get-Acl).Acces. Obiectul dvs. $acl conține doar ACE. Cmdletul Set-Acl așteaptă obiectul ACL complet ca intrare pentru argumentul -AclObject.

Ai putea încerca asta în schimb:

#Presupunând că $vdata este calea rădăcină

foreach ($dosar în Get-ChildItem -Path $vdata -Directory -Recurse -Force) {

#Obțineți ACL-ul curent al folderului
$acl = Get-Acl -Path $folder.FullName

#Anulați comentariile pentru a explora obiectul $acl
#$acl | fl

#Filtrați ACE-urile pentru a le identifica pe cele de eliminat și eliminați-le
foreach ($aceToRemove în $acl.Access.Where({$psitem.IdentityReference -match "-admin$" -și $psitem.IsInherited -eq $false})) {
    $acl.RemoveAccessRule($aceToRemove)
}

#Anulați comentariile pentru a explora obiectul $acl
#$acl | fl

#Aplicați ACL
Set-Acl -AclObject $acl -Cale $folder.FullName

}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.