61

New-ObjectPowerShellで、単一引数の.Netコンストラクターを呼び出すために使用したいと思いnew X509Certificate2(byte[] byteArray)ます。問題は、PowerShellのバイト配列を使用してこれを行うと、次のようになります。

New-Object:「X509Certificate2」のオーバーロードと引数数「516」が見つかりません。

4

2 に答える 2

75

使用するこのアプローチは機能するnew-objectはずです:

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

秘訣は、PowerShellがコンストラクター引数の配列を期待していることです。引数が1つだけで、それが配列の場合、PowerShellの過負荷解決アルゴリズムを混乱させる可能性があります。上記のコードは、バイト配列をその1つの要素のみを含む配列に配置することで役立ちます。

更新: PowerShell> = v5では、次のようにコンストラクターを直接呼び出すことができます。

$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)
于 2012-10-13T17:31:21.273 に答える
10

驚いたことに、私はこれを試してみましたが、うまくいくようです:

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

それがどのような魔法で機能するのかはまだわかりませんので、説明的なコメントをいただければ幸いです。:)

(注:上記のように角括弧タイプ名を使用すると、「値「System.Byte []」をタイプ「System.Security.Cryptography.X509Certificatesに変換できません」などの他のエラーが発生する可能性があることがわかりました.X509Certificate". エラー: "要求されたオブジェクトが見つかりません。' Keith が推奨する明示的な New-Object アプローチの方が優れているようです!)

于 2012-10-13T05:15:48.723 に答える