2012-10-13 27 views
36

PowerShell में, मैं New-Object उपयोग करने के लिए एक एकल तर्क नेट निर्माता new X509Certificate2(byte[] byteArray) कॉल करना चाहते हैं। समस्या है जब मैं powershell से एक बाइट सरणी के साथ ऐसा करते हैं, मैं मेरे लिए हैरानी की बात हैमैं एक कन्स्ट्रक्टर के लिए नया ऑब्जेक्ट कैसे कॉल करूं जो एक सरणी पैरामीटर लेता है?

New-Object : Cannot find an overload for "X509Certificate2" and the argument count: "516".

उत्तर

49

new-object उपयोग करने के लिए यह दृष्टिकोण काम करना चाहिए:।!

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

चाल कि PowerShell निर्माता तर्क की एक सरणी की उम्मीद कर रहा है। जब वहाँ केवल एक ही तर्क है और यह है एक सरणी है, यह पावरशेल के अधिभार रिज़ॉल्यूशन एल्गोरिदम को भ्रमित कर सकती है। ऊपर दिया गया कोड बाइट सरणी को सरणी में केवल एक तत्व के साथ डालने में मदद करता है।

7

मिलता है, मैं इस कोशिश की और यह यह काम करता है लगता है:

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

मैं अभी तक से पता नहीं है यह जादू क्या काम करता है, इसलिए आपकी व्याख्यात्मक टिप्पणियों की सराहना की जाती है। :)

(नोट: मैंने पाया है कि मैंने ऊपर वर्णित स्क्वायर-ब्रैकेट-प्रकार-नाम का उपयोग करके, अन्य त्रुटियों को भी जन्म दे सकता है, जैसे 'मूल्य परिवर्तित नहीं कर सकता "सिस्टम। बाइट []" टाइप करने के लिए "सिस्टम .Security.Cryptography.X509Certificates.X509Certificate "। त्रुटि: " का अनुरोध वस्तु नहीं खोजा जा सका 'स्पष्ट न्यू-वस्तु दृष्टिकोण से कीथ बेहतर लगता है अनुशंसित)

+6

अनियमित (जो वास्तव में [वस्तु []] के बजाय सरणी को [बाइट []] के रूप में दृढ़ता से टाइप करके) आप सही कन्स्ट्रक्टर का चयन करते समय सभी अस्पष्टता को हटा रहे हैं। यदि कोई अंतर्निहित या स्पष्ट कास्ट उपलब्ध नहीं है तो पावरशेल एक कलाकार का प्रदर्शन करेगा जब कलाकार कास्ट करेगा। – x0n

+0

मेरे मामले में मैंने मजबूत टाइपिंग किया लेकिन कुछ भी नहीं ... – Andry

+0

वही, स्पष्ट रूप से प्रकार जोड़ने से कुछ भी नहीं होता है। बाइट्स युक्त अभिव्यक्ति की जांच कर रहा है, इसमें पहले से ही बाइट [] है, और ऑब्जेक्ट नहीं है []। कीथ हिल्स सुझाव का उपयोग ठीक काम करता है। – Svend