我想创建自定义PSObject的新实例。我有一个创建为PSObject的Button对象,我想创建一个新的对象Button2,它具有与Button相同的成员,但我找不到如何克隆原始对象而不使其在原始对象中引用(如果更改Button2中的属性也会在Button中更改)。有没有办法通过一些Clone()方法来使用哈希表和数组呢?如何创建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
这是奇怪的做到这一点,我没有克隆方法availabl即看起来好像我打包物体的方式存在问题。当我使用你的例子我有克隆方法可用,但我先创建空对象,然后通过添加成员添加所有成员。所以当我使用: $ object = New-Object PSObject $ object |添加成员NoteProperty propVal“test” powershell说[System.Management.Automation.PSCustomObject]不包含方法Close。 – 2012-03-06 10:35:38
@JosefNemec我不好使用错误的语法来创建PsObject。你没有克隆方法是正确的。所以要解决这个问题,你可以将所有的原始属性复制到新的对象。 – 2012-03-06 11:17:24
很好,非常感谢! – 2012-03-06 12:05:08
另一种可能性:
$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的psobject的唯一答案。 – aggieNick02 2017-10-06 19:30:59
的实用工具类将这个或定义它在你的当前部分
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. 如何在Smart Client中创建新对象或克隆ListGrid
- 2. 如何销毁unity3d中的实例化(克隆)对象?
- 3. 创建新的实例对象
- 4. 如何克隆js对象?
- 5. 如何克隆Dictionary对象?
- 6. 如何创建对象的实例?
- 7. 如何在基类中创建对象的克隆?
- 8. 如何创建一些对象的克隆已更改?
- 9. 如何创建Word文档对象的克隆?
- 10. 克隆对象
- 11. 新阵列(_)填充(对象)不创建对象的新实例
- 12. 克隆对象克隆与实现可复制的接口
- 13. 如何在CKeditor中克隆实例?
- 14. 创建对象实例
- 15. 创建一个抽象类的克隆
- 16. 如何在Java中动态地创建对象的新实例?
- 17. 如何在javascript中创建对象的新实例
- 18. 如何从Python中的类对象创建新实例
- 19. 如何在ios中创建对象的新实例?
- 20. 如何测试已创建对象的新实例?
- 21. 如何从其基类的实例创建一个新对象?
- 22. 在创建防御副本时创建新对象而不是克隆
- 23. 克隆一个类的实例(显示对象)
- 24. 克隆Java对象
- 25. 克隆dom.Document对象
- 26. PHP - 对象克隆
- 27. 如何克隆as3中的对象
- 28. 如何克隆C#中的DateTime对象?
- 29. 克隆EC2 Ubuntu实例
- 30. 实体对象:克隆和插入
转到我的回答如果你想有一个函数'clone'为您 – 2017-05-25 23:45:37