कस्टम ऑब्जेक्ट बनाने के लिए अलग अलग तरीके


Credits

Translated From: PowerShell: Creating Custom Objects (Initially published by jrich )


1. नया ऑब्जेक्ट

आप किसी भी प्रकार की कोई वस्तु उत्पन्न करने के लिए New-Object cmdlet उपयोग कर सकते हैं। PSObject कस्टम ऑब्जेक्ट्स के लिए दो विकल्प हैं और ऑब्जेक्ट

PSObject
 System.Management.Automation.PSCustomObject वर्ग का कोई ऑब्जेक्ट बनाता है
ऑब्जेक्ट वर्ग System.Object के किसी ऑब्जेक्ट बनाता है
जबकि PSObject थोड़ा और अधिक भूमि के ऊपर की आवश्यकता होती है, यह आम तौर पर पसंद है। कमियां ऑब्जेक्ट के लिए इस आलेख में explained हैं:
http://cjoprey.wordpress.com/archived/custom-object-gotchas/   

आप भी -ComObject एक COM ऑब्जेक्ट को बनाने के लिए निर्दिष्ट कर सकते हैं, लेकिन जो इस आलेख में शामिल नहीं है।

उदाहरण:

#Example 1.1
$obj = new - object psobject

किसी ऑब्जेक्ट के लिए सदस्यों को जोड़ने के लिए दो अलग अलग तरीके हैं

1.1 जोड़ें-सदस्य (Add-Member)

सबसे अच्छा (और सबसे वर्बोज़) विधि Add-Member का उपयोग करने के लिए है। इस के लिए कारण है कि आप जोड़ने के लिए सदस्य का प्रकार निर्दिष्ट कर सकते हैं (अन्य सभी तरीकों NoteProperty लगता है।

#Example 1.2
$obj = New-Object PSObject
Add-Member -InputObject $obj -MemberType NoteProperty -Name customproperty -Value ""

इस बारे में एक ध्यान दें कि आप का चयन करें-ऑब्जेक्ट के साथ के रूप में जहां आप नहीं है एक मान निर्दिष्ट करने की आवश्यकता है।

1.2 हैश (Hash)

आप गुण बनाने के लिए की एक बहुत है और वे सभी मान है, तो आप एक हैश तालिका ऑब्जेक्ट गुणों को जल्दी बनाने के लिए ऑब्जेक्ट को असाइन कर सकते हैं। यह आप का नाम/मान के जोड़ों (एक पैतृक आदेश अनुप्रयोग या एक पाठ फ़ाइल से वापसी) की एक सूची है, तो बहुत उपयोगी हो सकता है

उदाहरण
#Example 1.3
$props = @{
Property1 = 'one'
Property2 = 'two'
Property3 = 'three'
}
$object new - object psobject -Property $props

1.3 हैश PowerShell v3 के साथ (Hash with PowerShell v3)



PowerShell v3 के साथ यह एक बालक आसान है, क्योंकि वे एक प्रकार त्वरक PSObject जो इस तरह इस्तेमाल किया जा सकता के लिए जोड़ दिया है।

#Example 1.4
$obj = [PSCustomObject]@{
Property1 = 'one'
Property2 = 'two'
Property3 = 'three'
}

2. New-Module -AsCustomObject

आप भी उपयोग कर सकते हैं New-Module AsCustomObject पैरामीटर के साथ कोई कस्टम ऑब्जेक्ट बनाएँ करने के लिए। यह करने के लिए मुख्य लाभ टाइप करने की क्षमता विवश एक सदस्य है। यह भी तरीके (कार्यों) को जोड़ने के लिए आसान है

#Example 2.1
$numbers = New-Module -AsCustomObject -ScriptBlock {[
int ]$n1=$null
Export-ModuleMember -Variable *}
$numbers.n1 = 4
$numbers.n1 = "abc"

यदि आप उपरोक्त कोड परीक्षण, तो आप देखेंगे कि आप स्ट्रिंग असाइन करने के लिए का प्रयास करते समय यह त्रुटि फेंक देंगे यह करने के लिए abc 

आप भी Scriptblock के अंदर फ़ंक्शन का उपयोग करें ऑब्जेक्ट के लिए विधियों के रूप में कार्य करने के लिए कर सकते हैं।

#example 2.2
$numbers = New-Module -AsCustomObject -ScriptBlock {
    [int ]$n1=$null
    Function Sqr {
        [math]::pow($n1,2)
    }
    Export-ModuleMember -Variable * -Function *}
 
$numbers.n1 = 5
$numbers.Sqr()

इस मामले में N1 एक संख्या होने के लिए मजबूर Sqr समारोह में कम सत्यापन कोड लिखने के लिए आप की अनुमति देता है। 

3. जोड़ें-प्रकार (C#) (Add-Type (C#))

कुछ दुर्लभ मामलों में Add-Type Cmdlet एक वर्ग C# में निर्धारित करके एक प्रकार बनाने के लिए उपयोगी हो सकता है। यह एक प्रकार का नाम और सी # रनटाइम करने के लिए उपयोग के साथ आप प्रदान करता है। ऐसा करने के लिए मुख्य कारणों में से एक Win32_API कॉल करने के लिए पहुँच प्राप्त करने के लिए है���

#Example 3.1
Add-Type @"
    using System;
    public class myClass{
        public Double number=0;
        public Double Sqr()
        {
            return Math.Pow(number,2.0);
        }
    }
"@
 
$obj = New-Object myClass
$obj.number = 5
$obj.Sqr()

 

4. Select-Object

इस विधि हेर या इस तथ्य के बाद फ़िल्टर किए गए किया जा करने के लिए आंकड़े जुटाने का एक त्वरित और गंदे साधन के लिए महान है।

उदाहरण
#example 4.1
$obj = 
"" | select prop1, prop2

आप आधार ऑब्जेक्ट के रूप में एक रिक्त स्ट्रिंग का उपयोग कर और फिर अन्य गुण उस ऑब्जेक्ट के लिए निर्दिष्ट हैं। दिए गए ऑब्जेक्ट प्रकार है एक selected.system.string, लेकिन यह करने के लिए एक कस्टम typename pstypenames कोड को संशोधित करके अद्यतन किया जा सकता।

#Example 4.2
$obj | gm

TypeName: Selected.System.String

Name              MemberType     Definition 
----                  ----------           ----------                    
Equals             Method             bool Equals(System.Object obj)
GetHashCode Method int        GetHashCode() 
GetType          Method type     GetType() 
ToString          Method string   ToString() 
prop1             NoteProperty     prop1=null 
prop2             NoteProperty     prop2=null

तुम नोटिस हूँ कि ऑब्जेक्ट प्रकार एक Selected.System.String है।

5. कस्टम प्रकार कस्टम ऑब्जेक्ट के लिए

एक कस्टम ऑब्जेक्ट बनाने के बाद, आप कुछ और संदर्भ करने के लिए ऑब्जेक्ट के typename अद्यतन कर सकते हैं। यह महान काम करता है जब डेटा कैसे प्रदर्शित किया जाता है परिवर्तित करने के लिए स्वरूपण फ़ाइलें (.ps1xml) के लिए किसी ऑब्जेक्ट का उपयोग कर।यह दोनों का उपयोग New-Object और का चयन Select-Object ऊपर बताई गई विधियों के साथ काम करता है।

एक typename जोड़ने की सबसे आम विधि Insert() पद्धति है। इस ��िधि typename संग्रह का एक निर्दिष्ट अनुक्रमणिका में सम्मिलित करने के लिए आप की अनुमति देता है। आप भी Add() विधि का उपयोग कर सकते हैं, लेकिन इस संग्रह के तल पर typename जोड़ देगा।

यह तो आप एक वस्तु में एक hashtable उसके संबंधित विधियों के साथ सिर्फ hashtable typename में ऑब्जेक्ट सम्मिलित करने के द्वारा चालू नहीं कर सकता इस ऑब्जेक्ट के लिए, अतिरिक्त कुछ भी नहीं जोड़ ���ोगा कि पता करने के लिए महत्वपूर्ण है।

उदाहरण:

#Example 5.1
#Create the custom object
$obj = "" | select prop1, prop2
 
#Update the typename to something else and place it at the first index of the collection
$obj.pstypenames.insert(0,'Custom.ObjectExample')
 
#Look at object
$obj | get -member
 
   TypeName: Custom.ObjectExample
 
Name        MemberType   Definition
----        ----------   ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType     Method       type GetType()
ToString Method string ToString()
prop1 NoteProperty prop1= null
prop2 NoteProperty prop2= null


#Example 5.2
#Create custom object
$object = New-Object PSObject
 
#Add a custom typename to the object
$object .pstypenames.insert(0,'System.CustomObject.PSObject')
 
#Display object
$Object | Get-Member
 
TypeName: System.CustomObject.PSObject
 
Name        MemberType    Definition
----        ----------    ----------
Equals           Method bool      Equals(System.Object obj)
GetHashCode Method int        GetHashCode()
GetType     Method        type GetType()
ToString       Method string  ToString()


6. वर्ग का उपयोग करना (PowerShell v5 या उच्च)

यह गतिशील रूप से कस्टम ऑब्जेक्ट हैंडल करने के लिए एक तरीका है। लेकिन थोड़ा और अधिक लचीला जोड़ने प्रकार के समान। आप ऑब्जेक्ट instantiate कर सकते हैं, इसकी परिभाषा को बदलने और फिर इसे फिर से प्रारंभ एक नया PowerShell इंस्टेंस को प्रारंभ करने के लिए बिना।

 

उदाहरण

#Example 6.1

Class CustomObject{
    [string] $Name;
    CustomObject([string] $NameIn) {
        $this.Name = $NameIn;
    }
 
    [string] JumbleName() {
        $a = $null
        [char[]]$this.Name| Sort-Object {Get-Random} | %{ $a = $PSItem + $a}
        return $a
    }
}
 
$x = [CustomObject]::new("aStringValue")
$x.JumbleName()

7 संसाधन

7.1 TechNet

7.2 ब्लॉग

यह भी देखें

अन्य भाषाएँ