含DateTime dt=default的C#类致PowerShell调用异常求解决方案
解决PowerShell调用带DateTime默认参数的C#方法报错问题
问题根源
PowerShell(尤其是5.x版本)对C#中值类型的default默认参数支持存在缺陷,无法正确解析DateTime dt = default这种参数定义,导致无参调用$session.GetVersion()时抛出类型错误。
可行的PowerShell层面 workaround
显式传递默认值
直接传入DateTime的默认值(即DateTime.MinValue)来匹配方法签名,绕过PowerShell的默认参数解析问题:$session.GetVersion([DateTime]::MinValue)通过反射调用方法
利用.NET反射机制直接定位目标方法并指定参数,完全避开PowerShell的成员解析逻辑:# 获取GetVersion方法的元数据(指定参数类型为DateTime) $targetMethod = $session.GetType().GetMethod("GetVersion", [type[]]@([DateTime])) # 调用方法,传入DateTime的默认值 $versionResult = $targetMethod.Invoke($session, @([DateTime]::MinValue))给对象添加包装方法
动态给$session对象添加一个无参的脚本方法,内部自动传递默认参数,后续用这个新方法替代原方法调用:# 添加包装方法 $session | Add-Member -MemberType ScriptMethod -Name GetVersion_Workaround -Value { # 内部调用原方法并传入默认值 $this.GetVersion([DateTime]::MinValue) } -Force # 调用新方法 $session.GetVersion_Workaround()
内容的提问来源于stack exchange,提问作者user63033
相关产品推荐
相关产品推荐

