如何阻止我的脚本循环

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。

【讨论】:

你是救生员!谢谢!完美运行!

以上是关于如何阻止我的脚本循环的主要内容,如果未能解决你的问题,请参考以下文章

循环阻止异步请求被发送。为什么以及如何解决?

如何阻止在 Ruby 中读取命名管道?

如何阻止音乐曲目在 Libgdx 中循环播放

循环,使用,以及如何阻止它

如何阻止对我的 JavaScript 文件的直接访问?

如何在运行时阻止forEach循环不执行两次?