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