2011-12-09 8 views
35

में कॉलम से अलग आइटम का चयन करें यदि मैं पावरशेल में निम्न आदेश जारी करता हूं, तो मुझे बहुत सारी पंक्तियां मिलती हैं।पावरहेल

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   ... 

मैं क्या चाहता हूँ करने के लिए सभी भिन्न प्राप्त करें-कमान द्वारा दिया ModuleNames मिलता है। मैं PowerShell के साथ यह कैसे कर सकता हूं?

छद्म सी # में:

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

अग्रिम धन्यवाद!

+2

आप वास्तव में क्या कहा, लेकिन बजाय "रातों-मॉड्यूल" प्रयोग करने पर विचार। –

उत्तर

54

क्या आपने ऐसा कुछ करने की कोशिश की है?

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

सादा पुराना * चयन * बिल्कुल वही था जो मैं ढूंढ रहा था, धन्यवाद! –

+0

+1 इस समाधान के रूप में मामला असंवेदनशील है, पूर्व, एडी कंप्यूटर नाम और DNS रिकॉर्ड्स प्राप्त करना और पूंजीकरण अलग होने पर केवल अद्वितीय नाम दिखाने की कोशिश कर रहा है। –

52

भी कम:

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

Fyi, यह मामला संवेदनशील है, मामले के लिए असंवेदनशील उपयोग 'सॉर्ट-ऑब्जेक्ट-यूनिक' जैसे [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

यह जानना अच्छा है कि चयन-वस्तु में -निक केस-संवेदी है। क्या मॉड्यूल नाम केस संवेदनशील हैं, यद्यपि? क्या 2 मॉड्यूल लोड हो सकते हैं जहां केवल अंतर ही होता है? –

+0

मुझे ऐसा नहीं लगता है, यह पूछताछ के विशिष्ट उपयोग मामले बनाम प्रश्न के शीर्षक के लिए अधिक प्रासंगिक होगा। –

4

एक अन्य विकल्प:

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

नीचे 2 आदेशों एक ही परिणाम बाहर लाना होगा, लेकिन पहले एक हल हो जाएगा और निष्पादन समय में थोड़ा महंगा ।

आपके पास बड़ी संख्या में आइटम होने पर निष्पादन समय अधिक ध्यान में रखा जाएगा, उदाहरण के लिए यदि आप 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} 

2.

get-command | select ModuleName -Unique 

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