我试图通过NAS共享上的目录/子目录的广泛结构递归地查找文件夹上的组及其可分辨的名称(DN)。
我编写了代码,它可以工作,但由于某种原因,它速度慢,占用内存。
--我正在寻求帮助,以了解我可能做错了什么,或者如果有一种更快/更少内存密集型的方法来做到这一点。
$acct的速度,并使用Get-QADObject创建了$acctsQADObject。$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)
}
}
}
}发布于 2012-08-17 14:43:26
为什么不使用Get-QADGroup而不是Get-QADObject呢?这样你就能得到一个团队。然后,您可以从它中提取DN属性。我编写了一些代码,这些代码对于文件夹审计很有用,听起来像是你想要做的。它可以在另一篇文章here中找到。要获得组成员,可以使用Get-QADGroupMember $groupname -Indirect。
https://stackoverflow.com/questions/11988726
复制相似问题