trucos para mostrar historial ejecutar divertidos comandos comando avanzados command-line powershell history

command-line - para - mostrar historial de comandos en cmd



Historial de PowerShell: ¿cómo evitar que se dupliquen los comandos? (3)

El siguiente comando funciona para PowerShell en Windows 10 (probado en v.1803). La opción está documentada here .

Set-PSReadLineOption –HistoryNoDuplicates:$True

En la práctica, llamar a PowerShell con el siguiente comando (por ejemplo, guardado en un acceso directo) abre PowerShell con un historial sin duplicados

%SystemRoot%/system32/WindowsPowerShell/v1.0/powershell.exe -NoExit -Command Set-PSReadLineOption –HistoryNoDuplicates:$True

Fondo:

El historial de PowerShell es mucho más útil para mí ahora que tengo una manera de guardar el historial en todas las sesiones.

# Run this every time right before you exit PowerShell get-history -Count $MaximumHistoryCount | export-clixml $IniFileCmdHistory;

Ahora, estoy tratando de evitar que PowerShell guarde comandos duplicados en mi historial.

Intenté usar Get-Unique , pero eso no funciona ya que cada comando en el historial es "único", porque cada uno tiene un número de ID diferente.


Get-Unique también requiere una lista ordenada y supongo que probablemente desee conservar el orden de ejecución. Prueba esto en su lugar

Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} | Export-Clixml "$home/pshist.xml"

Este enfoque utiliza el cmdlet Group-Object para crear grupos de comandos únicos y, a continuación, el bloque Foreach-Object simplemente toma el primer elemento de cada grupo.

Por cierto, si desea que todos los comandos se guarden en un archivo de historial, usaría el valor límite, 32767, a menos que se establezca en $ MaximumHistoryCount.

Por cierto, si desea guardar esto automáticamente en la salida, puede hacer esto en 2.0.

Register-EngineEvent PowerShell.Exiting { Get-History -Count 32767 | Group CommandLine | Foreach {$_.Group[0]} | Export-CliXml "$home/pshist.xml" } -SupportEvent

Entonces para restaurar sobre carga todo lo que necesitas es

Import-CliXml "$home/pshist.xml" | Add-History


No relacionado directamente con los duplicados, pero igualmente útil, este bloque de script AddToHistoryHandler en mi $PROFILE mantiene comandos cortos y simples fuera de mi historial:

$addToHistoryHandler = { Param([string]$line) if ($line.Length -le 3) { return $false } if (@("exit","dir","ls","pwd","cd ..").Contains($line.ToLowerInvariant())) { return $false } return $true } Set-PSReadlineOption -AddToHistoryHandler $addToHistoryHandler