выбор отдельных элементов из столбца в powershell

Если я выдаю следующую команду в PowerShell, я получаю много строк обратно.

PS C:Usersbenh> 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          ...

Что Я хочу чтобы сделать, это получить все различные ModuleNames, возвращаемые командлетом get-команды. Как это сделать с помощью PowerShell?

в псевдо-C#:

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

спасибо заранее!

4 ответов


вы пробовали что-то подобное?

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

еще короче:

get-command | select-object  moduleName -unique

другой вариант:

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

ниже 2 команды выведут тот же результат, но первая будет отсортирована и немного дороже во время выполнения.

время выполнения будет учитываться больше, когда у вас есть большое количество элементов, например, если вы импортируете csv файл из 30 000 строк. Тогда второй вариант будет быстрее, и как только вы получите уникальные значения, отсортируйте их, если вам нужно, потому что здесь сортировка будет выполнена на гораздо меньшем количестве элементов, следовательно, лучше спектакль.

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}