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

¿Fue útil?

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
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

o más intuitivamente

$point = "" | Select x,y
$point.x=12; $point.y=15
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top