Powershell 内存耗尽问题
我试图通过NAS共享上目录/子目录的广泛结构,递归地查找文件夹上的组及其可分辨名称(DN) 我编写了代码,它可以工作,但速度很慢,而且由于某些原因会占用内存 我正在寻求帮助,以了解我可能做错了什么,或者是否有一种更快/更少占用内存的方法。Powershell 内存耗尽问题,powershell,distinguishedname,quest,Powershell,Distinguishedname,Quest,我试图通过NAS共享上目录/子目录的广泛结构,递归地查找文件夹上的组及其可分辨名称(DN) 我编写了代码,它可以工作,但速度很慢,而且由于某些原因会占用内存 我正在寻求帮助,以了解我可能做错了什么,或者是否有一种更快/更少占用内存的方法。 在获取每个$acct并使用获取QADObject创建$acctsQADObject时,它似乎会减慢速度 我看到每个容器(目录)有8-10个$acct,处理每个容器大约需要5秒或更长时间 似乎,$acct的每个迭代都在缓存它没有释放的东西,因此,$acct的每
- 在获取每个
并使用$acct
创建获取QADObject
时,它似乎会减慢速度$acctsQADObject
- 我看到每个容器(目录)有8-10个
,处理每个容器大约需要5秒或更长时间$acct
- 似乎,
的每个迭代都在缓存它没有释放的东西,因此,$acct
的每个循环都可以看到内存增加了0.02+MB$acct
- 我正在从
弹出$accts
,并试图强制$acct
到$acctsQADObject
以尝试清除一些内存。不过,这似乎毫无帮助。然后,$null
散列被带到另一个函数中,以获取每个组的用户,但我认为这很好$groups
是来自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服务器上安装它?