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
Perfekt, arbeitete nach Bedarf, danke – Ralluhb
'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
@ 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. –