Benutzer mit den meisten Antworten
Überprüfung von Ordner zu User

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.
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
- Bearbeitet Evgenij Smirnov Dienstag, 3. Mai 2016 05:52
- Als Antwort vorgeschlagen tonibert Freitag, 6. Mai 2016 07:34
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 11. Mai 2016 14:42
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
-
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 ?
-
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
-
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.
-
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
- Bearbeitet Evgenij Smirnov Dienstag, 3. Mai 2016 05:52
- Als Antwort vorgeschlagen tonibert Freitag, 6. Mai 2016 07:34
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 11. Mai 2016 14:42
-
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.
-
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
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.- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 3. Mai 2016 11:05
-
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!