Quiero crear una nueva instancia de mi PSObject personalizado. Tengo un objeto Button creado como PSObject y quiero crear un nuevo objeto Button2 que tiene los mismos miembros que Button, pero no puedo encontrar la forma de clonar el objeto original sin hacerlo referenciarlo en el objeto original (si cambio una propiedad en Button2 también cambia en Button). ¿Hay alguna manera de hacerlo de manera similar a las tablas y tablas hash a través de algún método Clone()?Cómo crear una nueva instancia de clonación del objeto PSObject
Respuesta
De hecho, no existe un método de clonación. Sin embargo, donde hay una voluntad ...
$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
Salida:
prop2 prop1
----- -----
b newvalue
b a
Eso es raro, no tengo método Clone availabl mi. Parece que hay un problema en la forma en que marco el objeto. Cuando uso su ejemplo, tengo el método Clone disponible, pero primero creo el objeto vacío y luego agrego todos los miembros a través de Add-Member. Entonces cuando uso: $ object = New-Object PSObject $ object | Add-Member NoteProperty propVal "test" powershell dice que [System.Management.Automation.PSCustomObject] no contiene el método Close. –
@JosefNemec Mi mal que utilicé la sintaxis incorrecta para crear PsObject. Tiene razón en que no hay un método de clonación. Entonces, para solucionarlo, puede copiar todas las propiedades de los originales al nuevo objeto. –
Funciona muy bien, muchas gracias! –
Otra posibilidad:
$o1 = New-Object PsObject -Property @{ prop1='a' ; prop2='b' }
$o2 = $o1 | select *
$o2.prop1 = 'newvalue'
$o1.prop1
$o2.prop1
a
newvalue
La manera más fácil es utilizar el método Copy de un PsObject
==>$o2 = $o1.PsObject.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
Salida:
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Fld1
Fld3 : Fld3
Fld2 : Fld2
Fld1 : Changed_Fld
Fld4 : Fld4
Por alguna razón PSObject.Copy() no funciona para todos los tipos de objetos. Otra solución para crear una copia de un objeto es convertir a/desde JSON a continuación, guardarlo en una nueva variable:
$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
Esta es la única respuesta hasta el momento que clonará un psobject que contiene otros psobjects. – aggieNick02
Pon esto en una clase de utilidad o definirlo en su sección actual
function clone($obj)
{
$newobj = New-Object PsObject
$obj.psobject.Properties | % {Add-Member -MemberType NoteProperty -InputObject $newobj -Name $_.Name -Value $_.Value}
return $newobj
}
Uso:
$clonedobj = clone $obj
- 1. ¿Debo crear una nueva instancia de delegado?
- 2. Cómo crear una instancia del objeto DataContext en XAML
- 3. Obtiene una nueva instancia de objeto de un Tipo
- 4. Cómo crear una instancia nueva a partir de un objeto de clase en Python
- 5. Clonación frente a instanciar una nueva clase
- 6. crear una nueva instancia de una clase sin operador "nuevo"
- 7. Crear nueva instancia EC2 con ISO personalizada
- 8. ¿Se garantiza NumberFormat.getInstance para crear una nueva instancia?
- 9. LINQ: la expresión Where devuelve una nueva instancia o referencia a la instancia del objeto
- 10. ¿Clonación de un objeto JavaScript?
- 11. Clonación objeto dom.Document
- 12. startActivity crear una nueva instancia de Activity cada vez
- 13. ¿Puedo crear una nueva instancia de mi clase de objeto administrado personalizado sin pasar por NSEntityDescription?
- 14. Objeto PHP de clonación profunda
- 15. crear una nueva instancia de un tipo dado como parámetro
- 16. Agregar una nueva instancia en weka
- 17. ¿Puedes crear una instancia de objeto de JSON en .NET?
- 18. ¿Por qué hacer DUP al crear una nueva instancia?
- 19. ¿Cómo puedo crear una nueva instancia de clase de una clase dentro de una clase (estática)?
- 20. ¿Cómo crear una instancia predeterminada después de crear una instancia con nombre?
- 21. usando django, ¿cómo construyo una instancia de objeto proxy de una instancia de objeto de superclase?
- 22. ¿Cómo crear una nueva carpeta?
- 23. Java: nueva instancia de bytecode
- 24. Cómo crear nueva instancia del nombre de la clase en GWT
- 25. Convertir XML a psobject
- 26. Crear una instancia de OneToOne en la creación del modelo
- 27. ¿Cómo crea mockito una instancia del objeto simulado
- 28. una instancia de una nueva clase del nombre de una variable en un espacio de nombres
- 29. Volver a la pantalla anterior sin crear nueva instancia
- 30. Crear una instancia de IDataAdapter de la instancia de IDbConnection
Ir a mi respuesta si desea una función 'clone' a hacer esto para usted –