¿Cómo llamo a New-Object para un constructor que toma un solo parámetro de matriz?

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!)

Intereting Posts