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

tzdcorbm  于 2023-01-17  发布在  Shell
关注(0)|答案(4)|浏览(149)

如果我在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返回的所有不同的ModuleName。我如何使用PowerShell来实现这一点?
在伪C#中:

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

6ojccjat1#

你试过这样的东西吗?

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

kyvafyod2#

更短:

get-command | select-object  moduleName -unique
qco9c6ql

qco9c6ql3#

下面的两个命令将产生相同的结果,但第一个将排序,并在执行时间有点昂贵。
当你有大量的项目时,执行时间将被更多地考虑,例如,如果你导入30,000行的csv文件。那么第二个选项将更快,一旦你得到唯一的值,如果你需要的话,排序它们,因为这里排序将在更少的项目上完成,因此性能更好。
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}
get-command | select ModuleName -Unique

# This will give you the execution time
Measure-Command {get-command | select ModuleName -Unique}
nbnkbykc

nbnkbykc4#

另一种选择:

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

相关问题