PowerShell函数调用时传入$_.Exception始终为$null的原因
问题根因
这是PowerShell语法混淆导致的典型传参错误:
- 括号包裹参数、逗号分隔多参数的写法,仅适用于调用.NET对象的方法,完全不适用于PowerShell自定义函数、内置cmdlet的调用场景。
- 你写的
LogError("…", $_.Exception),PowerShell会将括号内的("…", $_.Exception)整体识别为一个二元数组,把整个数组赋值给第一个位置形参$message;第二个形参$exception没有收到任何传入值,因此始终保持定义时的默认值$null。
可以在LogError函数内加一行测试代码验证该逻辑:
Write-Host "`$message 类型:$($message.GetType().FullName),元素数量:$($message.Count)"
运行后就能看到$message实际是数组类型,你要传递的Exception对象就存在该数组的第二个索引位。
正确调用写法
去掉包裹参数的括号,多个参数之间用空格分隔即可,两种常用写法:
- 按位置顺序传参(写法简洁)
catch { LogError "自定义错误消息" $_.Exception } - 显式指定参数名传参(可读性强,不会因参数顺序写错引发问题)
catch { LogError -Message "自定义错误消息" -Exception $_.Exception }
内容的提问来源于stack exchange,提问作者AxD
相关产品推荐
相关产品推荐

