Si j'émets la commande suivante dans PowerShell, je reçois 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 veux faire, c'est obtenir tous les noms de module 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!
Avez-vous essayé quelque chose comme ça?
get-command | select ModuleName | sort-object -Property ModuleName -Unique
Encore plus court:
get-command | select-object moduleName -unique
En dessous de 2 commandes, le même résultat apparaîtra, mais la première sera triée et un peu coûteuse en temps d'exécution.
Le temps d'exécution sera plus pris en compte lorsque vous avez un grand nombre d'éléments, par exemple si vous importez un fichier csv
de 30 000 lignes. Ensuite, la deuxième option sera plus rapide, et une fois que vous obtiendrez des valeurs uniques, triez-les si vous en avez besoin, car ici, le tri se fera sur un nombre beaucoup moins important, 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}
Une autre option:
Get-Command | Group-Object ModuleName -NoElement | Select-Object Name