Comment puis-je arrêter mon script de boucler

Je lance le script ci-joint contre mon AD. Je n’ai besoin que du script pour renvoyer une fois chaque compte AD, mais il semble fonctionner dans une boucle infinie.

Comment puis-je arrêter ça?

Merci

Search-ADAccount -AccountExpired | foreach { get-aduser -Filter 'description -like "*leaver*"' } 

    Le problème réside dans une boucle foreach trop complexe et une requête mal filtrée. Regardons de plus près:

     Search-ADAccount -AccountExpired | foreach { # 1 get-aduser -Filter 'description -like "*leaver*"' # 2 } 

    Dans la partie n ° 1, vous obtiendrez une liste de tous les comptes d’utilisateur et d’ordinateur expirés. Jusqu’ici tout va bien.

    Dans la partie n ° 2, vous transmettez un par un chaque compte expiré sur le pipeline. Maintenant, pour chaque compte expiré trouvé, vous recherchez AD pour tous les comptes d’utilisateurs qui ont une description contenant un leaver chaîne. Cela n’a aucun sens. (Ce qui est encore pire, la recherche d’une sous-chaîne nécessite la lecture de la description de chaque object.)

    Comme exemple concret, avec 100 comptes expirés et 1000 comptes utilisateurs AD, la boucle effectue 100 000 opérations de recherche. Oops! Pas étonnant que cela semble prendre des années.

    Comme alternative de travail, considérez quelque chose comme ça (non testé sur un domaine réel, donc YMMV),

     $expiredAccounts = Search-ADAccount -AccountExpired # 1 $expiredAccounts| foreach { # 2 get-aduser -Filter {samaccountname -eq $_.samaccountname -and description -like "*leaver*"} # 3 } 

    Dans la partie n ° 1, enregistrez les comptes expirés dans une variable. Cela ne fait aucune différence, mais si cela est nécessaire plus tard, il n’est pas nécessaire de rechercher à nouveau la DA.

    Dans la partie n ° 2, les résultats sont positifs. Rien d’important ici.

    Dans la partie n ° 3, recherchez l’AD avec un filtrage beaucoup plus efficace.