在PowerShell中,我希望使用New-Object来调用单参数.Net构造函数new X509Certificate2(byte[] byteArray)。问题是,当我使用powershell中的字节数组执行此操作时,
新对象:无法找到"X509Certificate2“的重载,参数计数为"516”。
发布于 2012-10-13 17:31:21
这种使用new-object的方法应该有效:
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
-ArgumentList @(,$bytes)诀窍是PowerShell需要一个构造函数参数数组。当只有一个参数而它是一个数组时,它会混淆PowerShell的过载解析算法。上面的代码通过将字节数组放在只有一个元素的数组中来帮助解决这个问题。
Update: in PowerShell >= v5可以直接调用构造函数,如下所示:
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)发布于 2012-10-13 05:15:48
令我惊讶的是,我尝试过这个方法,它看起来很有效:
[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert我还不知道它的作用是什么魔法,所以你的解释性评论是非常感谢的。:)
(注意:我后来发现,像上面一样使用方括号类型名称也会导致其他错误,比如‘无法将值“"System.Byte[]”转换为类型System.Byte[]错误:“找不到所请求的对象。”基思推荐的显式新对象方法似乎更好!)
https://stackoverflow.com/questions/12870109
复制相似问题