12
votes

Liste de format: Trier les propriétés par nom

est-il possible de trier la sortie de la cmdlet de liste de format par nom de propriété?
Supposons que j'ai un objet $ x avec deux propriétés "A" et "B", et lorsque je exécute un format-liste avec elle, j'obtiens xxx

je voudrais avoir xxx

note : J'aurais dû spécifier depuis le début que, contrairement aux propriétés "A" et "B", le véritable objet que je dois traiter Avec beaucoup de propriétés, et de nouveaux pourraient être ajoutés à l'avenir, donc je ne connais donc pas tous les noms de propriété à l'avance.


0 commentaires

8 Réponses :


0
votes

Je suis sûr que vous pouvez obtenir la sortie souhaitée. Je suggère que vous expérimentez à la fois avec un objet de tri (ou un tri simple) et également un objet de groupe (groupe ordinaire)

Mon idée est de placer le tri ou le groupe avant | Liste de format

donc $ x | Objet de tri -property xyz | Liste de format


1 commentaires

Cette approche triera les objets en fonction de la valeur de la propriété XYZ, mais cela ne triera pas les fonds pour chaque objet individuel.



13
votes

afaik, liste de format code> ne fournit pas une telle option.

Pour votre exemple particulier, cela devrait fonctionner: p> xxx pré>

si le L'ensemble de propriétés n'est pas fixe / connu, la procédure sera plus délicate avec l'utilisation de Get-Member CODE> et de la fabrication de prétraitement de la fabrication de paramètres triés pour Select-Object Code>. P>.

EDIT: P>

ici c'est (utilisons $ hôte à la place de $ x): p> xxx pré>

christopher strong> est Droite, Select-Object Code> n'est pas absolument nécessaire: P>

$host | Format-List ([string[]]($host | Get-Member -MemberType Property | %{ $_.Name } | Sort-Object))


1 commentaires

En utilisant des alias de commande PowerShell, la réponse ci-dessus peut être raccourcie à: $ x | fl ([chaîne []] ($ x | Propriété GM -M |% {$ _. Nom} | Trier))



1
votes

Si vous avez affaire à un petit nombre de propriétés, vous pouvez spécifier leur commande avec le paramètre -Property.

Voici un exemple: P>

Format-List -Property Owner, Path


0 commentaires

3
votes

Le plus proche que je puisse penser, c'est créer une nouvelle psobject basée sur l'ancien mais avec les propriétés triés, par exemple: xxx

Vous pouvez obtenir plus de capitaine et donner à la nouvelle psobject correspond à l'ancien, etc.


1 commentaires

J'aime aussi cette solution ... +1



1
votes

Cela semble fonctionner correctement (édité de sorte qu'il accepte l'entrée de pipeline): xxx


0 commentaires

3
votes

Élargir sur l'idée de Christopher, en utilisant Get-Member CODE> et Liste de format -Property CODE>:

$x | fl -property ($x| gm | sort name).name


0 commentaires

4
votes

rien de mal à la réponse acceptée, mais un vraiment option sale pour un seul off-off - qui n'a pas besoin de la collecte déjà dans une variable - pourrait être ... xxx

... qui fait une sorte sur chaque ligne de la sortie de liste de format .

Notez que toutes les valeurs de propriété issues sur la ligne suivante seront cassées (et apparaissent probablement en haut de la sortie), mais cela pourrait être corrigé par le ... xxx

... au détriment de l'indentation de la colonne.

Bien sûr, tous les informations d'objet / pipeline sont perdues par ce Out-String Appel, bien que-on envisageant de même que la même chose est vrai de liste de format -Vous ne vous souciez probablement pas de ce point.


0 commentaires

0
votes

En utilisant Select-objet avec une propriété calculée ( @ {} ) puis en excluant ( -excurdeProperty ) Vous pouvez également commander les propriétés que vous voulez. Cela fonctionne même lorsque vous ne savez pas ce qui vient à venir. xxx

sortie: xxx


0 commentaires