New-Object
PowerShellで、単一引数の.Netコンストラクターを呼び出すために使用したいと思いnew X509Certificate2(byte[] byteArray)
ます。問題は、PowerShellのバイト配列を使用してこれを行うと、次のようになります。
New-Object:「X509Certificate2」のオーバーロードと引数数「516」が見つかりません。
New-Object
PowerShellで、単一引数の.Netコンストラクターを呼び出すために使用したいと思いnew X509Certificate2(byte[] byteArray)
ます。問題は、PowerShellのバイト配列を使用してこれを行うと、次のようになります。
New-Object:「X509Certificate2」のオーバーロードと引数数「516」が見つかりません。
使用するこのアプローチは機能する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)
驚いたことに、私はこれを試してみましたが、うまくいくようです:
[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert
それがどのような魔法で機能するのかはまだわかりませんので、説明的なコメントをいただければ幸いです。:)
(注:上記のように角括弧タイプ名を使用すると、「値「System.Byte []」をタイプ「System.Security.Cryptography.X509Certificatesに変換できません」などの他のエラーが発生する可能性があることがわかりました.X509Certificate". エラー: "要求されたオブジェクトが見つかりません。' Keith が推奨する明示的な New-Object アプローチの方が優れているようです!)