Выпуск памяти исчерпан

Я пытаюсь рекурсивно найти группы в папках и их отличительные имена (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,

Другие вопросы по тегам