Compartir a través de


Windows PowerShell: aquellos que olvidar la historia

De una forma u otra, Windows PowerShell puede recordar los comandos usados recientemente, lo que puede ser de gran ayuda.

Don Jones

"Quienes olvidan la historia," el viejo refrán, "están condenados a repetirla". Sin embargo, en el caso de Windows PowerShell, querrá repetir la historia, por lo que debe recordar precisamente. Windows PowerShell recuerda automáticamente comandos recientemente has ejecuta y sostiene en un búfer, o historia — para que pueda recordar más fácilmente y ejecute de nuevo.

Elecciones históricas

Cuando se utiliza la consola de Windows PowerShell, realmente puede trabajar con dos tipos de historial de comandos. Los dos son completamente independientes y no tienen nada que ver entre sí.

El primero es el buffer de línea de comandos, con el que probablemente esté familiarizado. Esto es lo que aparece cuando la tecla flecha arriba para recordar un comando de ejecución previamente. También puede pulsar F7 para obtener un menú de comandos de ejecución previamente. Una vez aparezca el menú, utilice las teclas de flecha para seleccionar un comando y presione entrar, y se ejecutará.

El búfer de línea de comandos retiene los últimos 50 comandos de forma predeterminada. Puede aumentar o disminuir esa opción editando las propiedades de la ventana de la consola. Haga clic en el cuadro de control de la ventana y seleccione Propiedades. Cambiar el tamaño de la "tamaño del búfer de historial de comandos" en la ficha Opciones.

Esta historia de comando es realmente independiente de Windows PowerShell, sí. Es mantenido por la aplicación de consola de hospedaje. Windows PowerShell no está siquiera consciente de que esto existe.

Una historia que se puede utilizar

La historia de Windows PowerShell se mantiene es más útil. Historia de –noun de comando Get para ver los cuatro cmdlets incorporados que se ocupan de este registro de historia extendida de ejecutar:

  • Añadir-historia
  • Borrar historial
  • Get-historia
  • Historia de invocación

También es una variable incorporada: $MaximumHistoryCount. Esto establece el tamaño del búfer de historial de comando interno de Windows PowerShell. Por defecto se define a 64. Si desea cambiarla, simplemente se define la variable en un nuevo valor. Cualquier cambio que realice sólo estará activa para la sesión actual de la shell. Si desea hacer el cambio más permanente, añadir algo como lo siguiente a la secuencia de comandos de perfil:

$MaximumHistoryCount = 100

Podría ir en un archivo denominado [mi] Documents\WindowsPowerShell\profile.ps1, que es una de las secuencias de comandos de perfil automáticamente ejecutado cuatro para el que busca en la shell.

Get-historia es el cmdlet principal que analizaremos, ya que es probablemente la más útil de los cuatro. Produce objetos del tipo HistoryInfo. Esos objetos contienen cuatro propiedades que encontrará interesantes:

  • Línea de comandos: el comando real cuando se ejecuta
  • StartExecutionTime: la hora inició el comando
  • EndExecutionTime: el tiempo el comando terminó
  • ExecutionStatus: el estado del comando después de la conclusión; Esto será algo como "Terminado" o "Detenido"

La combinación de estos objetos con otros comandos de Windows PowerShell es donde comienza realmente las cosas interesantes. Por ejemplo, supongamos que abra una ventana de shell flamante y laboriosamente ejecuta varios comandos específicos para completar una tarea compleja. ¿Desea convertir esos comandos en una secuencia de comandos, por lo que puede ejecutarlas en ese orden exacto y otra? Simplemente, haga lo siguiente:

Get-historia | Seleccione la línea de comandos –Expand | Out script.ps1

El truco aquí es el parámetro –ExpandProperty de Select Object. Causa Select Object para salida sólo el contenido de la propiedad especificada. En este caso, es la propiedad de la línea de comandos de los objetos HistoryInfo. Estos contienen el texto de los comandos que sólo ejecutó. A continuación, puede editar el archivo resultante de Script.ps1 en el Windows PowerShell ISE u otro editor de secuencia de comandos para ajustar los comandos, convertir los valores codificados en parámetros, quitar todos los comandos que no desea, etc..

Supongamos que hicieron este truco y con el siguiente archivo Script.ps1:

Import-Module ActiveDirectory
Import-CSV users.csv
Import-CSV users.csv | New-ADUser –path "ou=sales,dc=company,dc=com"

Puede que sea un ejemplo bastante corto, pero interactivamente ejecutando los comandos, puede comprobar que a trabajar: un paso a paso. De hecho, se puede ver en el segundo comando fue sólo una prueba de importación del archivo CSV. Esto simplemente asegura que tiene los datos esperados. A continuación, puede limpiar el script y agregar parámetros:

Param(
  [string]$filename = &(Read-Host "Specify input CSV filename"),
  [string]$path = "cn=Users,dc=company,dc=com"
)
Import-Module ActiveDirectory
Import-CSV $filename | New-ADUser –path $path

El comando "importación de prueba" y los parámetros añadidos recogen el nombre de archivo CSV y destino OU. Esto es un método mejor que dejar esos valores codificados. Asegúrese de quien ejecuta este script se pedirá un nombre de archivo si se olvida especificar uno (esto es tipo de una fea manera de hacer que preguntar: una función avanzada que proporcionan un medio más limpio, más coherente de hacerlo). Para el segundo parámetro, especifique un valor predeterminado que será suficiente si alguien no especifica un valor alternativo.

Se trata de una forma sencilla de llevar un proceso que manualmente has completado una vez y rápidamente se convierten en una secuencia predecible de acciones que incluso alguien podría utilizar.

Más trucos de historia

La capacidad para "obtener" la historia de línea de comandos ofrece numerosos otros trucos neat:

  • Ejecutar Get-historia | Exportación-CliXMLfilename a los comandos de exportación a un archivo XML. Enviar el archivo XML a un colega, y pueden repetir rápidamente los comandos mediante la ejecución de importación-CliXMLfilename | Historia de invocar.
  • Utilice las propiedades StartExecutionTime y EndExecutionTime para medir el tiempo que duró un comando. Por ejemplo: get-historia | Seleccione commandline,executionstatus,startexecutiontime,endexecutiontime,@{n='ExecutionDuration';e={$_.EndExecutionTime-$_.StartExecutionTime}}
  • Localizar rápidamente pasado comandos sin tener que desplazarse con la tecla flecha arriba. Por ejemplo, si saben que ejecutó un comando que utiliza "Seleccionar", intente esto encontrarlo: get-historia | donde {$_.Línea de comandos-como ' * Seleccione *' }

Como siempre, Windows PowerShell todo lo trata como un objeto en lugar de una masa de texto. Esto hace que este tipo de búsqueda y filtrado mucho más práctico que si fueron de análisis a través de un archivo de registro de texto o algo igualmente engorrosos.

Don Jones

Don Jones es un premio MVP de Microsoft y autor de "Aprender Windows PowerShell en un mes de almuerzos" (Manning publicaciones Co., 2010), un libro diseñado para ayudar a los administradores a eficaz con Windows PowerShell. Jones también ofrece formación de Windows PowerShell pública y a domicilio. Contacto con él a través de su sitio Web en ConcentratedTech.com.

Contenido relacionado