2009-03-05 6 views
19

Fornire uno script PowerShell di una riga che si è trovato utile, uno script per risposta, per favore.Utile una sola unità PowerShell

C'è un simile question here, ma questo fornisce solo collegamenti a pagine con script, consente di rispondere a una a una qui e contiene un elenco di script più usati o più utili.

  1. Lista versione più recente di file

    ls -r -fi *.lis | sort @{expression={$_.Name}}, @{expression={$_.LastWriteTime};Descending=$true} | select Directory, Name, lastwritetime | Group-Object Name | %{$_.Group | Select -first 1}

  2. gps programThatIsAnnoyingMe | kill

  3. Aprire un file con il suo programma registrato (come per esempio startstart foo.xls)

    ii foo.xls

  4. recupera e visualizza i percorsi

    [enum]::getvalues([system.environment+specialfolder]) | foreach {"$_ maps to " + [system.Environment]::GetFolderPath($_)}

  5. valore Copy Ambiente cartella speciale del sistema negli appunti (così ora u so come utilizzare appunti!)

    $env:appdata | % { [windows.forms.clipboard]::SetText($input) }
    O
    ls | clip

Con SnapIns

  1. file tra due numeri changeset nel TFS

    Get-TfsItemHistory <location> -Recurse -Version <label1>~<label2> | % { $(Get-TfsChangeset $_.ChangeSetID).Changes } | % { $_.Item.ServerItem } | Sort-Object -Unique

  2. di recupero dei messaggi in coda con gli errori più di tutti i server Hub in cambio 200

    Get-ExchangeServer | ?{$_.IsHubTransportServer -eq $true} | Get-Queue | ?{$_.LastError -ne $null} | Sort-Object -Descending -Property MessageCount | ft -Property NextHopDomain,@{l="Count";e={$_.MessageCount}},@{l="Last Try";e={$_.LastRetryTime.tosting("M/dd hh:mm")}},@{l="Retry";e={$_.NextRetryTime.tostring("M/dd hh:mm")}},Status,LastError -AutoSize

+0

I sondaggi devono essere WIKI della comunità – JaredPar

+1

E in genere non appartengono a SO in ogni caso. – EBGreen

+1

@EBGreen: spesso no, non lo fanno. Penso che questo sia abbastanza buono, anche se (se chiariamo alcune parole). Può server come una buona introduzione di PS. –

risposta

6

mio PowerShell preferito uno di linea

gps programThatIsAnnoyingMe | kill 
13

Bene, qui è quello che uso spesso con qualche spiegazione.

 
ii . 

Il II è un alias per Invoke-Item. Questo comando essenzialmente invoca qualsiasi comando registrato in Windows per il seguente elemento. Quindi questo:

 
ii foo.xls 

avrebbe aperto foo.xls in Excel (ammesso che abbiate installato Excel e file .xls sono associati a Excel).

In ii . il . fa riferimento alla directory di lavoro corrente, quindi il comando causerebbe l'apertura di Windows Explorer nella directory corrente.

+3

Puoi farlo in un normale prompt, digita semplicemente foo.xls e avvierà Excel/OpenOffice/Qualsiasi cosa tu abbia associato. Digitare Explorer e avvierà una sessione di Windows Explorer in quella posizione. –

+0

Solitamente lo faccio usando 'start .', 'start myFile.xls', o' start '" "My File.xls" '. In che modo Invoke-Item è superiore al normale comando di avvio? –

+0

@Hosam, usi start myfile.xls in powershell? – EBGreen

13

elencare tutti i file che ho aggiornato oggi:

dir | ?{$_.LastWriteTime -ge [DateTime]::Today} 

uso frequentissimo che in realtà ho creato una piccola funzione nel mio profilo:

function Where-UpdatedSince{ 
Param([DateTime]$date = [DateTime]::Today, 
     [switch]$before=$False) 
Process 
{ 
    if (($_.LastWriteTime -ge $date) -xor $before) 
    { 
     Write-Output $_ 
    } 
} 
}; set-item -path alias:wus -value Where-UpdatedSince 

quindi posso dire :

dir | wus 
dir | wus "1/1/2009" 

Per vedere roba aggiornato prima di oggi:

dir | wus -before 
+0

È più opportuno dichiarare 'Where-UpdatedSince' come una funzione. Anche il parametro '-before' potrebbe essere' [switch] '. – stej

+0

@stej - Where-UpdatedSince è una funzione. Ho aggiornato il parametro -before a un parametro. Non era in giro in PS v1 quando ho originariamente scritto questo. – zdan

+0

I 'filtro', non 'funzione' :) Ho appena aggiunto un commento per tenerlo aggiornato - per chiunque si avvicini e leggendo il tuo post. – stej

2

recupera e visualizza i percorsi di cartella speciale del sistema

[enum]::getvalues([system.environment+specialfolder]) | foreach {"$_ maps to " + [system.Environment]::GetFolderPath($_)} 
4
($x=new-object xml).Load("http://rss.slashdot.org/Slashdot/slashdot");$x.RDF.item|?{$_.creator-ne"kdawson"}|fl descr* 

Il mio preferito: è un lettore di Slashdot sans le osservazioni orribili da mr. kdawson. È progettato per contenere meno di 120 caratteri e può essere utilizzato come firma su /.

2

Questa mostra quali processi stanno utilizzando quali versioni di MS CRT DLL:

gps | select ProcessName -exp Modules -ea 0 | 
    where {$_.modulename -match 'msvc'} | sort ModuleName | 
    Format-Table ProcessName -GroupBy ModuleName 
2

Può essere barare dal momento che ho PowerTools TFS a scatto installati ma questo è molto utile per scoprire quali file sono cambiati tra due changeset, versioni o etichette.

Get-TfsItemHistory <location> -Recurse -Version <label1>~<label2> | 
% { $(Get-TfsChangeset $_.ChangeSetID).Changes } | 
% { $_.Item.ServerItem } | Sort-Object -Unique 
2

ho ritenuto utile per mostrare i valori delle variabili di ambiente

dir env: 

e si può copiare un valore env pure negli appunti

$env:appdata | % { [windows.forms.clipboard]::SetText($input) } 

(è necessario disporre di Windows. moduli caricati prima della chiamata: Aggiungi-Tipo -a system.windows.forms ed esegui PowerShell con l'opzione -STA)

0

di recupero dei messaggi in coda con gli errori più di tutti i server Hub in Exchange 2007 (con un po 'di formattazione)

Get-ExchangeServer | ?{$_.IsHubTransportServer -eq $true} | Get-Queue | ?{$_.LastError -ne $null} | Sort-Object -Descending -Property MessageCount | ft -Property NextHopDomain,@{l="Count";e={$_.MessageCount}},@{l="Last Try";e={$_.LastRetryTime.tosting("M/dd hh:mm")}},@{l="Retry";e={$_.NextRetryTime.tostring("M/dd hh:mm")}},Status,LastError -AutoSize   
22

Verso le 18:00 ....

exit 
+0

ah ah ah ah ah! –

0

del display Funzione Sistema Uptime Io uso questo per il mio foglio di calcolo contabile

function get-uptime 
{ 
$PCounter = "System.Diagnostics.PerformanceCounter" 
$counter = new-object $PCounter System,"System Up Time" 
$value = $counter.NextValue() 
$uptime = [System.TimeSpan]::FromSeconds($counter.NextValue()) 
"Uptime: $uptime" 
"System Boot: " + ((get-date) - $uptime) 
} 
+1

In V2 c'è modo più semplice di leggere i contatori delle prestazioni: 'Sistema Get-Counter," System Up Time "'. – stej

2

non mi piace applicazioni complesse per il conteggio di righe di codice, soprattutto perché ritengo che sia una metrica fasullo nel primo plac e. Io alla fine con un PS one-liner invece:

PS C:\Path> (dir -include *.cs,*.xaml -recurse | select-string .).Count 

Ho appena includere le estensioni dei file che voglio includere nel conteggio di linea e andare per esso dalla directory principale del progetto.

+0

Di solito faccio '(gci -r -inc * .cs, *. Xaml | gc) -ne '' | measure' – Joey

0

copiare alcuni al desktop:

Copy-Item $home\*.txt ([Environment]::GetFolderPath("Desktop")) 
0

Lista tutti i provider di Windows in ordine alfa:

get-winevent -listprovider microsoft-windows* | % {$_.Name} | sort 

In realtà è possibile utilizzare questo con un jolly per qualsiasi gruppo specifico di fornitori:

get-winevent -listprovider microsoft-windows-Securit* | % {$_.Name} | sort 
3

Soppressione di Visual Studio 2012 Menu ALL CAPS - La prima cosa che faccio r installazione di VS2012.

Set-ItemProperty -Path HKCU:\Software\Microsoft\VisualStudio\11.0\General -Name SuppressUppercaseConversion -Type DWord -Value 1 

Grazie a Richard Banks che ha scoperto il valore del Registro.

1

inviare l'output di qualcosa negli appunti

ls | clip 
1

generare qualche pseudo byte casuali in un file.

[Byte[]][email protected](); 0..9 | %{$out += Get-Random -Minimum 0 -Maximum 255}; [System.IO.File]::WriteAllBytes("random",$out) 

L'algoritmo Get-a caso prende un seme dall'orologio di sistema, in modo da non utilizzare questo per esigenze di crittografia gravi.

3

Esito a enumerare la mia lista di one-liner PowerShell uno alla volta poiché la lista contiene solo circa 400 voci al momento! :-) Ma qui ci sono alcuni dei miei preferiti, a stimolare il vostro interesse:

  • Lista tutti gli acceleratori di tipo (richiede PSCX): [accelerators]::get
  • Convert una rappresentazione di stringa di XML a XML attuale: [xml]"<root><a>...</a></root>"
  • Dump un (profondità aumento per maggiori dettagli) oggetto: comando $PWD | ConvertTo-Json -Depth 2
  • Richiamo dalla storia da sottostringa (guardando in precedenza 'cd' cmd): #cd
  • C# valore enum
  • Accesso: [System.Text.RegularExpressions.RegexOptions]::Singleline
  • Genera grafico a barre (richiede Jeff Hicks' cmdlet): ls . | select name,length | Out-ConsoleGraph -prop length -grid

L'intera collezione è disponibile al pubblico in una serie in 4 parti pubblicato su Simple-Talk.com - Spero che questi saranno utili ai lettori SO!

ho voluto chiamare la serie "Do Anything in una sola riga di PowerShell " ma il mio editor voleva qualcosa di più conciso, quindi siamo andati con PowerShell One-Liner s.Sebbene nell'interesse di una completa divulgazione, solo il 98% circa di essi è veramente uno strumento di allineamento nel vero spirito del termine; Ho pensato che era abbastanza vicino con arrotondamento ... :-)

+0

Articolo fantastico @ Michael, è un riferimento unico per tutto ciò che riguarda PowerShell! –

0
cls 

sbarazzarsi di tutte le intrattabili, segni rossi -verbose dopo ciascuno dei miei tentativi di comandi, lasciando che mi riprendo con un bel elegante chiara schermo cercando.