Domanda

L'ultima versione di Powershell ha la capacità di fare qualcosa come JavaScript:

var point = new Object();
point.x = 12;
point.y = 50;

In caso contrario, qual è l'equivalente o la soluzione alternativa?

Aggiorna
Leggi tutti i commenti

È stato utile?

Soluzione

La sintassi non è direttamente supportata dalla funzionalità presente tramite i cmdlet del componente aggiuntivo. Qualche tempo fa, ho avvolto questa funzionalità in una funzione di tupla per uso generale.

Questo ti darà la possibilità di creare una linea di questi oggetti.

$point = New-Tuple "x",12,"y",50

Ecco il codice per 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
} 

Post di blog sull'argomento: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

Altri suggerimenti

Per motivi semplici, innanzitutto, è una tabella hash (disponibile in V1)

$obj = @{}
$obj.x = 1
$obj.y = 2

Secondo, è un oggetto PSO (più facile in V2)

$obj = new-object psobject -property @{x = 1; y =2}

Ti dà approssimativamente lo stesso oggetto, ma gli psobject sono più belli se vuoi ordinarli / raggruppare / formattare / esportarli

Siamo spiacenti, anche se la risposta selezionata è buona, non ho potuto resistere alla risposta hacky di una riga:

New-Object PsObject | Select-Object x,y | %{

Siamo spiacenti, anche se la risposta selezionata è buona, non ho potuto resistere alla risposta hacky di una riga:

<*>.x = 12;

Siamo spiacenti, anche se la risposta selezionata è buona, non ho potuto resistere alla risposta hacky di una riga:

<*>.y = 50; $foo =

Siamo spiacenti, anche se la risposta selezionata è buona, non ho potuto resistere alla risposta hacky di una riga:

<*>; }

Puoi farlo in questo modo:

$point = New-Object Object |
    Add-Member NoteProperty x ([int] 12) -passThru |
    Add-Member NoteProperty y ([int] 15) -passThru

Per quanto riguarda uno dei tuoi commenti altrove, gli oggetti personalizzati possono essere più utili delle tabelle hash perché funzionano meglio con i cmdlet che prevedono che gli oggetti abbiano proprietà denominate. Ad esempio:

$mypoints | Sort-Object y   # mypoints sorted by y-value
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

o più intuitivamente

$point = "" | Select x,y
$point.x=12; $point.y=15
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top