如何阻止我的脚本循环
Posted
技术标签:
【中文标题】如何阻止我的脚本循环【英文标题】:How do I stop my script from looping 【发布时间】:2017-06-07 19:50:53 【问题描述】:我正在针对我的 AD 运行附加的脚本。我只需要脚本返回每个 AD 帐户一次,但它似乎在无限循环中运行。
我该如何阻止这种情况?
谢谢
Search-ADAccount -AccountExpired | foreach get-aduser -Filter 'description -like "*leaver*"'
【问题讨论】:
【参考方案1】:问题在于过于复杂的 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。
【讨论】:
你是救生员!谢谢!完美运行!以上是关于如何阻止我的脚本循环的主要内容,如果未能解决你的问题,请参考以下文章