2011-12-09 35 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-命令返回的不同ModuleNames。我如何用PowerShell做到這一點?

在僞C#:

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

提前感謝!

+2

你問算不上什麼,但可以考慮使用 「GET-模塊」 來代替。 –

回答

54

你有沒有嘗試過這樣的事情?

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

Plain old * select *正是我所期待的,謝謝! –

+0

+1作爲該解決方案是不區分大小寫,防爆,讓AD計算機名稱和DNS記錄,並試圖證明只有唯一的名稱時,資本可能會有所不同。 –

52

更短:

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

據透露,這是區分大小寫,不區分大小寫使用'排序,對象-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/) –

+0

很好的瞭解, Select-object中的獨立區分大小寫。儘管模塊名稱區分大小寫?是否有可能加載2個模塊,唯一的區別是什麼? –

+0

我不這麼認爲,這與提問者的具體用例相比,這個問題的題目更加相關。 –

4

另一種選擇:

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

低於2的命令會帶出同樣的結果,但第一個將被排序,並在執行時間有點貴。

的執行時間如果要導入csv文件30000行採取更多的考慮,當你有大量的項目,例如。然後第二個選項會更快,一旦你得到獨特的值,如果你需要排序它們,因爲在這裏排序將在少得多的項目上完成,因此更好的性能。

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}