2009-07-10 7 views
10

Windows PowerShellは非常に長い時間がかかりました。古い古いWindowsシェルと比べると、はるかに強力です。 デベロッパーとして毎日仕事をスピードアップして簡素化するために使用するスクリプトはありますか? PowerShellで魔法を使うことができれば - >私たちと共有してください!すべての開発者が知るべきPowerShellスクリプト

更新 実際にスクリプトではありませんが、非常に便利なのはPowerShell Community Extensionsです。パッケージには、多くの新しいCmdletとPowerShellの修正が含まれています。

ファイルの内容については、Windowsエクスプローラの検索が私のために働くことはありませんので、私はこの1つのすべての時間を使用し

答えて

3

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

ちょうどファイルタイプのファイル拡張子を持つ「拡張子」を置き換えるあなたが興味を持っている(または-Filterパラメータを完全に削除します)、 "somestring"をファイル内の検索するテキストに置き換えます。

+0

を、私はそれがディレクトリに中止を停止するのですかどのように私はアクセスできない? – Maslow

2

大文字で表示されるときはいつでも、私はTAB補完を使用したことを示しています。あなたはPSがあなたのために完成するものを学ぶべきです - それはV2でかなり良いです。

エイリアスが小文字で表示されるときは、いつでもメモリから入力したものです。あなたもそれを覚えるべきです。

# 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

コマンドラインでSubversionを使用するためのスクリプトをまとめました。それらのほとんどは、 - 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

よろしくお願いします。 TFS Power Toolのコマンドレットは、上記の入力と同じくらい頻繁に使用しますが、誰もがTFSを持っているわけではありません。あなたが選んだソース管理システムのためにある種のオブジェクトモデルを持っているなら、それをPowershellに合わせることは非常に習得するのに良いことです。 –

3

これはスクリプトではありませんが、一般的に名前と位置の両方でパラメータをショートカットできます。

名前では、PowerShellは1つに絞り込むだけで十分です。たとえば、gci -rが動作しますが、gci -f-filterまたは-forceのいずれかになります。

パラメータラベルなしで指定された値は、位置的に適用されます。あなたが-filterを指定したいのであれば、あなたはこれを行うことができ、次のいずれか

gci -r -fil *.cs 

または.を提供する位置-pathように、あなたはまた、位置-filterを指定することができます。

gci -r . *.cs 
関連する問題