none
Überprüfung von Ordner zu User RRS feed

  • Frage

  • Hallo Leute,

    ich habe heute mal wieder ein Problem. In meinem Kopf hab ich bereits einen Plan aber an der Umsetzung hängt es mal wieder.Ich muss überprüfen ob es alte Home und Profilverzeichnisse von User gibt die gar nicht mehr existieren.

    Meine Denkweise:

    ich kann mir ja eine Liste aller Profil Ordner ausgeben lassen. Jetzt müsste ich doch nur noch eine Überprüfung machen ob zu jedem Oder noch ein User existiert und die entsprechende Rückmeldung auswerten.

    Oder eben gleich für alle Ordner zu denen es kein User mehr gibt direkt löschen lassen.

    Wenn ihr mir bei der Umsetzung helfen könntet wäre super.

    Vielen Dank im Voraus.

    Montag, 2. Mai 2016 07:44

Antworten

  • Schon, aber wir sind hier ja nicht bei DOS ;-) PowerShell liefert Objekte, und wenn Du zwei Objekte vom unterschiedlichen Typ miteinander vergleichst, werden sie unterschiedlich sein, selbst wenn in einem der Attribute der gleiche String steht.

    Ich habe Dir doch schon alles geliefert, Du must *nur* in der allerersten Zeile den UNC-Pfad einsetzen, in dem Deine Profile liegen:

    $base = "\\SERVER\SHARE" # <--- HIER ERSETZEN OHNE BACKSLASH AM ENDE!
    $folders = @()
    Get-ChildItem $base -Directory | foreach { $folders += "$base`\$_"}
    $profiles = (Get-ADUser -Filter {profilePath -like "*"} -ResultSetSize $null -Property profilePath).profilePath
    foreach ($folder in $folders) {
        if ($profiles -notcontains $folder) {
            Write-Output "Löschen: $folder"
        }
    }


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Dienstag, 3. Mai 2016 05:52

Alle Antworten

  • Moin,

    so auf die Schnelle:

    $profiles = (Get-ADUser -Filter {profilePath -like "*"} -ResultSetSize $null -Property profilePath).profilePath
    $folders = Get-Content <Datei mit Listing der UNC-Pfade>
    foreach ($folder in $folders) {
        if ($profiles -notcontains $folder) {
            Write-Output "Löschen: $folder"
        }
    }

    Gruß


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 2. Mai 2016 08:01
  • Hallo,

    habe das mal schnell auf mein Beispiel übertragen:

    $quelle = "Pfad\Verzeichnis"
    $Folders = get-childitem $quelle
    $Users = Get-ADUser -Filter {Name -like "Filteroption"} 
    foreach ($Folder in $Folders) {
    if ($users -notcontains $Folder){
    Write-Output "Löschen: $Folder"
    }
    }

    Leider zeigt er mir dann aber bei jedem User Löschen: Username an . Und bei den Ordner gibt es definitiv welche, zu denen kein User mehr existiert.

    Hab ich was falsch gemacht oder woran hängt es ?

    Montag, 2. Mai 2016 08:51
  • Ja, hast Du.

    $Folders ist bei Dir eine Sammlung von Filesystem-Objekten. $Users eine Sammlung von ADUser-Objekten. Es ist klar, dass sie sich nicht gegenseitig beinahelten können ;-)

    Lass doch einfach die Liste der UNC-Pfade in eine Textdatei aus oder generiere sie so:

    $base = "\\SERVER\SHARE"
    $folders = @()
    Get-ChildItem $base -Directory | foreach { $folders += "$base`\$_"}


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Montag, 2. Mai 2016 09:10
  • Ich hab keinen Plan aber es funktioniert einfach nicht.

    Ich kann mir doch mit Get-ADUser eine liste aller AD User erzeugen lassen. Dort steht dann nur der Name des Benutzers drin. Und auf meinem Fileserver hat jeder User ein Home Verzeichnis dass genauso heißt wie der Benutzer. Diese Homeverzeichnisse kann ich mir mit Get-ChildItem auslesen.

    Dann müsste ich doch nur noch diese beiden Listen miteinander vergleichen und die ausgeben lassen wo es zu einem Ordner keinen AD User gibt.

    Dienstag, 3. Mai 2016 05:32
  • Schon, aber wir sind hier ja nicht bei DOS ;-) PowerShell liefert Objekte, und wenn Du zwei Objekte vom unterschiedlichen Typ miteinander vergleichst, werden sie unterschiedlich sein, selbst wenn in einem der Attribute der gleiche String steht.

    Ich habe Dir doch schon alles geliefert, Du must *nur* in der allerersten Zeile den UNC-Pfad einsetzen, in dem Deine Profile liegen:

    $base = "\\SERVER\SHARE" # <--- HIER ERSETZEN OHNE BACKSLASH AM ENDE!
    $folders = @()
    Get-ChildItem $base -Directory | foreach { $folders += "$base`\$_"}
    $profiles = (Get-ADUser -Filter {profilePath -like "*"} -ResultSetSize $null -Property profilePath).profilePath
    foreach ($folder in $folders) {
        if ($profiles -notcontains $folder) {
            Write-Output "Löschen: $folder"
        }
    }


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de

    my personal blog (mostly German) -> http://it-pro-berlin.de

    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de

    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    Dienstag, 3. Mai 2016 05:52
  • Hallo,

    dein Problem ist, dass $Folder ein Filesystem-Object enthält, wie Evgenij schon schrieb. Du brauchst aber einen String mit dem Ordnernamen. Das wäre $Folder.Name, nehme ich an. Genauso musst du auch aus $Users noch die Usernamen extrahieren, weil auch das Objekte mit mehreren Informationen sein werden.

    Prinzipiell solltest du aber PowerShell lernen. Ich habe das Gefühl, dass du die Objektorientierung noch nicht verstanden hast. Erst dann ist es sinnvoll, solche Aufgaben anzugehen. Wir, die wir hier Fragen beantworten, mussten da auch alle durch.

    Dienstag, 3. Mai 2016 05:55
  • Ich glaube es wäre nicht schlecht, sich mal mit den Powershell Grundlagen zu befassen. Die kann man in einem solchen Forum nur sehr eingeschränkt vermitteln.
    Für deutschsprachige PowerShell Lerninhalte siehe z.b. hier, oder hier

     
    Grüße, Denniver

     

    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Dienstag, 3. Mai 2016 11:04
    Moderator
  • Hi,

    lass das Script mal laufen und dann schau dir mal den Inhalt von

    $Folders

    und von

    $profiles

    an. Diese beiden Werte werden verglichen!

    Eventuell steht bei einem deiner Ausgaben der FQDN drin...dann klappt auch der Vergleich nicht!?


    Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!

    Freitag, 6. Mai 2016 09:19