Structures ou objets dans Powershell 2
-
22-07-2019 - |
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
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
Comment créer un objet dans 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 plus intuitivement
$point = "" | Select x,y
$point.x=12; $point.y=15