首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为接受单个数组参数的构造函数调用New-Object?

如何为接受单个数组参数的构造函数调用New-Object?
EN

Stack Overflow用户
提问于 2012-10-13 05:00:16
回答 2查看 43.2K关注 0票数 62

在PowerShell中,我希望使用New-Object来调用单参数.Net构造函数new X509Certificate2(byte[] byteArray)。问题是,当我使用powershell中的字节数组执行此操作时,

新对象:无法找到"X509Certificate2“的重载,参数计数为"516”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-13 17:31:21

这种使用new-object的方法应该有效:

代码语言:javascript
复制
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
      -ArgumentList @(,$bytes)

诀窍是PowerShell需要一个构造函数参数数组。当只有一个参数而它是一个数组时,它会混淆PowerShell的过载解析算法。上面的代码通过将字节数组放在只有一个元素的数组中来帮助解决这个问题。

Update: in PowerShell >= v5可以直接调用构造函数,如下所示:

代码语言:javascript
复制
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)
票数 77
EN

Stack Overflow用户

发布于 2012-10-13 05:15:48

令我惊讶的是,我尝试过这个方法,它看起来很有效:

代码语言:javascript
复制
[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert

我还不知道它的作用是什么魔法,所以你的解释性评论是非常感谢的。:)

(注意:我后来发现,像上面一样使用方括号类型名称也会导致其他错误,比如‘无法将值“"System.Byte[]”转换为类型System.Byte[]错误:“找不到所请求的对象。”基思推荐的显式新对象方法似乎更好!)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12870109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档