gpt4 book ai didi

powershell - 在 foreach-object 之后处理 SearchResultCollection

转载 作者:行者123 更新时间:2023-12-03 09:46:18 24 4
gpt4 key购买 nike

根据MSDN备注,.Dispose() 必须在完成后调用 System.DirectoryServices.SearchResultCollection

Due to implementation restrictions, the SearchResultCollection class cannot release all of its unmanaged resources when it is garbage collected. To prevent a memory leak, you must call the Dispose method when the SearchResultCollection object is no longer needed.

我还读到您应该使用 Foreach-Object 而不是 foreach 来节省内存,因为 foreach 需要整个 SearchResultCollection 在迭代之前保存到内存中。

$objSearcher.FindAll() | Foreach-Object { $_ }

优于

$objResults = $objSearcher.FindAll()
foreach($objResult in $objResults)
{
$objResult
}

我想不通的是,如果您使用 Foreach-Object,如何调用 .Dispose()

最佳答案

foreach 语言语句不等同于 ForEach-Object cmdlet,尽管它们具有相似的用途。 (不幸的是,ForEach-Object 有一个默认别名 foreach,IMO 只会增加困惑。)

我的建议是在迭代目录搜索结果时不要使用 ForEach-Object,因为 DirectorySearcher 是高效的并且不需要 ForEach-Object。 (我还建议将 Write-Progress 作为迭代的一部分,因为 DirectorySearcher 可能会返回一个长列表。)

ForEach-Object 在您需要 PowerShell 的流式处理行为并且您可能没有高效搜索时很有用。

关于powershell - 在 foreach-object 之后处理 SearchResultCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com