0

NAS共有のディレクトリ/サブディレクトリの広範な構造を通じて、フォルダーのグループとその識別名 (DN) を再帰的に見つけようとしています。

私はコードを作成し、動作しますが、何らかの理由 で遅く、メモリをむさぼり食います。

私が間違っている可能性があることを理解するための助けを探しています.

  • それぞれを取り、 with$acctを作成するところが遅くなるようです。$acctsQADObjectGet-QADObject

  • $acctコンテナー (ディレクトリ) ごとに 8 ~ 10 個表示され、それぞれの処理に約5秒以上かかります。

  • の各反復は$acct、解放しない何かをキャッシュしているように見えるため、各ループでメモリが 0.02+ MB 増加する$acctのを見ることができます。

  • $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)
                }
            }                           

        }
    }
4

1 に答える 1

0

Get-QADGroupの代わりに使用しないのはなぜGet-QADObjectですか? そうすれば、グループを取得することが保証されます。次に、そこから DN プロパティを取得するだけです。あなたがやろうとしているように聞こえるフォルダー監査に役立つコードをいくつか書きました。こちらの別の投稿で見つけることができます。グループのメンバーを取得するには、 を使用できますGet-QADGroupMember $groupname -Indirect

于 2012-08-17T14:43:26.273 に答える