Структуры или объекты в Powershell 2 - PullRequest
9 голосов
/ 14 марта 2009

Имеет ли последняя версия Powershell возможность что-то вроде JavaScript:

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

Если нет, то каков эквивалент или обходной путь?

UPDATE
Читать все комментарии

Ответы [ 6 ]

13 голосов
/ 14 марта 2009

Синтаксис не поддерживается напрямую с помощью командлетов add-member. Некоторое время назад я обернул эту функцию в функцию кортежа общего назначения.

Это даст вам возможность одной строкой создавать эти объекты.

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

Вот код для 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
} 

Пост блога на тему: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

11 голосов
/ 12 июня 2009

Для простых способов, во-первых, это хеш-таблица (доступна в V1)

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

Во-вторых, это PSObject (проще в V2)

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

Он дает примерно одинаковый объект, но psobjects лучше, если вы хотите отсортировать / сгруппировать / отформатировать / экспортировать их

5 голосов
/ 16 марта 2009

Извините, хотя выбранный ответ хорош, я не смог устоять перед взломанным однострочным ответом:

New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }
3 голосов
/ 14 марта 2009
3 голосов
/ 14 марта 2009

Вы можете сделать это так:

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

Что касается одного из ваших комментариев в другом месте, пользовательские объекты могут быть более полезными, чем хеш-таблицы, потому что они лучше работают с командлетами, которые ожидают, что объекты имеют именованные свойства. Например:

$mypoints | Sort-Object y   # mypoints sorted by y-value
0 голосов
/ 13 февраля 2012
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

или более интуитивно

$point = "" | Select x,y
$point.x=12; $point.y=15
...