如何阻止我的脚本循环

我正在运行附加的脚本对我的广告。 我只需要脚本返回每个AD帐户一次,但似乎是在一个无限循环运行。

我该如何阻止?

谢谢

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

问题在于太复杂的foreach循环和过滤不佳的查询。 让我们仔细看看:

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

在#1部分中,您将看到已过期的所有用户和计算机帐户的列表。 到现在为止还挺好。

在#2部分中,您将逐个传递管道上的每个过期帐户。 现在,对于找到的每个过期帐户,都会搜索AD中所有包含字符串leaver说明的用户帐户。 这完全没有意义。 (更糟的是,搜索子字符串需要读取每个对象的描述。)

作为一个具体的例子,有100个过期帐户和1000个AD用户帐户,循环正在做100 * 1000的搜索操作。 哎呀! 难怪这似乎需要很长时间。

作为工作的替代方案,考虑类似的东西(没有在真实领域测试,所以YMMV),

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

在#1部分中,将过期账户保存在一个变量中。 这没有什么区别,但是如果以后需要这些,则不需要重新搜索AD。

在#2部分,管道结果在前面。 这里没什么重要的

在#3部分,用更有效的过滤搜索AD。