Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 内存耗尽问题_Powershell_Distinguishedname_Quest - Fatal编程技术网

Powershell 内存耗尽问题

Powershell 内存耗尽问题,powershell,distinguishedname,quest,Powershell,Distinguishedname,Quest,我试图通过NAS共享上目录/子目录的广泛结构,递归地查找文件夹上的组及其可分辨名称(DN) 我编写了代码,它可以工作,但速度很慢,而且由于某些原因会占用内存 我正在寻求帮助,以了解我可能做错了什么,或者是否有一种更快/更少占用内存的方法。 在获取每个$acct并使用获取QADObject创建$acctsQADObject时,它似乎会减慢速度 我看到每个容器(目录)有8-10个$acct,处理每个容器大约需要5秒或更长时间 似乎,$acct的每个迭代都在缓存它没有释放的东西,因此,$acct的每

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

我编写了代码,它可以工作,但速度很慢,而且由于某些原因会占用内存

我正在寻求帮助,以了解我可能做错了什么,或者是否有一种更快/更少占用内存的方法。

  • 在获取每个
    $acct
    并使用
    获取QADObject
    创建
    $acctsQADObject
    时,它似乎会减慢速度

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

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

  • 我正在从
    $accts
    弹出
    $acct
    ,并试图强制
    $acctsQADObject
    $null
    以尝试清除一些内存。不过,这似乎毫无帮助。然后,
    $groups
    散列被带到另一个函数中,以获取每个组的用户,但我认为这很好

注意:获取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)
                }
            }                           

        }
    }

为什么不使用
获取QADGroup
而不是
获取QADObject
?这样你就可以保证得到一个团队。然后您可以从中提取DN属性。我写了一些代码,这些代码对文件夹审计很有用,听起来像是你正在尝试做的事情。可以在另一个帖子中找到。要获取组成员,可以使用
get-QADGroupMember$groupname-Indirect

您是否处于锁定到QAD cmdlet的环境中?您有2008R2服务器吗?如果可以的话,我会用MS AD cmdlet重写它。我在while($accts)循环[System.GC]::Collect()之后添加了它,但内存仍在增加。EBGReen,你有一些代码可以用来替换使用MS AD cmdlet的while($accts)循环吗?我使用的是2008R2,我没有被QAD cmdlet锁定。我现在手头没有任何东西,今天有点忙,但如果有机会,我会看看我能想出什么。请注意,导入模块ActiveDirectory不起作用。我还不确定如何让它工作。我确实得到了模块,并没有看到太多的安装,肯定不是Active Directory。我读到的每一篇文章似乎都表明它与之相伴。我知道Windows7需要安装RSAT,也许你需要在2008服务器上安装它?