9
votes

Scripts PowerShell Chaque développeur devrait savoir

Windows PowerShell est sorti assez longtemps maintenant. En comparaison avec le bon vieux shell de Windows, il est beaucoup plus puissant. Y a-t-il des scripts que vous utilisez pour accélérer et simplifier votre travail tous les jours en tant que développeur? Si vous pouvez faire de la magie avec PowerShell -> S'il vous plaît partagez-la avec nous!

mise à jour Pas vraiment un script, mais aussi très utile sont Extensions de la communauté PowerShell . Le paquet contient beaucoup de nouvelles cmdlets et de modifications PowerShell.


0 commentaires

4 Réponses :


3
votes

J'utilise celui-ci tout le temps car la recherche de fichiers de Windows Explorer ne fonctionne jamais pour moi: xxx

il suffit de remplacer "extension" avec l'extension de fichier du type de fichier que vous êtes intéressé dans (ou retirez entièrement le paramètre -Filter) et remplacez "SAVICING" avec le texte que vous souhaitez rechercher dans le fichier.


1 commentaires

Comment puis-je l'obtenir pour arrêter d'abandonner les annuaires que je n'ai pas accès?



2
votes

Chaque fois que vous voyez quelque chose avec une capitalisation appropriée, c'est une indication que j'ai utilisée l'achèvement de l'onglet. Vous devriez apprendre quelles choses les PS se termineront pour vous - c'est assez bon en V2.

Chaque fois que vous voyez des alias en minuscule, c'est quelque chose que j'ai saisi de mémoire. Vous devez aussi la mémoriser. P>

# 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()


0 commentaires

6
votes

Je mets ensemble un tas de scripts pour travailler avec Subversion à la ligne de commande. La plupart d'entre eux utilisent simplement l'option --xml pour placer diverses informations sous forme d'objet. Voici quelques exemples:

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


1 commentaires

Bon appel. J'utilise les cmdlets de l'outil de puissance TFS aussi souvent que tout ce que j'ai saisi ci-dessus, mais tout le monde n'a pas de TFS. Si vous avez une sorte de modèle d'objet pour votre système de contrôle source, vous l'accoupler à PowerShell est extrêmement bon à apprendre.



3
votes

Ce n'est pas un script, mais en général, il est utile d'apprendre lorsque vous pouvez les paramètres de coupe courte, à la fois par nom et position.

Par nom, PowerShell a juste besoin de suffisamment pour le réduire à un. Par exemple, gci -r code> fonctionne mais gci -f code> peut être soit -Filter code> ou -force code>. p>

Les valeurs spécifiées sans étiquette de paramètre sont appliquées positionnées. Donc, si vous souhaitez spécifier -Filter code>, vous pouvez le faire soit: p>

gci -r . *.cs


0 commentaires