You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exchange公共文件夹权限查询报错:ArrayList无法转PublicFolderIdParameter

公共文件夹权限查询报错修复方案

完整报错信息:Cannot process argument transformation on parameter 'Identity'. Cannot convert the "System.Collections.ArrayList" value of type "System.Collections.ArrayList" to type "Microsoft.Exchange.Configuration.Tasks.PublicFolderIdParameter".

根因说明

你的代码中Get-PublicFolder筛选后返回的$pf是多个公共文件夹对象组成的集合(ArrayList类型),而Get-PublicFolderClientPermission的-Identity参数仅支持传入单个公共文件夹标识,直接传入集合触发类型转换失败。

修复步骤

1. 先验证匹配结果数量

执行以下代码确认你当前的筛选规则命中了多少个公共文件夹:

$mepf = Get-MailPublicFolder "Pub Folder Name" -ResultSize unlimited
$alias = $mepf.displayname
$pf = get-publicfolder -Recurse -ResultSize unlimited | ? {$_.Identity -match "$alias"}
$pf.Count

如果返回值大于1,说明你的匹配规则不够精确,如需精确匹配单个文件夹,可以把筛选条件改为$_.Identity -eq "完整的公共文件夹路径"。

2. 修正后的完整权限拉取代码

如果需要批量拉取所有匹配的公共文件夹权限,改用循环遍历单个对象的逻辑:

# 获取目标邮件启用公共文件夹属性
$mepf     = Get-MailPublicFolder "Pub Folder Name" -ResultSize unlimited
$targetDisplayName = $mepf.displayname
# 筛选匹配的公共文件夹,转义特殊字符避免正则误匹配
$pfList   = Get-PublicFolder -Recurse -ResultSize unlimited | Where-Object {$_.Identity -match [regex]::Escape($targetDisplayName)}
# 遍历拉取每个文件夹的权限,关联文件夹路径方便后续映射
$permsList = foreach ($pfItem in $pfList) {
    Get-PublicFolderClientPermission -Identity $pfItem.Identity | 
    Where-Object {$_.User -notmatch "Default|Anonymous"} | 
    Select-Object @{Name='FolderPath';Expression={$pfItem.Identity}},User,AccessRights
}
# 输出所有权限结果
$permsList

优化点说明

  • 新增[regex]::Escape()处理显示名称:自动转义名称中的空格、特殊符号,避免正则匹配逻辑异常
  • 输出结果关联文件夹路径:方便你迁移公共文件夹到共享邮箱时,直接对应权限映射关系
  • 循环传参完全规避集合类型不兼容问题

内容的提问来源于stack exchange,提问作者Techknow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:54:03