如何为一个采用单个数组参数的构造函数调用New-Object?

时间:2012-10-13 05:00:17

标签: arrays powershell parameters constructor

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

  

New-Object:找不到“X509Certificate2”的重载和参数count:“516”。

2 个答案:

答案 0 :(得分:59)

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

$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
      -ArgumentList @(,$bytes)

诀窍是PowerShell期待一组构造函数参数。当只有一个参数且它是一个数组时,它可能会混淆PowerShell的重载决策算法。上面的代码通过将字节数组放在只有一个元素的数组中来帮助它。

在PowerShell> = v5中

更新,您可以像这样直接调用构造函数:

$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)

答案 1 :(得分:10)

令我惊讶的是,我尝试了这个,看起来它有效:

[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert

我还不知道它的作用是什么,所以你的解释性评论是值得赞赏的。 :)

(注意:我发现使用方括号类型名称,如上所述,也可能导致其他错误,例如'无法转换值'System.Byte []“键入”System.Security。 Cryptography.X509Certificates.X509Certificate“。错误: “找不到请求的对象。” Keith推荐的显式New-Object方法似乎更好!)