Pergunta

A versão mais recente do Powershell tem a capacidade de fazer algo parecido com JavaScript:

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

Se não, qual é a equivalente ou a solução?

ATUALIZAÇÃO
Leia todos os comentários

Foi útil?

Solução

A sintaxe não é suportada diretamente pela funcionalidade, existe através do cmdlet add-membro. Há algum tempo, envolvi essa funcionalidade em uma função de tupla de uso geral.

Isso lhe dará a capacidade de uma linha criar esses objetos.

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

Aqui está o código para a nova tupla

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
} 

Postagem do blog sobre o assunto: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

Outras dicas

Para formas simples, em primeiro lugar, é um hashtable (disponível em V1)

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

Segundo, é um PSObject (mais fácil em V2)

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

Ele lhe dá aproximadamente o mesmo objeto, mas psobjects são mais gostoso se você deseja classificar/grupo/formato/exportá-los

Desculpe, mesmo que a resposta selecionada seja boa, não pude resistir à resposta de uma linha hacky:

New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }

Você pode fazer assim:

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

Em relação a um de seus comentários em outro lugar, objetos personalizados podem ser mais úteis do que tabelas de hash, porque funcionam melhor com cmdlets que esperam que os objetos tenham propriedades nomeadas. Por exemplo:

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

ou mais intuitivamente

$point = "" | Select x,y
$point.x=12; $point.y=15
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top