2009-03-05 12 views
19

Proporcione una línea de comandos de PowerShell que le parezca útil, un script por respuesta, por favor.Útil PowerShell one liners

Hay un question here similar, pero este proporciona solo enlaces a páginas con scripts, permite respuestas una por una aquí y tiene una lista aportada de los scripts más utilizados o más útiles.

  1. Lista la versión más reciente de los archivos

    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. abrir un archivo con su programa registrado (como por ejemplo startstart foo.xls)

    ii foo.xls

  4. recupera y muestra los caminos de valor Copia Medio Ambiente

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

  5. de carpeta especial del sistema al portapapeles (por lo que ahora u saber cómo utilizar el portapapeles!)

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

Con SnapIns

  1. archivos entre dos números del conjunto de cambios en TFS

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

  2. recibe mensajes de la cola de errores más de todos los servidores de concentradores de intercambio de 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

Las encuestas deben ser Community WIKIs – JaredPar

+1

Y normalmente no pertenecen a SO de todos modos. – EBGreen

+1

@EBGreen: a menudo no, no lo hacen. Creo que este es bastante bueno, aunque (si aclaramos algunas palabras). Puede servir como una buena introducción a la PS. –

Respuesta

6

Mi favorito powershell un trazador de líneas

gps programThatIsAnnoyingMe | kill 
13

Bueno, aquí es que yo uso a menudo junto con una explicación.

 
ii . 

La II es un alias para Invoke-Item. Este comando invoca esencialmente cualquier comando registrado en Windows para el siguiente elemento. Así que esto:

 
ii foo.xls 

abriría foo.xls en Excel (suponiendo que tiene instalado Excel y archivos .xls están asociados a Excel).

En ii ., el . hace referencia al directorio de trabajo actual, por lo que el comando provocaría que el explorador de Windows se abra en el directorio actual.

+3

Puede hacer eso en un aviso normal, solo escriba foo.xls y se iniciará Excel/OpenOffice/Lo que sea que haya asociado. Escriba Explorer y se iniciará una sesión de explorador de Windows en esa ubicación. –

+0

Normalmente hago esto usando 'start .',' start myFile.xls', o 'start" "" My File.xls "'. ¿Cómo es Invoke-Item superior al comando de inicio normal? –

+0

@Hosam, ¿usas start myfile.xls en powershell? – EBGreen

13

una lista de todos los archivos que ya se ha actualizado hoy:

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

Utilice tan a menudo que en realidad he creado una pequeña función en mi perfil:

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 

así que puedo decir :

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

ver cosas actualizado antes de hoy:

dir | wus -before 
+0

Tiene más sentido declarar 'Where-UpdatedSince' como una función. También el parámetro '-antes 'puede ser' [cambiar] '. – stej

+0

@stej - Where-UpdatedSince es una función. Actualicé el parámetro -antes de un interruptor. Eso no existía en PS v1 cuando originalmente escribí esto. – zdan

+0

Iment 'filter', no 'function' :) Acabo de agregar un comentario para mantenerlo actualizado - para cualquiera que se acerque y lea su publicación. – stej

2

recupera y muestra los caminos para

[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* 

Mi favorito de carpeta especial del sistema: Es un lector slashdot sans las presentaciones horribles por el sr. kdawson. Está diseñado para tener menos de 120 caracteres, lo que permite usarlo como firma en /.

2

Esto muestra qué procesos están utilizando las versiones de los MS CRT DLL:

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

Se puede hacer trampa ya que tengo los PowerTools TFS broche instalados pero esto es muy útil para encontrar los archivos que han cambiado entre dos conjuntos de cambios, versiones o etiquetas.

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

He encontrado que es útil para mostrar los valores de las variables de entorno

dir env: 

y puede copiar un valor de env así en el portapapeles

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

(es necesario tener ventanas. formularios cargados antes de la llamada: Add-Type -a system.windows.forms; y ejecute PowerShell con el modificador -STA)

0

recibe mensajes de la cola de errores más de todos los servidores de concentradores de Exchange 2007 (con algo de formato)

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

A eso de las 18:00 .... Sistema de tiempo de actividad

exit 
+0

ja, ja, ja, ja! –

0

de pantalla Función utilizo este para mi hoja de cálculo de contabilidad

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

En V2 hay una manera más fácil de cómo leer los contadores de rendimiento: 'Get-Counter System," System Up Time "'. – stej

2

no me gustan las aplicaciones complicadas para el recuento de líneas de código, sobre todo porque considero que sea una medida falsa en la primera plac mi. Termino con una EP de una sola línea en su lugar:

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

solo incluyo las extensiones de los archivos que desea incluir en el recuento de líneas e ir por ella desde el directorio raíz del proyecto.

+0

Normalmente hago '(gci -r -inc * .cs, *. Xaml | gc) -ne '' | measure' – Joey

0

copia alguna en el escritorio:

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

Lista de todos los proveedores de Windows con el fin de alfa:

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

En realidad se puede utilizar esto con un comodín para cualquier grupo específico de proveedores:

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

Suprimir los menús de Visual Studio 2012 ALL CAPS - Lo primero que hago después r instalación de VS2012.

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

Gracias a Richard Banks que descubrió el valor del registro.

1

canalizar la salida de algo en el portapapeles

ls | clip 
1

generar algunos bytes pseudo-aleatorios en un archivo.

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

El algoritmo Get-aleatoria tome una semilla del reloj del sistema, así que no use esto para las necesidades criptográficas graves.

3

¡Dudo en enumerar mi lista de frases resumidas de PowerShell una por una ya que la lista cuenta con casi 400 entradas en este momento! :-) Pero aquí están algunos de mis favoritos, a despertar su interés:

  • Lista de todos los aceleradores de tipo (requiere PSCX): [accelerators]::get
  • Convierte una representación de cadena de XML a XML real: [xml]"<root><a>...</a></root>"
  • volcar un objeto (aumento de la profundidad para obtener más detalles): comando $PWD | ConvertTo-Json -Depth 2
  • Recuérdese de la historia al subcadena (mirando hacia arriba antes 'cd' cmd): #cd
  • Acceso C# valor de enumeración: [System.Text.RegularExpressions.RegexOptions]::Singleline
  • Generar gráfico de barras (requiere Jeff Hicks cmdlet): ls . | select name,length | Out-ConsoleGraph -prop length -grid

La colección completa está disponible al público en una serie de 4 partes publicado el Simple-Talk.com - espero que éstos serán útiles para los lectores de SO!

quería llamar la serie "hacer cualquier cosa en una línea de PowerShell " pero mi editor quería algo más escueto, así que fuimos con PowerShell One-Liner s.Aunque en aras de la revelación completa, solo el 98% o más son realmente comprensivos en el verdadero espíritu del término; Yo creía que era lo suficientemente cerca con redondeo ... :-)

+0

Artículo impresionante @Michael, ¡es una referencia única para todo PowerShell! –

0
cls 

Deshacerse de todas las marcas rojas intratables, -verbose después de cada uno de mis intentos de comandos, dejándome hoja de vida con un bonito elegante pantalla buscando claro.