内存被吃掉了问题

时间:2012-08-16 13:54:02

标签: powershell distinguishedname quest

我试图通过NAS共享上广泛的目录/子目录结构递归地找到文件夹及其可分辨名称(DN)上的组。

我制作了代码并且它可以正常工作,但是由于某些原因,它很慢并且吞噬了内存

我正在寻求帮助,以了解我可能做错了什么,或者是否有更快/更少内存密集的方式来执行此操作。

  • 似乎会减慢每个$acct所需的位置,并使用$acctsQADObject创建Get-QADObject

  • 我看到每个容器(目录)有8-10个$acct,并且需要 5秒或更长时间来处理每个容器。

  • 似乎$acct的每次迭代都缓存了一些它不会释放的东西,因此$acct的每个循环都可以看到内存增加0.02+ MB

  • 我从$acct弹出$accts并尝试强制$acctsQADObject$null尝试获取一些记忆清除。但它似乎没有任何帮助。然后将$groups哈希带到另一个函数以获取每个组的用户,但我认为这很好。

注意: Get-QADObject来自quest.com,他们的论坛似乎很安静,所以我希望在这里找到帮助。

我要约会的代码:

    $containers = @(Get-Item -Path $Path | ? {$_.psIscontainer})
    $containers += Get-ChildItem -Path $Path -Recurse | ? {$_.psIscontainer}

    if ($containers -eq $null) {break}
    while ($containers) {
        $container,$containers = $containers
        Write-Output "Container: " $container
        $accts=$null
        $accts=@()
        $accts = @((Get-ACL $container.fullname).Access)
        while ($accts) {
            $acct,$accts = $accts
            $acctsQADObject = $null
            $acctsQADObject = Get-QADObject -PageSize 1000 -DontUseDefaultIncludedProperties -SizeLimit 0 -Identity ([string]$acct.IdentityReference) 
            if ($acctsQADObject.ObjectClass -contains 'group') {
                $Name = $acctsQADObject.Name
                $DN = $acctsQADObject.DN
                $key = "$($Name)|$($DN)"
                if (!$groups.ContainsKey($key) -and $key -notcontains "Group|Member") {
                    Write-Output "Found first reference to a group: $($DN) assigned to directory $container"
                    $msg += "Found first reference to a group: $($DN) assigned to directory $container `n"
                    $groups.add($key,$DN)
                }
            }                           

        }
    }

1 个答案:

答案 0 :(得分:0)

为什么不使用Get-QADGroup代替Get-QADObject?这样你就可以保证得到一个团队。然后你可以从中拉出DN属性。我写了一些对文件夹审计有用的代码,听起来你正试图这样做。它可以在另一篇文章here中找到。要获取群组成员,您可以使用Get-QADGroupMember $groupname -Indirect