数组导致"系统内存不足异常"



我正在运行下面的脚本,它导致抛出了类型为"system.outofmemoryexception"的异常

我相信这是由于@Results数组超过了分配给windowsshell的2gb。有没有可能迭代结果的方法,或者我一直在分配更多的内存(最终可能会有很多…)?

$Path = "path to output" 
### Get all PF
$publicFolders = Get-PublicFolder "Public Folder Name" -Recurse -resultsize unlimited | Select-Object *

### Array to contain results
$results = @()
###Begin looping through each PF and grab each user/group with AccessRights to that folder
$final = ForEach($pf in $publicFolders){    
$perms     = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} 

Foreach($perm in $perms){
$temp = [PSCustomObject]@{
MailFolderName = $pf.Identity 
UserWithPerms  = $perm.User
AccessRights   = $perm | Select-Object -ExpandProperty AccessRights
}
$results += $temp
}

}
$final | Export-Csv $path -NoTypeInformation

我是不是找错树了?

提前谢谢。

对外部循环使用ForEach-Objectcmdlet而不是foreach(){}循环语句-这样您就可以立即开始将输出管道传输到Export-Csv,而不是将其缓冲在数组中:

$publicFolders |ForEach-Object {
$pf    = $_
$perms = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} 

Foreach($perm in $perms){
[PSCustomObject]@{
MailFolderName = $pf.Identity 
UserWithPerms  = $perm.User
AccessRights   = $perm | Select-Object -ExpandProperty AccessRights
}
}                   
} | Export-Csv $path -NoTypeInformation

或者,在枚举每个文件夹的权限后,将部分结果集刷新到文件中:

ForEach($pf in $publicFolders){    
$perms     = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} 

$results = Foreach($perm in $perms){
[PSCustomObject]@{
MailFolderName = $pf.Identity 
UserWithPerms  = $perm.User
AccessRights   = $perm | Select-Object -ExpandProperty AccessRights
}
}
# flush the buffer before moving to the next set of permissions
$results |Export-Csv $path -NoTypeInformation -Append
}

相关内容

  • 没有找到相关文章

最新更新