Exchange 2019 CU11/2016 CU22升级后审计日志脚本报错求解
问题根因
Exchange Server 2019 CU11和2016 CU22版本调整了Search-AdminAuditLog cmdlet的输出对象类型,你自定义的New-AuditLogReport函数中对输入参数强指定了旧版本的Microsoft.Exchange.Management.SystemConfigurationTasks.AdminAuditLogEvent类型,新版本输出的对象与该类型不匹配,因此触发管道参数绑定失败的报错。
修复方案
修改New-AuditLogReport函数的输入参数定义,移除或调整类型限制即可:
- 找到函数中的参数定义段:
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] [Microsoft.Exchange.Management.SystemConfigurationTasks.AdminAuditLogEvent] $AuditLogEntry
- 替换为以下两种写法任意一种即可:
- 通用PSObject类型适配(兼容性最强)
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] [PSObject] $AuditLogEntry
- 完全移除类型声明
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] $AuditLogEntry
可选补充
如果需要保留强类型校验,可以先执行以下命令查询当前Exchange版本输出的审计日志对象实际类型,再将上述参数的类型声明替换为查询结果即可:
Search-AdminAuditLog -ResultSize 1 | Get-Member | Select-Object TypeName -First 1
另外建议在函数process块的开头添加$cmdletparameters = @(),避免变量残留导致的参数值拼接错误。
内容的提问来源于stack exchange,提问作者Evandro
相关产品推荐
相关产品推荐

