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によって返されるすべての個別のModuleNameを取得することです。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 に答える
7

以下の 2 つのコマンドは同じ結果をもたらしますが、最初のコマンドはソートされ、実行時間が少し長くなります。

csvアイテム数が多い場合、たとえば30,000 行のファイルをインポートする場合、実行時間はより考慮されます。次に、2番目のオプションの方が高速です。一意の値を取得したら、必要に応じて並べ替えます。これは、並べ替えがはるかに少ない数のアイテムで行われるため、パフォーマンスが向上するためです。

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 に答える