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