我試圖通過NAS共享上的目錄/子目錄的廣泛結構遞歸地查找文件夾上的組及其可分辨名稱(DN)。內存被吞噬問題
我做的代碼和它的工作原理,但它是緩慢的,狼吞虎嚥的內存出於某種原因。
我在尋找幫助,瞭解我可能會做錯什麼,或者如果有更快/更少的內存密集型方式來做到這一點。
看來它需要每一個
$acct
並創建$acctsQADObject
與Get-QADObject
放緩。我看到每個容器(目錄)8-10
$acct
,並且需要大約5秒或更多來處理每個容器。看起來的
$acct
每次迭代緩存的東西,它不釋放,所以$acct
每個迴路可以觀看內存增長0.02+ MB。我是從
$accts
突然離開$acct
並試圖迫使$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
[email protected]()
$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)
}
}
}
}
您是否處於鎖定QAD cmdlet的環境中?你有一臺2008R2服務器嗎?如果可以,我會用MS AD cmdlet重寫它。 – EBGreen 2012-08-16 14:06:14
我在while($ accts)循環[System.GC] :: Collect()後添加了內存,但內存仍在爬行。 – archcutbank 2012-08-16 14:07:47
EBGReen,你有一些代碼可以替代使用MS AD cmdlet的while($ accts)循環嗎?我在2008R2上,並未鎖定使用QAD cmdlet。 – archcutbank 2012-08-16 14:09:15