Как я могу вызвать New-Object для конструктора, который принимает один параметр массива?
В PowerShell я хочу использовать New-Object
для вызова конструктора .Net-конструктора с одним аргументом new X509Certificate2(byte[] byteArray)
. Проблема в том, что когда я делаю это с байтовым массивом из powershell, я получаю
Новый объект: не удается найти перегрузку для "X509Certificate2" и количество аргументов: "516".
Ответы
Ответ 1
Этот подход к использованию new-object
должен работать:
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
-ArgumentList @(,$bytes)
Фокус в том, что PowerShell ожидает массив аргументов конструктора. Когда есть только один аргумент, и это массив, он может запутать алгоритм разрешения перегрузки PowerShell. Вышеприведенный код помогает, поместив массив байтов в массив только с одним элементом.
Ответ 2
Удивительно, но я попробовал это, и кажется, что это работает:
[byte[]] $certPublicBytes = something
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate] $certPublicBytes
return $cert
Я еще не знаю, с какой магией он работает, поэтому ваши пояснительные комментарии оценены.:)
(Примечание. Я обнаружил, что использование типа квадратных скобок-типа-типа, как я уже говорил выше, также может привести к другим ошибкам, таким как "Невозможно преобразовать значение" System.Byte [] ", чтобы ввести" System.Security. Cryptography.X509Certificates.X509Certificate ". Ошибка:" Не удается найти запрошенный объект". Явный подход New-Object, рекомендованный Кейтом, выглядит лучше!)