2009-07-10 25 views
10

Windows PowerShell đã hết thời gian khá dài. So với các cửa sổ cũ tốt vỏ nó mạnh hơn nhiều. Có bất kỳ tập lệnh nào bạn sử dụng để tăng tốc và đơn giản hóa công việc hàng ngày của mình với tư cách là nhà phát triển không? Nếu bạn có thể làm phép thuật với PowerShell -> hãy chia sẻ nó với chúng tôi!Các tập lệnh PowerShell mà mọi nhà phát triển nên biết

Cập nhật Không thực sự là tập lệnh, nhưng cũng rất hữu ích là PowerShell Community Extensions. Gói này chứa rất nhiều sửa đổi mới của Cmdlets và PowerShell.

Trả lời

3

tôi sử dụng cái này tất cả các thời gian vì tìm kiếm của Windows Explorer cho nội dung tập tin không bao giờ làm việc cho tôi:

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

Chỉ cần thay thế "mở rộng" với phần mở rộng tập tin của các loại tập tin mà bạn quan tâm (hoặc loại bỏ các tham số -Filter hoàn toàn) và thay thế "somestring" với văn bản bạn muốn tìm trong tập tin.

+0

làm thế nào để làm cho nó dừng hủy trên danh bạ Tôi không có quyền truy cập vào? – Maslow

2

Bất cứ lúc nào bạn thấy nội dung nào đó có cách viết hoa thích hợp, đó là dấu hiệu cho thấy tôi đã hoàn thành TAB. Bạn nên tìm hiểu những thứ PS sẽ hoàn thành cho bạn - nó khá tốt trong V2.

Bất cứ lúc nào bạn nhìn thấy bí danh trong chữ thường, đó là nội dung tôi đã nhập từ bộ nhớ. Bạn nên ghi nhớ nó quá.

# 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

Tôi tập hợp nhiều tập lệnh để làm việc với Subversion tại dòng lệnh. Hầu hết trong số họ chỉ sử dụng tùy chọn --xml để đưa thông tin khác nhau vào biểu mẫu đối tượng. Dưới đây là một vài ví dụ:

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

Tôi có những bí danh này với svn và svnl, tương ứng. Tôi nói về một vài người khác here.

+0

Cuộc gọi tốt. Tôi sử dụng lệnh ghép ngắn TFS Power Tool thường xuyên như bất cứ thứ gì tôi đã gõ ở trên, nhưng không phải ai cũng có TFS. Nếu bạn có một số loại mô hình đối tượng cho hệ thống kiểm soát nguồn của bạn lựa chọn, giao phối nó với Powershell là cực kỳ tốt để tìm hiểu. –

3

Nó không phải là một tập lệnh, nhưng nói chung nó rất hữu ích để tìm hiểu khi bạn có thể cắt ngắn tham số, cả theo tên và vị trí.

Bằng tên, PowerShell chỉ cần đủ để thu hẹp xuống một. Ví dụ: gci -r hoạt động nhưng gci -f có thể là -filter hoặc -force.

Giá trị được chỉ định không có nhãn thông số được áp dụng theo vị trí. Vì vậy, nếu bạn muốn chỉ định -filter bạn có thể hoặc là làm điều này:

gci -r -fil *.cs 

Hoặc cung cấp . địa vị như -path vì vậy bạn cũng có thể chỉ định -filter địa vị:

gci -r . *.cs 
Các vấn đề liên quan