Estructuras u objetos en Powershell 2
-
22-07-2019 - |
Pregunta
¿La última versión de Powershell tiene la capacidad de hacer algo como JavaScript:
var point = new Object();
point.x = 12;
point.y = 50;
Si no, ¿cuál es el equivalente o la solución alternativa?
ACTUALIZACIÓN
Leer todos los comentarios
Solución
La sintaxis no es directamente compatible con la funcionalidad que existe a través de los cmdlet add-member. Hace un tiempo, envolví esta funcionalidad en una función de tupla de propósito general.
Esto le dará la capacidad de una línea para crear estos objetos.
$point = New-Tuple "x",12,"y",50
Aquí está el código para New-Tuple
function New-Tuple()
{
param ( [object[]]$list= $(throw "Please specify the list of names and values") )
$tuple = new-object psobject
for ( $i= 0 ; $i -lt $list.Length; $i = $i+2)
{
$name = [string]($list[$i])
$value = $list[$i+1]
$tuple | add-member NoteProperty $name $value
}
return $tuple
}
Publicación de blog sobre el tema: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments
Otros consejos
Para formas simples, primero, es una tabla hash (disponible en V1)
$obj = @{}
$obj.x = 1
$obj.y = 2
Segundo, es un PSObject (más fácil en V2)
$obj = new-object psobject -property @{x = 1; y =2}
Le proporciona aproximadamente el mismo objeto, pero los psobjects son más agradables si desea ordenarlos / agruparlos / formatearlos / exportarlos
Lo siento, a pesar de que la respuesta seleccionada es buena, no pude resistir la respuesta hacky one line:
New-Object PsObject | Select-Object x,y | %{ Lo siento, a pesar de que la respuesta seleccionada es buena, no pude resistir la respuesta hacky one line:
<*>.x = 12; Lo siento, a pesar de que la respuesta seleccionada es buena, no pude resistir la respuesta hacky one line:
<*>.y = 50; $foo = Lo siento, a pesar de que la respuesta seleccionada es buena, no pude resistir la respuesta hacky one line:
<*>; }
Puedes hacerlo así:
$point = New-Object Object |
Add-Member NoteProperty x ([int] 12) -passThru |
Add-Member NoteProperty y ([int] 15) -passThru
Con respecto a uno de sus comentarios en otra parte, los objetos personalizados pueden ser más útiles que las tablas hash porque funcionan mejor con cmdlets que esperan que los objetos tengan propiedades con nombre. Por ejemplo:
$mypoints | Sort-Object y # mypoints sorted by y-value
Cómo crear un objeto en PowerShell
http: //blogs.msdn.com/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspx
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
o más intuitivamente
$point = "" | Select x,y
$point.x=12; $point.y=15