2012-10-13 15 views

cevap

49

new-object kullanarak bu yaklaşım çalışması gerekir.!

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

Bu hile, PowerShell'in bir yapıcı argüman dizisi beklediği şeklindedir. bir dizidir, PowerShell'in aşırı yük çözünürlüğü algoritmasını karıştırır. Yukarıdaki kod, yalnızca bir öğe ile bir dizide bayt dizisini koyarak yardımcı olur.

7

olsun, ben bu denedim ve çalışıyor görünüyor:

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

Henüz tarafından bilmiyorum Hangi sihir işe yarıyorsa, açıklayıcı yorumlarınız takdir ediliyor. :)

(Not: Yukarıda gördüğüm gibi köşeli parantez-tür adının kullanılmasının, "Değer dönüştürülemiyor" System.Byte [] "türü" türüne "gibi başka hatalara da yol açabileceğini buldum. .Security.Cryptography.X509Certificates.X509Certificate "Hata: " istenen nesne bulunamıyor 'Keith iyi görünüyor tarafından önerilen açık Yeni-Nesne yaklaşımı)

+6

Diziyi, yazılmadan (aslında [nesne []] yerine) [byte []] olarak yazarak, doğru yapıcıyı seçerken tüm belirsizlikleri ortadan kaldırırsınız. PowerShell, örtülü veya açık bir yayın yokken bir oynatma gerçekleştirirken bir kurucu arayacaktır. – x0n

+0

Benim durumumda güçlü yazarak yaptım ama hiçbir şey ... – Andry

+0

Aynı, açıkça ekleyerek türlerin hiçbir şey yapmaz. Baytları içeren ifadeyi kontrol etmek için, zaten [] biçiminde değil, nesne baytını [] vardır. Keith Hills önerisini kullanmak iyi çalışıyor. – Svend

İlgili konular