2 Stimmen

Powershell - Suchen und Vergleichen von Arrays mit Quest CMDlets

Ich versuche festzustellen, ob es Benutzerordner im Netzwerk gibt, denen kein Benutzerkonto zugeordnet ist. Alle Ergebnisse geben "Missing" zurück, während die meisten "Found" anzeigen sollten. Hat jemand eine Idee?

$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
}
}

2voto

Keith Hill Punkte 183005

Wie wäre es mit einem etwas anderen Ansatz, bei dem eine Hashtabelle verwendet wird (die außergewöhnlich schnelle Schlüsselabfragen ermöglicht):

$users = @{}
Get-QADUser -sizelimit 0 | Foreach {$users["$($_.LogonName)"] = $true}
$dir = "\\ServerName\Share\"
Get-ChildItem $dir | Where {$_.PSIsContainer -and !$users["$($_.Name)"]}

Wenn der Ordnername nicht genau mit dem LogonName übereinstimmt, müssen Sie, wie EBGreen anmerkt, den Schlüssel anpassen ($users["$($ .LogonName)"]) oder den Ordnernamen, wenn Sie ihn zur Indizierung der Hashtabelle verwenden (!$users["$($ .Name)"]).

1voto

EBGreen Punkte 35149

-contains wird übereinstimmen, wenn das Element in der Sammlung identisch ist mit dem, was Sie testen, so sicher sein, dass die $Folder.Name genau das gleiche wie LogonName ist. Normalerweise ist das nicht der Fall. Die meisten Unternehmen würden den Ordnernamen foo$ für einen Benutzer namens foo verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X