PowerShell传PSCustomObject函数参数报参数转换错误求解
报错根因
你触发类型转换错误的核心原因是参数类型名拼写错误:你在param块里写的类型是System.Management.Automation.PSCustomObejct,把Object的字母顺序写反成了Obejct,PowerShell无法识别这个不存在的类型,才会抛出“无法将PSCustomObject转换为PSCustomObejct”的错误,和对象传递方式没有关系。
正确实现方式
PSCustomObject本身就是引用类型,你只需要修正拼写错误,不需要额外做重复创建对象的操作,第一次通过ConvertFrom-Json加载得到的对象可以反复传入函数复用,默认就是按引用传递,不会生成新的对象副本。
修正后的函数代码如下:
Function Do-Something() { param( [parameter(Mandatory=$true)] [PSCustomObject]$jsonObject ) # 直接操作$jsonObject即可 # 函数内对对象属性的修改会直接作用在原对象上 }
补充说明
- 日常写脚本可以直接用简写的
[PSCustomObject]类型约束,不需要写全长长的命名空间,能大幅降低手滑拼错类型名的概率 - 普通业务场景不需要额外加
[ref]修饰参数,PSCustomObject作为引用类型默认传参就符合你“单次创建、多次复用”的需求 - 只有当你需要在函数内修改变量本身的指向(比如把传入的$jsonObject重新赋值为一个全新的对象,且希望外部变量同步变更指向)的时候,才需要用到
[ref]关键字,处理JSON配置对象的常规场景完全用不到。
内容的提问来源于stack exchange,提问作者abnerkanezzer
相关产品推荐
相关产品推荐

