Comment appeler New-Object pour un constructeur qui prend un seul paramètre de tableau?

Dans PowerShell, je souhaite utiliser New-Object pour appeler un constructeur .Net à un seul argument, new X509Certificate2(byte[] byteArray) . Le problème est que lorsque je fais cela avec un tableau d’octets de Powershell,

New-Object: impossible de trouver une surcharge pour “X509Certificate2” et le nombre d’arguments: “516”.

Cette approche d’utilisation de new-object devrait fonctionner:

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

L’astuce est que PowerShell attend un tableau d’arguments de constructeur. Lorsqu’il n’y a qu’un seul argument et qu’il s’agit d’un tableau, cela peut perturber l’algorithme de résolution de surcharge de PowerShell. Le code ci-dessus facilite la tâche en plaçant le tableau d’octets dans un tableau avec un seul élément.

Étonnamment pour moi, j’ai essayé ceci et il semble que cela fonctionne:

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

Je ne sais pas encore par quelle magie cela fonctionne, donc vos commentaires explicatifs sont appréciés. 🙂

(Remarque: j’ai depuis trouvé que l’utilisation du nom de type crochets comme je l’ai fait ci-dessus peut également entraîner d’autres erreurs, telles que “Impossible de convertir la valeur” System.Byte [] “pour taper” System.Security.Cryptography.X509Certificates .X509Certificate “. Erreur:” Impossible de trouver l’object demandé. “L’approche explicite New-Object recommandée par Keith semble meilleure!)