Question

La dernière version de Powershell a-t-elle la capacité de faire quelque chose comme JavaScript:

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

Si non, quel est l'équivalent ou la solution de contournement?

MISE À JOUR
Lire tous les commentaires

Était-ce utile?

La solution

La syntaxe n'est pas directement prise en charge car la fonctionnalité existe via l'applet de commande add-member. Il y a quelque temps, j'ai intégré cette fonctionnalité à une fonction de tuple à usage général.

Cela vous donnera la possibilité de créer ces objets sur une seule ligne.

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

Voici le code pour 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
} 

Article de blog sur le sujet: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

Autres conseils

Pour des raisons simples, tout d’abord, une table de hachage (disponible dans la V1)

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

Deuxièmement, est un PSObject (plus facile dans V2)

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

Cela vous donne à peu près le même objet, mais les psobjets sont plus agréables si vous voulez les trier / grouper / formater / les exporter

Désolé, même si la réponse sélectionnée est bonne, je n'ai pas pu résister à la réponse en une ligne hacky:

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

Désolé, même si la réponse sélectionnée est bonne, je n'ai pas pu résister à la réponse en une ligne hacky:

<*>.x = 12;

Désolé, même si la réponse sélectionnée est bonne, je n'ai pas pu résister à la réponse en une ligne hacky:

<*>.y = 50; $foo =

Désolé, même si la réponse sélectionnée est bonne, je n'ai pas pu résister à la réponse en une ligne hacky:

<*>; }

Vous pouvez le faire comme ceci:

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

En ce qui concerne l'un de vos commentaires, les objets personnalisés peuvent s'avérer plus utiles que les tables de hachage, car ils fonctionnent mieux avec les cmdlets qui s'attendent à ce que les objets aient des propriétés nommées. Par exemple:

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

ou plus intuitivement

$point = "" | Select x,y
$point.x=12; $point.y=15
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top