Powershell - über ACL einen Benutzer für einen Ordner herausfinden und Ordner löschen
Hallo Administrator-Community.
Seit Februar mache ich meine Ausbildung zum Anwendungsentwickler und soll mich jetzt in Powershell einarbeiten.
Dazu bekam ich folgende Aufgabe:
Behalte alle Ordner, die unter acl einen Benutzer mit *@xyz.de haben, ansonsten lösche diesen Ordner.
Habe mehrere Foren durchsucht, aber immer nur was zum Ändern oder Löschen des Gruppen- oder Benutzernamens gefunden.
Was ich bis jetzt heraus gefunden und erarbeitet habe ist:
(get-acl ,pfad').Access und Remove-Item pfad.
Mit get-acl konnte ich bis dato das bauen :
$items = Get-ChildItem -Path $Path
foreach ($item in $items)
{
$itemPfad = $item.FullName
$itemName = $item.Name
write-Host("`r`n~~~ Bearbeiten Unterordner '$itemName'")
$ACL=Get-ACL $itemPfad
$owner=$ACL.Access ## $ACL.Access
…
}
Ich hoffe, ich finde gerade nur nicht die Kombination aus get-acl und remove-item.
Und fyi: Nein, ich möchte nicht, dass man mir den ganzen Code fertig schreibt.
(Da ich schon viel von Leuten gelesen habe, die ihr ganzes Script von anderen machen lassen wollten)
Hoffentlich könnt ihr mir ein paar Tipps geben.
Grüße.
Seit Februar mache ich meine Ausbildung zum Anwendungsentwickler und soll mich jetzt in Powershell einarbeiten.
Dazu bekam ich folgende Aufgabe:
Behalte alle Ordner, die unter acl einen Benutzer mit *@xyz.de haben, ansonsten lösche diesen Ordner.
Habe mehrere Foren durchsucht, aber immer nur was zum Ändern oder Löschen des Gruppen- oder Benutzernamens gefunden.
Was ich bis jetzt heraus gefunden und erarbeitet habe ist:
(get-acl ,pfad').Access und Remove-Item pfad.
Mit get-acl konnte ich bis dato das bauen :
$items = Get-ChildItem -Path $Path
foreach ($item in $items)
{
$itemPfad = $item.FullName
$itemName = $item.Name
write-Host("`r`n~~~ Bearbeiten Unterordner '$itemName'")
$ACL=Get-ACL $itemPfad
$owner=$ACL.Access ## $ACL.Access
…
}
Ich hoffe, ich finde gerade nur nicht die Kombination aus get-acl und remove-item.
Und fyi: Nein, ich möchte nicht, dass man mir den ganzen Code fertig schreibt.
(Da ich schon viel von Leuten gelesen habe, die ihr ganzes Script von anderen machen lassen wollten)
Hoffentlich könnt ihr mir ein paar Tipps geben.
Grüße.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 341740
Url: https://administrator.de/forum/powershell-ueber-acl-einen-benutzer-fuer-einen-ordner-herausfinden-und-ordner-loeschen-341740.html
Ausgedruckt am: 12.05.2025 um 08:05 Uhr
2 Kommentare
Neuester Kommentar
Da $ACL.Access einen Array mit lauter Berechtigungsobjekten ausgibt, muß man das Objekt, das man haben will raussuchen.
Das kann man direkt über eine Pipeline machen.
Achtung: Windows nimmt auch gerne die Darstellung domain\username statt username@domain, also möglicherweise beides abprüfen.
Dann muß nur geschaut werden, ob in $UserInACL ein Objekt steht oder nicht (wenn nicht gibts den User in der ACL nicht) und dann Löschen:
Wenn man die anderen Berechtigungen für Logging Zwecke braucht, dann kann man das auch in einer Schleife machen:
Das kann man direkt über eine Pipeline machen.
$UserInACL = $ACL.Access | where {$_.IdentityReference -like "*@xyz.de*"}
Dann muß nur geschaut werden, ob in $UserInACL ein Objekt steht oder nicht (wenn nicht gibts den User in der ACL nicht) und dann Löschen:
if($UserInACL) {
Remove-Item -Path $itemPfad
}
Wenn man die anderen Berechtigungen für Logging Zwecke braucht, dann kann man das auch in einer Schleife machen:
$UserInACL = $ACL.Access | where {$_.IdentityReference -like "*@xyz.de*"}
$UserVorhanden = $False
ForEach($UserACL in $UserInACL) {
if($UserACL.IdentityReference -like "*@xyz.de*") {
' User wird gefunden, also nicht löschen
$UserVorhanden = $True
' Irgendwelches Logging
} else {
' Irgendwelches Logging
}
}
If($UserVorhanden -eq $False) {
Remove-Item -Path $itemPfad
}