2009-09-17 11 views
16

Antecedentes: historia PowerShell es mucho más útil para mí ahora que tengo una manera de ahorrar la historia a través de sesiones.historia PowerShell: ¿Cómo se previene comandos duplicados

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

Ahora, estoy tratando de prevenir PowerShell desde el ahorro de comandos duplicados a mi historia .

He intentado utilizar Get-Unique, pero eso no quiere trabajar desde cada comando en la historia es "único" porque cada uno tiene un número de identificación diferente.

Respuesta

22

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

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

Este enfoque utiliza el cmdlet Group-Object para crear cubos únicas de comandos y luego el bloque Foreach-Object simplemente agarra el primer elemento en cada cubo.

BTW si quiere que todos los comandos se guarden en un archivo de historial, usaría el valor límite - 32767 - a menos que sea eso en lo que establezca $ MaximumHistoryCount.

Por cierto, si desea guardar automáticamente esta en la salida se puede hacer esto en 2.0 como por lo

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

Luego de restaurar a la carga todo lo que necesita es

Import-CliXml "$home\pshist.xml" | Add-History 
+0

hmm ... gracias para el post, pero ¿omitiste la parte donde asignas $ hist? – dreftymac

+0

Lo siento, solo estaba eligiendo un nombre de variable que no fuera $ IniFileCmdHistory para evitar la temida barra de desplazamiento horizontal. :-) –

+0

.. oh por supuesto! * golpea la frente * :) – dreftymac

Cuestiones relacionadas