Estruturas ou Objetos no Powershell 2
-
22-07-2019 - |
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
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
Como criar um objeto no PowerShell
http://blogs.msdn.com/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspx
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
ou mais intuitivamente
$point = "" | Select x,y
$point.x=12; $point.y=15