2009-07-10 21 views
10

Windows PowerShell artık oldukça uzun bir süredir. Eski eski pencere kabuğuna kıyasla çok daha güçlüdür. Her gün çalışmanızı bir geliştirici olarak hızlandırmak ve kolaylaştırmak için kullandığınız komut dosyaları var mı? Eğer PowerShell ile sihir yapabilirseniz -> lütfen bizimle paylaşın!Her geliştiricinin bilmesi gereken PowerShell komut dosyaları

Güncelleme bir komut dosyası, aynı zamanda çok faydalı Gerçekten PowerShell Community Extensions bulunmaktadır. Paket çok sayıda yeni Cmdlet ve PowerShell modifikasyonu içeriyor.

cevap

3

ben dosya içeriğinden, Windows Explorer'ın arama asla benim için çalışıyor, çünkü bu bir her zaman kullanın:

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

Sadece ilgilendiğiniz dosya türü dosya uzantısı ile "uzantısı" yerine (veya -Filter parametresini tamamen kaldırın) ve dosyada bulmak istediğiniz metinle birlikte "somestring" değerini değiştirin.

+0

Ben dizinleri iptal durdurmak nasıl elde edersiniz Erişimim yok mu? – Maslow

2

Uygun büyük harf kullanımıyla ilgili bir şey gördüğünüzde, TAB tamamlamasının kullanıldığının göstergesidir. PS'nin sizin için hangi şeyleri tamamlayacağını öğrenmelisiniz - V2'de oldukça iyi.

Takma adlarını küçük harflerle gördüğünüz her seferinde, bellekten yazdığım bir şeydir. Onu da ezberlemelisin.

# 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

Komut satırında Subversion ile çalışmak için bir sürü komut dosyasını bir araya getirdim. Çoğu sadece nesne biçiminde çeşitli bilgileri koymak için --xml seçeneğini kullanır.

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

Bunları sırasıyla svns ve svnl diğer adı var: İşte birkaç örnek bulunmaktadır. Diğer birkaç tane hakkında konuşuyorum here.

+0

İyi çağrı. TFS Güç Aracı cmdlet'lerini, yukarıda yazdığım gibi sık sık kullandım, ancak herkesin TFS'si yok. Tercih ettiğiniz kaynak kontrol sistemi için bir çeşit nesne modeliniz varsa, bunu Powershell ile eşleştirmek öğrenmeniz için son derece iyidir. –

3

Bu bir komut dosyası değildir, ancak genelde hem isim hem de konuma göre parametreleri kısaltabileceğiniz zaman öğrenmeniz yararlı olacaktır.

Adından da anlaşılacağı gibi, PowerShell'in yalnızca bir tanesini daraltması yeterlidir. Örneğin, gci -r çalışır ancak gci -f, -filter veya -force olabilir.

Parametre etiketi olmadan belirtilen değerler, konumsal olarak uygulanır.

gci -r -fil *.cs 

Ya pozisyonel olarak -path olarak . sağlamak, böylece de pozisyonel -filter belirtebilirsiniz: Eğer -filter belirtmek istiyorsanız Yani bu yapabileceğini ya

gci -r . *.cs 
İlgili konular