2011-12-09 3 views
35

PowerShellで次のコマンドを発行すると、多くの行が戻されます。行うには、私が欲しい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コマンドによって返されるすべての異なるないモジュールを取得することです。 PowerShellでこれをどうすればできますか?擬似C#ので

:事前に

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

ありがとう!

+2

ない本当に何を尋ねたが、 "ゲット・モジュール" の代わりに使用することを検討してください。 –

答えて

54

あなたはこれを試しましたか?

get-command | select ModuleName | sort-object -Property ModuleName -Unique 
+0

普通の* select *はまさに私が探していたものでした、ありがとう! –

+0

+1このソリューションは大文字と小文字を区別しないため、例えば、ADコンピュータ名とDNSレコードを取得し、大文字と小文字の区別が異なる場合に一意の名前のみを表示しようとします。 –

52

でも短い:

get-command | select-object moduleName -unique 
+1

Fyi、これは大文字と小文字を区別します。大文字小文字を区別しないためには、[srgergの回答](http://stackoverflow.com/a/8439487/101679)のような 'Sort-Object -unique'を使用してください。 [参考](https://blogs.technet.microsoft.com/heyscriptingguy/2012/01/15/use-powershell-to-choose-unique-objects-from-a-sorted-list/) –

+0

select-objectの-uniqueは大文字と小文字を区別します。しかし、モジュール名は大文字と小文字を区別しますか?唯一の違いがある場合、2つのモジュールをロードすることは可能ですか? –

+0

私はそうは思わない、これは質問のタイトルと質問者の具体的なユースケースとの関連性が高いだろう。 –

4

別のオプション:

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

2以下のコマンドは、同じ結果をもたらすでしょうが、最初のものはソートされ、実行時間の少し高価になるだろう。

例えば、30,000行のファイルcsvをインポートする場合など、アイテムの数が多い場合は実行時間がさらに考慮されます。 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} 
関連する問題