56

如果我在 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 返回的所有不同的 ModuleNames。如何使用 PowerShell 执行此操作?

在伪 C# 中:

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

提前致谢!

4

4 回答 4

90

你有没有尝试过这样的事情?

get-command | select ModuleName | sort-object -Property ModuleName -Unique
于 2011-12-09T00:10:28.130 回答
64

更短:

get-command | select-object  moduleName -unique
于 2011-12-09T00:31:14.863 回答
7

以下 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}

2.

get-command | select ModuleName -Unique

# This will give you the execution time
Measure-Command {get-command | select ModuleName -Unique}
于 2015-12-02T11:54:47.690 回答
5

另外一个选项:

Get-Command | Group-Object ModuleName -NoElement | Select-Object Name
于 2011-12-12T14:27:41.323 回答