porta microsoft management .net powershell scripting scripting-language

.net - microsoft - Útiles forros PowerShell one



porta azure (19)

Proporcione un script de PowerShell de una línea que le haya resultado útil, un script por respuesta, por favor.

Hay una pregunta similar aquí , pero esta solo proporciona enlaces a páginas con scripts, permite respuestas una por una aquí y tiene una lista contribuida 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. Abra un archivo con su programa registrado (como start por ejemplo, start foo.xls )

    ii foo.xls

  4. Recupera y muestra las rutas a las carpetas especiales del sistema.

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

  5. Copie el valor del entorno al portapapeles (¡así que ahora sabe cómo usar el portapapeles!)

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

Con SnapIns

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

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

  2. Obtiene mensajes de cola con errores en todos los servidores Hub en el intercambio 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


¡Dudo en enumerar una por una mi lista de PowerShell de una sola línea, ya que la lista es solo de unas 400 entradas en la actualidad! :-) Pero aquí están algunos de mis favoritos, para despertar su interés:

  • Listar todos los aceleradores de tipo (requiere PSCX ): [accelerators]::get
  • Convierta una representación de cadena de XML a XML real: [xml]"<root><a>...</a></root>"
  • Volcar un objeto (aumentar la profundidad para más detalles): $PWD | ConvertTo-Json -Depth 2 $PWD | ConvertTo-Json -Depth 2
  • Recupere el comando del historial por subcadena (buscando el cd ''cmd anterior): #cd
  • Acceda al valor de enumeración de C #: [System.Text.RegularExpressions.RegexOptions]::Singleline
  • Generar gráfico de barras (requiere cmdlet Jeff Hicks): ls . | select name,length | Out-ConsoleGraph -prop length -grid ls . | select name,length | Out-ConsoleGraph -prop length -grid

La colección completa está disponible públicamente en una serie de 4 partes publicada en Simple-Talk.com. ¡Espero que sean útiles para los lectores de SO!

Quería llamar a la serie "Hacer cualquier cosa en una línea de PowerShell", pero mi editor quería algo más conciso, por lo que optamos por PowerShell One-Liners . Aunque en interés de la divulgación completa, solo el 98% aproximadamente son realmente de una sola línea en el verdadero espíritu del término; Pensé que estaba lo suficientemente cerca con el redondeo ... :-)


A las 6:00 pm aproximadamente.

exit


Bueno, aquí hay uno que uso a menudo junto con alguna explicación.

ii .

El ii es un alias para Invocar artículo. Este comando esencialmente invoca cualquier comando registrado en Windows para el siguiente artículo. Así que esto:

ii foo.xls

Abriría foo.xls en Excel (asumiendo que tiene Excel instalado y los archivos .xls están asociados a Excel).

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


Copia algunos en el escritorio:

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


El tiempo de funcionamiento del sistema de la pantalla de funciones lo uso 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) }


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

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


Generar algunos bytes pseudo aleatorios en un archivo.

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

El algoritmo Get-Random toma una semilla del reloj del sistema, así que no lo use para necesidades criptográficas serias.


Listar todos los archivos que he actualizado hoy:

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

Úsalo 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"

Para ver cosas actualizadas antes de hoy:

dir | wus -before


Listar todos los proveedores de Windows en orden alfa:

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

En realidad, puede usar esto con un comodín para cualquier grupo específico de Proveedores:

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


Me ha resultado útil mostrar valores de variables de entorno.

dir env:

Y también puede copiar un valor env al portapapeles.

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

(debe tener Windows.forms cargado antes de la llamada: Add-Type –a system.windows.forms; y ejecutar PowerShell con el interruptor -STA)


Mi PowerShell favorito es un transatlántico.

gps programThatIsAnnoyingMe | kill


No me gustan las aplicaciones complicadas para contar líneas de código, especialmente porque considero que es una métrica falsa en primer lugar. Termino usando un PS 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 quiero incluir en el recuento de líneas y voy desde el directorio raíz del proyecto.


Obtiene mensajes de cola con errores en todos los servidores Hub en Exchange 2007 (con algún 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


Puede ser trampa ya que tengo instalado el complemento TFS PowerTools pero esto es bastante útil para descubrir qué archivos 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


Recupera y muestra las rutas a las carpetas especiales del sistema.

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


Suprimir Visual Studio 2012 TODOS los menús de CAPS: lo primero que hago después de instalar 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 de registro.


canalizar la salida de algo al portapapeles

ls | clip


cls

Deshágase de todas las marcas de color rojo que son intratables, y luego de cada uno de mis intentos, dejándome reanudar con una pantalla elegante y elegante.


($x=new-object xml).Load("http://rss.slashdot.org/Slashdot/slashdot");$x.RDF.item|?{$_.creator-ne"kdawson"}|fl descr*

Mi favorito: es un lector de slashdot sin las horribles presentaciones de mr. kdawson Está diseñado para tener menos de 120 caracteres, lo que permite que se use como firma en /.