En PowerShell, quiero usar New-Object
para llamar a un único argumento .Net constructor new X509Certificate2(byte[] byteArray)
. El problema es cuando hago esto con una matriz de bytes de powershell, obtengo
New-Object: no se puede encontrar una sobrecarga para “X509Certificate2” y el recuento de argumentos: “516”.
Este enfoque para usar new-object
debería funcionar:
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate ` -ArgumentList @(,$bytes)
El truco es que PowerShell espera una matriz de argumentos de constructor. Cuando solo hay un argumento y es una matriz, puede confundir el algoritmo de resolución de sobrecarga de PowerShell. El código anterior lo ayuda colocando el conjunto de bytes en una matriz con solo ese elemento.
Sorprendentemente para mí, probé esto y parece que funciona:
[byte[]] $certPublicBytes = something $cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes return $cert
Todavía no sé por qué magia funciona, por lo que se agradecen sus comentarios explicativos. 🙂
(Nota: desde que encontré que el uso de corchetes-tipo-nombre como lo hice anteriormente, también puede conducir a otros errores, como ‘No se puede convertir el valor’ System.Byte [] “para escribir ‘System.Security.Cryptography.X509Certificates .X509Certificate “. Error:” No se puede encontrar el objeto solicitado. “¡El enfoque explícito de Nuevo objeto recomendado por Keith parece mejor!)