powershell - What objects are suitable for Add-Member? -
दस्तावेज़ीकरण कहता है:
एक उपयोगकर्ता परिभाषित कस्टम सदस्य को विंडोज के एक उदाहरण के लिए जोड़ता है PowerShell ऑब्जेक्ट।
"Windows PowerShell ऑब्जेक्ट" क्या है?
यह ठीक काम करता है:
$ obj = new-object System.object $ obj | Add-member -membertype noteproperty -name नाम -मूल्य "ओके" $ obj.name लेकिन ऐसा नहीं है:
$ obj = @ {} वास्तव में, मैं $ त्रुटि [0] में संपत्ति जोड़ने का प्रयास कर रहा हूं।
PowerShell को एक PSObject कहा जाता है जो कि किसी भी .NET ऑब्जेक्ट के आस-पास एक आवरण है (या यह पूरी तरह से कस्टम ऑब्जेक्ट हो सकता है) और जब आप एड-सदस्य कॉल करते हैं, तो PowerShell पीएसओबाइजेक्ट के साथ असली .NET ऑब्जेक्ट लपेटता है। ।
जिस तरह से जोड़-सदस्य काम करता है, उस पर निर्भर करता है कि आपने PSObject से शुरुआत की या नहीं। यदि आपने PSObject से शुरू नहीं किया है, तो Add-Member इनपुट को PSObject में लपेट देगा और अनुकूलित ऑब्जेक्ट को देखने के लिए आपको वेरिएबल को पुन: असाइन करने की आवश्यकता होगी। उदाहरण के लिए:
/ P>
$ x = [पर्यावरण] :: OSVersion $ x | जोड़ें सदस्य नोटप्रॉपर्टी IsVista $ true $ x | प्रारूप-सूची # नई प्रॉपर्टी नहीं दिखाती ऐसा इसलिए है क्योंकि OSVersion लिपटे नहीं है एक PSObject है जोड़-सदस्य इसे लपेटता है, लेकिन वह आवरण खो जाता है क्योंकि आप लिपटे हुए ऑब्जेक्ट के लिए $ x पुनः निर्दिष्ट नहीं कर रहे हैं। इस व्यवहार के विपरीत:
$ x = नया ऑब्जेक्ट ऑपरेटिंग सिस्टम ('Win32NT', '6.0') $ x | जोड़ें सदस्य नोटप्रॉपर्टी IsVista $ true $ x | प्रारूप सूची # नई संपत्ति दिखाती है इसका कारण यह है कि नई ऑब्जेक्ट एक PSObject में नया उदाहरण लपेटता है। तो आपके ऐड-सदस्य का सदस्य मौजूदा आवरण में सदस्यों को जोड़ रहा है।
पहले उदाहरण पर वापस जा रहे हैं, आप उसे इसे बदलकर अपेक्षित कार्य कर सकते हैं:
$ X = [पर्यावरण] :: ओएसविर्सियन $ x = $ x | जोड़ें सदस्य नोटप्रॉपर्टी IsVista $ true -PassThru $ x | फ़ॉर्मेट-सूची # DOES नई प्रॉपर्टी दिखाती है अब इसके बाद, यह कारण है कि हैशटेबल आपके द्वारा अपेक्षित तरीके से काम नहीं करता है क्योंकि हैशटेबल विशेष रूप से PowerShell द्वारा संचालित होते हैं और मूल रूप से एडॉप्टर Hashtables के लिए कुंजी के रूप में संपत्तियों (kinda) का उपयोग करता है और ऐड-सदस्य इस तरह की वस्तु के साथ अपेक्षित काम नहीं करेगा।
Comments
Post a Comment