Подтвердить что ты не робот

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

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

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          ...

Что я хочу сделать, так это получить все отдельные имена модулей, возвращаемые Get-Command. Как я могу сделать это с помощью PowerShell?

В псевдо-С#:

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

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

4b9b3361

Ответ 1

Вы пробовали что-то вроде этого?

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

Ответ 2

Еще короче:

get-command | select-object  moduleName -unique

Ответ 3

Другая опция:

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

Ответ 4

Ниже 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}