выбрать отдельные элементы из столбца в powershell - PullRequest
47 голосов
/ 09 декабря 2011

Если я введу следующую команду в 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          ...

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

In псевдо-C #:

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

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

Ответы [ 4 ]

72 голосов
/ 09 декабря 2011

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

get-command | select ModuleName | sort-object -Property ModuleName -Unique
59 голосов
/ 09 декабря 2011

Еще короче:

get-command | select-object  moduleName -unique
5 голосов
/ 02 декабря 2015

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

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

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}
4 голосов
/ 12 декабря 2011

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

Get-Command | Group-Object ModuleName -NoElement | Select-Object Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...