从powershell中的列中选择不同的项目

Ben*_*n H 49 powershell distinct-values

如果我在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          ...
Run Code Online (Sandbox Code Playgroud)

想要做的是获取Get-Command返回的所有不同的ModuleNames.如何使用PowerShell执行此操作?

在伪C#中:

PowerShell.Exec("Get-Command").Select(a=> a.ModuleName).Distinct();
Run Code Online (Sandbox Code Playgroud)

提前致谢!

srg*_*erg 75

你尝试过这样的事吗?

get-command | select ModuleName | sort-object -Property ModuleName -Unique
Run Code Online (Sandbox Code Playgroud)


Mik*_*ard 59

更短:

get-command | select-object  moduleName -unique
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,这是区分大小写的,对于不区分大小写的使用“Sort-Object -unique”,如 [srgerg 的回答](http://stackoverflow.com/a/8439487/101679)。[参考](https://blogs.technet.microsoft.com/heyscriptingguy/2012/01/15/use-powershell-to-choose-unique-objects-from-a-sorted-list/) (2认同)

Sha*_*evy 5

另外一个选项:

Get-Command | Group-Object ModuleName -NoElement | Select-Object Name
Run Code Online (Sandbox Code Playgroud)


小智 5

低于2的命令将产生相同的结果,但第一个命令将被排序并且执行时间有点昂贵.

当您有大量项目时,将更多地考虑执行时间,例如,如果您要导入csv30,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}
Run Code Online (Sandbox Code Playgroud)

2.

get-command | select ModuleName -Unique

# This will give you the execution time
Measure-Command {get-command | select ModuleName -Unique}
Run Code Online (Sandbox Code Playgroud)