Es wird versucht, festzustellen, ob Benutzerordner im Netzwerk vorhanden sind, denen kein Benutzerkonto zugeordnet ist. Alle Ergebnisse geben "Missing" zurück, wenn die Mehrheit "Found" zurückgeben sollte. Irgendwelche Ideen?Powershell - Suchen und Vergleichen von Arrays mit Quest CMDlets
$Dir = "\\ServerName\Share\"
$FolderList = Get-ChildItem($Dir) | where {$_.psIsContainer -eq $true}
$UserList = get-qaduser -sizelimit 0 | select LogonName
foreach ($Folder in $FolderList)
{
if ($UserList -contains $Folder.name)
{
"Found: " + $Folder.name
}
Else
{
"Missing: " + $Folder.name
}
}
Genie! Obwohl ich deinen Code noch nicht vollständig verstanden habe, funktioniert es definitiv! Danke euch beiden für eure Beiträge. Sorry, ich bin ein Stack-Overflow-Noob und kann dich noch nicht abstimmen! –
Im Wesentlichen erstellt $ users = @ {} eine Hashtabelle (oder ein Wörterbuch). Die zweite Zeile füllt dieses Wörterbuch mit allen Benutzeranmeldenamen und dem Wert $ true. Dann scannen wir in der letzten Zeile jeden Ordner und prüfen, ob sich der Name (nicht der vollständige Pfad) in der Hashtabelle befindet. Wenn nicht, dann haben Sie einen verwaisten Ordner. –
Dies ist eine viel bessere Lösung. Aber Ihr vorheriger Code funktioniert nicht, da $ UserList tatsächlich eine Sammlung von PSObjects mit einer Eigenschaft "LogonName" enthält. Ihre "if" -Anweisung versucht also, eine PSObject-Auflistung mit einer Zeichenfolge zu vergleichen und somit keine Übereinstimmung zu erzielen. In jeder OO-Umgebung müssen Sie wissen, welche Art von Objekten Sie vergleichen. Sie können dies beheben, indem Sie nur die Anmeldenamen verwenden: $ UserList = get-qaduser -sizelimit 0 | for-each {$ _. Anmeldename} – JasonMArcher