2016-07-12 6 views
1

Ich muss einige Benutzer loswerden, die nicht mehr in AD vorhanden sind, aber immer noch in einer Anwendung installiert sind.PowerShell eine if else-Anweisung in eine Foreach-Schleife umwandeln

Ich habe ein Skript, das eine Liste von Benutzern bereitstellt und sie einer Variablen zuweist. Im Moment möchte ich eine Liste von Benutzern, die notexist. Dies funktioniert für einen einzelnen Benutzer:

Problem, das ich bekomme, füttert dies zu einer foreach-Schleife für mehrere Benutzer in der Variablen. Wie kann ich das für jeden Benutzer durch das Objekt schauen und diejenigen ausgeben, die nicht existieren?

#List of all users in Appication 

$Users = $location.Users.FindAll() | select username 

Username                                           
--------                                           

JohnSmith 
JohnSmith1 
JohnSmith2 

dies versucht, aber nicht funktioniert, zeigt alle Benutzer existieren, obwohl MaxMustermann doesnt wie oben vorhanden sein:

$users = $location.Users.FindAll() |select username 

$users2 = Get-ADUser -Filter "UserPrincipalName -eq '$($users.username)'" 

foreach ($users2 in $users){ 
if (!$users2) 
{ 
write-host "$users2 doesnt exist" 
} 

else 
{ 
write-host "$users2 does exist" 
} 
} 

PS C:\> 
@{Username=JohnSmith} does exist 
@{Username=JohnSmith1} does exist 
@{Username=JohnSmith2} does exist 

Antwort

-1

Nicht getestet, aber dies sollte eine Liste aller Benutzer der Anwendung zurückgeben, die nicht in AD sind :

$applicationUsers = $location.Users.FindAll() | select username 
$adUsers = Get-ADUser -filter * | select -ExpandProperty UserPrincipalName 
$users = $applicationUsers | Where username -NotIn $adUsers 

Und Sie können mit über sie iterieren:

$users | Foreach-Object { $_ } 
+0

Perfekt, arbeitete nach Bedarf, danke – Ralluhb

+0

'Get-ADUser-Filter *' ist eine sehr schlechte Praxis. Ich kann mir nicht vorstellen, wie lange das dauern wird, um in meinem AD mit OVER NINE THOUSAND (ernsthaft) benutzerartigen Objekten fertig zu werden. Sie müssen einige Kriterien angeben, andernfalls kann es zu lange dauern, alle Benutzerobjekte abzurufen. Ich habe gerade überprüft: 2 Minuten 15 Sekunden und ~ 500 MB RAM. – n01d

+0

@ n01d Dies ist keine schlechte Übung für sich. Es hängt von seiner Umgebung ab, die wir nicht kennen. Ich bin nicht in der Lage, ihm die richtigen Kriterien zu geben, um die Leistung bei Bedarf insgesamt zu verbessern. –

Verwandte Themen