2009-07-10 14 views
10

विंडोज पावरशेल अब काफी लंबा समय निकाल रहा है। अच्छे पुराने विंडोज शैल की तुलना में यह अधिक शक्तिशाली है। क्या कोई स्क्रिप्ट है जिसका उपयोग आप डेवलपर के रूप में अपने हर दिन काम को तेज और सरल बनाने के लिए करते हैं? यदि आप पावरशेल के साथ जादू कर सकते हैं -> कृपया इसे हमारे साथ साझा करें!पावरशेल स्क्रिप्ट प्रत्येक डेवलपर को पता होना चाहिए

अद्यतन वास्तव में एक स्क्रिप्ट नहीं है, लेकिन PowerShell Community Extensions भी बहुत उपयोगी हैं। पैकेज में बहुत सारे नए सीएमडीलेट्स और पावरशेल संशोधन शामिल हैं।

उत्तर

3

मैं इस एक सब समय का उपयोग करें क्योंकि फ़ाइल की सामग्री के लिए Windows Explorer के खोज कभी नहीं मेरे लिए काम करता है:

Get-ChildItem -Recurse -Filter *.extension | 
    Select-String -List somestring | 
    Format-Table filename,linenumber -AutoSize 

बस फ़ाइल प्रकार आप में रुचि रखते हैं की फ़ाइल एक्सटेंशन के साथ "विस्तार" की जगह (या -फिल्टर पैरामीटर को पूरी तरह से हटाएं) और उस फ़ाइल के साथ "somestring" को प्रतिस्थापित करें जिसे आप फ़ाइल में ढूंढना चाहते हैं।

+0

मैं इसे कैसे निर्देशिकाओं पर निरस्त किया जा रहा रोकने के लिए मिलता है मेरे पास पहुंच नहीं है? – Maslow

2

जब भी आप उचित पूंजीकरण के साथ कुछ देखते हैं, तो यह एक संकेत है कि मैंने टैब पूर्णता का उपयोग किया है। आपको सीखना चाहिए कि पीएस आपके लिए कौन सी चीजें पूरी करेगी - यह वी 2 में काफी अच्छा है।

जब भी आप लोअरकेस में उपनाम देखते हैं, तो यह कुछ है जो मैंने स्मृति से टाइप किया है। आपको इसे भी याद रखना चाहिए।

# grep example - find all using statements 
dir -r -fil *cs | ss using 
# advanced version 
dir -fil *cs -r | ss '^using[^\(]+' | gpv line | sort -unique 

# figure out how to query for drive free space (emphasis on "figure out" -- I can never remember things like this) 
gcm *drive* 
help Get-PSDrive -full 
Get-PSDrive | gm 
# now use it 
Get-PSDrive | ? { $_.free -gt 1gb } 

# pretend mscorlib.dll is an assembly you're developing and want to do some ad-hoc testing on 
$system = [system.reflection.assembly]::LoadFile("c:\blah\...\mscorlib.dll") 
$system | gm 
$types = $a.GetTypes()  
$types | gm 
$types | ? { $_.ispublic -and $_.basetype -eq [system.object] } | sort name 
$sbType = $types | ? { $_.name -eq "StringBuilder" } 
# now that we've loaded the assembly, we could have also done: 
# $sbType = [system.text.stringbuilder] 
# but we may not have known it was in the Text namespace 
$sb = new-object $sbType.FullName 
$sb | gm 
$sb.Append("asdf") 
$sb.Append("jkl;") 
$sb.ToString() 
6

मैंने कमांड लाइन पर सबवर्जन के साथ काम करने के लिए स्क्रिप्ट का एक समूह रखा। उनमें से अधिकतर ऑब्जेक्ट फॉर्म में विभिन्न जानकारी रखने के लिए --xml विकल्प का उपयोग करते हैं। यहां कुछ उदाहरण दिए गए हैं:

function Get-SvnStatus([string[]] $Path = ".", 
         [string] $Filter = "^(?!unversioned|normal|external)", 
         [switch] $NoFormat) 
{ 
    # powershell chokes on "wc-status" and doesn't like two definitions of "item" 
    [xml]$status = ((Invoke-Expression "svn status $($Path -join ',') --xml") -replace "wc-status", "svnstatus") ` 
     -replace "item=", "itemstatus=" 

    $statusObjects = $status.status.target | Foreach-Object { $_.entry } | Where-Object { 
     $_.svnstatus.itemstatus -match $Filter 
    } | Foreach-Object { 
     $_ | Select-Object @{ Name = "Status"; Expression = { $_.svnstatus.itemstatus } }, 
          @{ Name = "Path"; Expression = { Join-Path (Get-Location) $_.path } } 
    } | Sort-Object Status, Path 

    if ($NoFormat) 
    { 
     $statusObjects 
    } 
    else 
    { 
     $statusObjects | Format-Table -AutoSize 
    } 
} 

function Get-SvnLog([string] $Path = ".", 
        [int] $Revision, 
        [int] $Limit = -1, 
        [switch] $Verbose, 
        [switch] $NoFormat) 
{ 
    $revisionString = "" 
    $limitString = "" 
    $verboseString = "" 

    if ($Revision) 
    { 
     $revisionString = "--revision $Revision" 
    } 

    if ($Limit -ne -1) 
    { 
     $limitString = "--limit $Limit" 
    } 

    if ($Verbose) 
    { 
     $verboseString = "--verbose" 
    } 

    [xml]$log = Invoke-Expression "svn log $($path -join ',') --xml $revisionString $limitString $verboseString" 

    $logObjects = $log.log.logentry | Foreach-Object { 
     $logEntry = $_ 

     $logEntry | Select-Object ` 
      @{ Name = "Revision"; Expression = { [int]$logEntry.revision } }, 
      @{ Name = "Author"; Expression = { $logEntry.author } }, 
      @{ Name = "Date"; 
       Expression = { 
        if ($NoFormat) 
        { 
         [datetime]$logEntry.date 
        } 
        else 
        { 
         "{0:dd/MM/yyyy hh:mm:ss}" -f [datetime]$logEntry.date 
        } 
       } }, 
      @{ Name = "Message"; Expression = { $logEntry.msg } } | 
     Foreach-Object { 
      # add the changed path information if the $Verbose parameter has been specified 
      if ($Verbose) 
      { 
       $_ | Select-Object Revision, Author, Date, Message, 
        @{ Name = "ChangedPaths"; 
         Expression = { 
          $paths = $logEntry.paths.path | Foreach-Object { 
           $_ | Select-Object ` 
            @{ Name = "Change"; 
             Expression = { 
              switch ($_.action) 
              { 
               "A" { "added" } 
               "D" { "deleted" } 
               "M" { "modified" } 
               "R" { "replaced" } 
               default { $_.action } 
              } 
             } }, 
            @{ Name = "Path"; Expression = { $_."#text" } } 
          } 

          if ($NoFormat) 
          { 
           $paths 
          } 
          else 
          { 
           ($paths | Sort-Object Change | Format-Table -AutoSize | Out-String).Trim() 
          } 
         } 
        } 
      } 
      else 
      { 
       $_ 
      } 
     } 
    } 

    if ($NoFormat) 
    { 
     $logObjects 
    } 
    else 
    { 
     $logObjects | Format-List 
    } 
} 

मैंने इन्हें क्रमशः svns और svnl में अलिया किया है। मैं कुछ अन्य here के बारे में बात करता हूं।

+0

अच्छी कॉल। मैं टीएफएस पावर टूल cmdlets का उपयोग करता हूं जितनी बार मैंने ऊपर टाइप की है, लेकिन सभी में टीएफएस नहीं है। यदि आपके पास अपनी स्रोत नियंत्रण प्रणाली के विकल्प के लिए कुछ प्रकार का ऑब्जेक्ट मॉडल है, तो इसे पावरहेल से मिलना सीखना बेहद अच्छा है। –

3

यह एक स्क्रिप्ट नहीं है, लेकिन आम तौर पर यह जानने में मददगार होता है कि आप नाम और स्थिति दोनों के आधार पर पैरामीटर को छोटा कर सकते हैं।

नाम से, पावरशेल को केवल इसे कम करने के लिए पर्याप्त आवश्यकता है। उदाहरण के लिए, gci -r काम करता है लेकिन gci -f या तो -filter या -force हो सकता है।

पैरामीटर लेबल के बिना निर्दिष्ट मानों को स्थितित्मक रूप से लागू किया जाता है। तो आप या तो यह करने के लिए यदि आप -filter निर्दिष्ट करना चाहते हैं कर सकते हैं:

gci -r -fil *.cs 

या positionally -path रूप . प्रदान करते हैं ताकि आप भी positionally -filter निर्दिष्ट कर सकते हैं:

gci -r . *.cs 
संबंधित मुद्दे