sv-schneider
Goto Top

Powershell Ordner Löschen

Guten Tag,

Ich habe ein Powershellscript geschrieben das aus der Ad die User ausliest und für jeden User jeweils einen Scan Ordnern erstellt
Dies ist mein Scirpt:

Import-Module ActiveDirectory

$Userliste = "C:\Scripts\Ordner_anlage\AD_Export_Ordner.txt"  

Get-ADUser -Filter * -SearchBase "OU=**,OU=**,DC=**,DC=**"| Select -ExpandProperty SamAccountName | Out-File $Userliste  
Get-ADUser -Filter * -SearchBase "OU=**,OU=**,DC=**,DC=**"| Select -ExpandProperty SamAccountName | Out-File $Userliste -Append  

$Users = Get-Content $Userliste


ForEach ($user in $users)
{
    if (Test-Path "\\Pfad\Scan\$user"){  
    # Hier sollte irgendwann gerpüft werden ob der User noch existiert
    }
    else  {
        $newPath = Join-Path "\\Pfad\Scan" -childpath $user  
        New-Item $newPath -type directory

        $acl = Get-Acl $newpath
        $acl.SetAccessRuleProtection($True, $False)
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\$user","AppendData,CreateDirectories,CreateFiles,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,Modify,Read,ReadAndExecute,ReadAttributes,ReadData,ReadExtendedAttributes,ReadPermissions,Synchronize,Traverse,Write,WriteAttributes,WriteData,WriteExtendedAttributes","ContainerInherit, ObjectInherit","None","Allow")  
        $acl.SetAccessRule($accessRule)
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM","FullControl","ContainerInherit, ObjectInherit","None","Allow")  
        $acl.SetAccessRule($accessRule)
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\Administrator","FullControl","ContainerInherit, ObjectInherit","None","Allow")  
        $acl.SetAccessRule($accessRule)
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Domain\scan","AppendData,CreateDirectories,CreateFiles,DeleteSubdirectoriesAndFiles,ExecuteFile,ListDirectory,Modify,Read,ReadAndExecute,ReadAttributes,ReadData,ReadExtendedAttributes,ReadPermissions,Synchronize,Traverse,Write,WriteAttributes,WriteData,WriteExtendedAttributes","ContainerInherit, ObjectInherit","None","Allow")  
        $acl.SetAccessRule($accessRule)
        $acl | Set-Acl $newpath
    }
    
}


Dieses Script Funktioniert auch ohne Probleme.

Ich möchte nun aber eine neue Bedingung undzwar soll der Ordner Gelöscht werden sobald der User in der Ad Gelöscht wird.

Kann mir Jemand helfen wie ich dies am besten Abfrage?


Vielen Dank Schonmal

Content-ID: 379886

Url: https://administrator.de/contentid/379886

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

emeriks
emeriks 11.07.2018 aktualisiert um 15:04:35 Uhr
Goto Top
Hi,
zuerst: Benutze bitte Code-Tags! So kann man das ja kaum lesen ....

$newPath = Join-Path "\\Pfad\Scan" -childpath $user
Dieser Logik folgend könntest Du in einem zweiten Durchlauf testen, welche Ordner existieren und ob es den assoziierten Benutzer noch gibt. Die Assoziaition kannst Du entweder über den Ordnernamen herstellen oder über die ACL. Da Du beim Erstellen "Domain\$user" direkt berechtigst, müsstest Du nach dem Löschen des Benutzers in der ACL eine ACE haben, für welche Du die SID nicht in den Benutzernamen auflösen kannst.

E.
colinardo
colinardo 11.07.2018 aktualisiert um 16:04:47 Uhr
Goto Top
Auch das gabs schon mal hier:
AD User gelöscht Basisordner bleibt bestehen
# Hier sollte irgendwann gerpüft werden ob der User noch existiert
Zu dem Zeitpunkt bringt dir das überhaupt nichts, denn du hast nur alle existierenden User in der Variablen $users die du ja mit Get-ADUser eingelesen hast. Du musst es also separat verarbeiten, nicht in dieser Schleife. Wie das geht steht im o. Link. Btw. wieso erst das ganze in eine Textdatei und dann erneut davon geladen?? => Überflüssig.

Grüße Uwe