NAS共有のディレクトリ/サブディレクトリの広範な構造を通じて、フォルダーのグループとその識別名 (DN) を再帰的に見つけようとしています。
私はコードを作成し、動作しますが、何らかの理由 で遅く、メモリをむさぼり食います。
私が間違っている可能性があることを理解するための助けを探しています.
それぞれを取り、 with
$acct
を作成するところが遅くなるようです。$acctsQADObject
Get-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)
}
}
}
}