55 votes

sélectionner des éléments distincts dans une colonne en powershell

Si je lance la commande suivante dans PowerShell, j'obtiens beaucoup de lignes en retour.

PS C:\Users\benh> get-command

CommandType     Name                               ModuleName                         Definition
-----------     ----                               ----------                         ----------
Cmdlet          Get-Variable                       Microsoft.PowerShell.Utility       Get-Variable...
Cmdlet          Get-WebAppDomain                   WebAdministration                  Get-WebAppDomain...
Cmdlet          Get-WebApplication                 WebAdministration                  Get-WebApplication...
Cmdlet          Get-WebAppPoolState                WebAdministration                  Get-WebAppPoolState...
...
Cmdlet          Get-WinEvent                       Microsoft.PowerShell.Diagnostics   Get-WinEvent...
Cmdlet          Get-WmiObject                      Microsoft.PowerShell.Management    Get-WmiObject...
Cmdlet          Get-WSManCredSSP                   Microsoft.WSMan.Management         Get-WSManCredSSP...
Cmdlet          Get-WSManInstance                  Microsoft.WSMan.Management         Get-WSManInstance...
Cmdlet          Group-Object                       Microsoft.PowerShell.Utility       Group-Object...
Cmdlet          Import-Alias                       Microsoft.PowerShell.Utility       Import-Alias...
Cmdlet          Import-Clixml                      Microsoft.PowerShell.Utility       Import-Clixml...
Cmdlet          Import-Counter                     Microsoft.PowerShell.Diagnostics   Import-Counter...
Cmdlet          Import-Csv                         Microsoft.PowerShell.Utility       Import-Csv...
Cmdlet          Import-LocalizedData               Microsoft.PowerShell.Utility       Import-LocalizedData...
Cmdlet          Import-Module                      Microsoft.PowerShell.Core          ...

Ce que je veulent est de récupérer tous les noms de modules distincts retournés par Get-Command. Comment puis-je faire cela avec PowerShell ?

En pseudo-C# :

PowerShell.Exec("Get-Command").Select(a=> a.ModuleName).Distinct();

Merci d'avance !

89voto

srgerg Points 8142

Avez-vous essayé quelque chose comme ça ?

get-command | select ModuleName | sort-object -Property ModuleName -Unique

63voto

Mike Shepard Points 5109

Encore plus court :

get-command | select-object  moduleName -unique

7voto

Asad Refai Points 235

Les deux commandes ci-dessous donneront le même résultat, mais la première sera triée et un peu plus coûteuse en temps d'exécution.

Le temps d'exécution sera davantage pris en considération si vous avez un grand nombre d'articles. csv fichier de 30 000 lignes. La deuxième option sera plus rapide, et une fois que vous aurez obtenu des valeurs uniques, triez-les si nécessaire, car le tri sera effectué sur un nombre d'éléments beaucoup plus faible, d'où de meilleures performances.

1.

get-command | select ModuleName | sort-object -Property ModuleName -Unique

# This will give you the execution time
Measure-Command {get-command | select ModuleName | sort-object -Property ModuleName -Unique}

2.

get-command | select ModuleName -Unique

# This will give you the execution time
Measure-Command {get-command | select ModuleName -Unique}

5voto

Shay Levy Points 41404

Une autre option :

Get-Command | Group-Object ModuleName -NoElement | Select-Object Name

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X