我正在运行附加的脚本对我的广告。 我只需要脚本返回每个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。