Выпуск памяти исчерпан
Я пытаюсь рекурсивно найти группы в папках и их отличительные имена (DN) с помощью обширной структуры каталогов / подкаталогов на общем ресурсе NAS.
Я сделал код, и он работает, но он медленный и по какой-то причине поглощает память.
Я ищу помощи, чтобы понять, что я могу делать неправильно, или если есть более быстрый / менее интенсивный способ памяти сделать это.
Кажется, чтобы замедлить, где он берет каждый
$acct
и создает$acctsQADObject
сGet-QADObject
,Я вижу 8-10
$acct
на контейнер (каталог), и обработка каждого из них занимает около 5 секунд или более.Кажется, что каждая итерация
$acct
кэширует что-то, что не выпускает, поэтому каждый цикл$acct
Вы можете наблюдать увеличение памяти на 0,02+ МБ.Я выскочил
$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 ответ
Почему бы не использовать Get-QADGroup
вместо Get-QADObject
? Таким образом, вы гарантированно получите группу. Тогда вы можете просто извлечь свойство DN из него. Я написал некоторый код, полезный для аудита папок, который, похоже, вы пытаетесь сделать. Это можно найти в другом посте здесь. Чтобы получить членов группы, вы можете использовать Get-QADGroupMember $groupname -Indirect
,