के नए क्लोन उदाहरण बनाने के लिए मैं अपने कस्टम PSObject का नया उदाहरण बनाना चाहते हैं। मेरे पास पीएसओब्जेक्ट के रूप में बनाई गई एक बटन ऑब्जेक्ट है और मैं नया ऑब्जेक्ट बटन 2 बनाना चाहता हूं जिसमें बटन के समान सदस्य हैं, लेकिन मुझे मूल ऑब्जेक्ट में संदर्भित किए बिना मूल ऑब्जेक्ट को क्लोन करने का कोई तरीका नहीं मिल रहा है (यदि मैं बदलता हूं बटन 2 में एक संपत्ति बटन में भी बदलती है)। क्या कुछ क्लोन() विधि के माध्यम से हैशटेबल्स और सरणी के समान ही ऐसा करने का कोई तरीका है?कैसे PSObject वस्तु
उत्तर
दरअसल कोई क्लोन विधि है! हालांकि जहां एक वसीयत नहीं है ...
$o = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = New-Object PsObject
$o.psobject.properties | % {
$o2 | Add-Member -MemberType $_.MemberType -Name $_.Name -Value $_.Value
}
$o.prop1 = 'newvalue'
$o
$o2
आउटपुट:
prop2 prop1
----- -----
b newvalue
b a
कि अजीब है के लिए यह करने के लिए, मैं क्लोन विधि उपलब्ध नही की जरूरत नहीं है ई। ऐसा लगता है कि जिस तरह से मैं वस्तु को क्रेट करता हूं उसमें कोई समस्या है। जब मैं आपके उदाहरण का उपयोग करता हूं तो मेरे पास क्लोन विधि उपलब्ध है, लेकिन मैं पहले खाली वस्तु बना देता हूं और फिर सभी सदस्यों को एड-सदस्य के माध्यम से जोड़ता हूं। तो जब मैं उपयोग करता हूं: $ ऑब्जेक्ट = नया ऑब्जेक्ट PSObject $ ऑब्जेक्ट | ऐड-सदस्य NoteProperty propVal "परीक्षण" powershell का कहना है [System.Management.Automation.PSCustomObject] कि विधि बंद शामिल नहीं है। –
@JosefNemec मेरा बुरा मैंने PsObject बनाने के लिए गलत वाक्यविन्यास का उपयोग किया। आप सही हैं कि कोई क्लोन विधि नहीं है। तो इसके आसपास काम करने के लिए आप बस सभी मूल गुणों को नई वस्तु में कॉपी कर सकते हैं। –
बहुत अच्छा काम करता है, बहुत बहुत धन्यवाद! –
एक और संभावना:
$o1 = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = $o1 | select *
$o2.prop1 = 'newvalue'
$o1.prop1
$o2.prop1
a
newvalue
सबसे आसान तरीका एक PsObject
==>$o2 = $o1.PsObject.Copy()
की Copy विधि का उपयोग करने के लिए है
$o1 = New-Object -TypeName PsObject -Property @{
Fld1 = 'Fld1';
Fld2 = 'Fld2';
Fld3 = 'Fld3'}
$o2 = $o1.PsObject.Copy()
$o2 | Add-Member -MemberType NoteProperty -Name Fld4 -Value 'Fld4'
$o2.Fld1 = 'Changed_Fld'
$o1 | Format-List
$o2 | Format-List
आउटपुट:
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Fld1
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Changed_Fld
Fld4 : Fld4
किसी कारण PSObject.Copy के लिए() सभी वस्तु प्रकार के लिए काम नहीं करता। एक वस्तु की प्रतिलिपि बनाने के लिए एक अन्य समाधान यह करने के लिए/तो कन्वर्ट करने के लिए Json से एक नया वेरिएबल में सहेज है: अपने वर्तमान खंड में
$CustomObject1 = [pscustomobject]@{a=1; b=2; c=3; d=4}
$CustomObject2 = $CustomObject1 | ConvertTo-Json -depth 100 | ConvertFrom-Json
$CustomObject2 | add-Member -Name "e" -Value "5" -MemberType noteproperty
$CustomObject1 | Format-List
$CustomObject2 | Format-List
यह अब तक का एकमात्र उत्तर है जो गहरा क्लोन एक psobject होगा जिसमें अन्य psobjects शामिल हैं। – aggieNick02
एक उपयोगिता कक्षा में इस रखो या इसे परिभाषित
function clone($obj)
{
$newobj = New-Object PsObject
$obj.psobject.Properties | % {Add-Member -MemberType NoteProperty -InputObject $newobj -Name $_.Name -Value $_.Value}
return $newobj
}
उपयोग:
$clonedobj = clone $obj
- 1. PSObject, हैशटेबल और PSCustomObject
- 2. Convert एक्सएमएल PSObject को
- 3. (वस्तु) 0 == (वस्तु) 0
- 4. कैसे एक ही वस्तु
- 5. कैसे जावास्क्रिप्ट दिनांक वस्तु
- 6. कैसे एक COM वस्तु
- 7. कैसे एक जावास्क्रिप्ट वस्तु
- 8. PowerShell: मैं कैसे वस्तु
- 9. कैसे जावास्क्रिप्ट वस्तु
- 10. jQuery: - [वस्तु वस्तु] त्रुटि
- 11. यूआरएल वस्तु से फ़ाइल वस्तु
- 12. वस्तु
- 13. कैसे बूलियन वस्तु को स्ट्रिंग वस्तु कन्वर्ट करने के लिए?
- 14. कैसे JSON.parsed वस्तु जावास्क्रिप्ट में
- 15. कैसे एक जावा फ़ाइल वस्तु
- 16. कैसे स्ट्रिंग से XElement वस्तु
- 17. कैसे जावास्क्रिप्ट सरणी/वस्तु में
- 18. कैसे क्लिक करें घटना वस्तु
- 19. जावा बहुरूपता कैसे उपवर्ग वस्तु
- 20. कहाँ InternalEquals (objA वस्तु, वस्तु objB)
- 21. jQuery वस्तु
- 22. जावास्क्रिप्ट वस्तु के लिए जावास्क्रिप्ट वस्तु जोड़े
- 23. जावास्क्रिप्ट: वस्तु
- 24. वस्तु प्रकार
- 25. Convert वस्तु
- 26. खंड वस्तु
- 27. स्थिरांक वस्तु
- 28. जावास्क्रिप्ट - वस्तु
- 29. Linq वस्तु
- 30. क्या शून्य वस्तु वस्तु इसके लायक है?
जाओ यदि आप एक समारोह चाहते 'clone' आप –