Escuela Geek escribiendo tu primer guión completo de PowerShell
Hace unas semanas, The Geek le mostró cómo puede usar el símbolo del sistema para saber cuándo se inició la computadora por última vez. En esta última instalación de Geek School for PowerShell, vamos a escribir un comando PowerShell reutilizable para hacer lo mismo.
Asegúrese de leer los artículos anteriores de la serie:
- Aprenda cómo automatizar Windows con PowerShell
- Aprendiendo a usar cmdlets en PowerShell
- Aprender a usar objetos en PowerShell
- Aprendizaje de formato, filtrado y comparación en PowerShell
- Aprende a usar el control remoto en PowerShell
- Uso de PowerShell para obtener información de la computadora
- Trabajando con Colecciones en PowerShell
- Aprende a usar trabajos en PowerShell
- Aprenda cómo extender PowerShell
- Aprendizaje de variables de PowerShell, entrada y salida
Escribiendo su primer guión
Lo primero que debemos hacer es encontrar una manera de acceder a la información que buscamos. Dado que estamos tratando con información de administración, es probable que tengamos que echar un vistazo al uso de WMI, que de hecho tiene una clase llamada Win32_OperatingSystem que le permite ver información detallada sobre su sistema operativo, incluida la última vez que se inició.
Ahora que sabemos dónde podemos encontrar la información que buscamos, abrimos el ISE y escribimos lo siguiente.
Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |
Select-Object -Property CSName, LastBootUpTime
Nota: Tuve que dividir mi código en dos líneas para que todo se ajuste a la captura de pantalla, pero siéntase libre de escribirlo en una sola línea. Si elige dividirlo en dos líneas, asegúrese de que el carácter de canalización sea el último carácter en la línea 1.
Ahora haga clic en el botón verde "Ejecutar secuencia de comandos" o presione la tecla F5 en su teclado para probar el código.
Los tiempos de WMI pueden ser un poco crípticos. Con esto queremos decir que si miras la propiedad LastBootUpTime, dice 2013-03-19 a las 18:26:21, pero por alguna razón, los chicos de WMI decidieron concatenar todo eso en una sola cadena. Por suerte para nosotros, no tenemos que preocuparnos por analizar manualmente la cadena, ya que hay una forma más fácil de hacerlo, aunque sea más avanzada. Tendrá que cambiar la parte del código del objeto Seleccionar para que se vea así:
Select-Object -Property CSName, @ n = "Último arranque";
e = [Management.ManagementDateTimeConverter] :: ToDateTime ($ _. LastBootUpTime)
Lo que estamos haciendo aquí es crear una propiedad personalizada llamada "Último arranque" y especificar que su valor debe ser el resultado de llamar al método estático ToDateTime en la propiedad LastBootUpTime del objeto de canalización actual. Tu código ahora debería verse así.
Ejecutar el código ahora producirá un último tiempo de arranque mucho más legible.
Ahora que estamos contentos con la funcionalidad básica de nuestro script, necesitamos guardarlo. Para simplificar, guardémoslo como sigue:
C: \ Get-LastBootTime.ps1
Ahora cambie a la mitad inferior del ISE y ejecute lo siguiente:
C: \ Get-LastBootTime.ps1
¡Genial! Nuestro script funciona como se esperaba, sin embargo, todavía hay un problema con nuestro script. Codificamos el nombre de la computadora para la que queremos obtener el último arranque. En lugar de valores de codificación, deberíamos proporcionar un parámetro para que quien esté usando el script pueda elegir en qué equipo ejecutará el script. Para hacerlo, ve a la parte superior de tu script y haz lo siguiente.
param
[string] $ ComputerName
)
Luego reemplace el valor de localhost codificado con la variable $ ComputerName. Tu guión ahora debería verse así:
Guarde su script, luego vuelva a la mitad inferior del ISE y vea la ayuda para su script.
ayuda C: \ Get-LastBootTime.ps1
Increíble, por lo que ahora podemos especificar el nombre de la computadora que queremos obtener el último tiempo de arranque para usar nuestro nuevo parámetro ComputerName. Lamentablemente, todavía hay algunas cosas mal. En primer lugar, el parámetro ComputerName es opcional y, en segundo lugar, es el más útil que he visto, así que solucionemos esos problemas rápidamente. Para hacer que el parámetro ComputerName sea obligatorio, cambie el contenido del bloque param al siguiente.
[Parámetro (Obligatorio = $ true)] [string] $ ComputerName
En cuanto a hacer un mejor archivo de ayuda, el método más común es usar ayuda basada en comentarios. Eso significa que solo agregamos un comentario extra largo al principio del script de salida..
<#
.SINOPSIS
Muestra la última vez que arrancó su PC..
.DESCRIPCIÓN
Esta es una función de envoltorio de WMI para obtener la hora en que su PC se inició por última vez.
.PARAMETRO ComputerName
El nombre de la computadora con la que desea ejecutar el comando.
.EJEMPLO
Get-LastBootTime -ComputerName localhost
.ENLAZAR
www.howtogeek.com
#>
Una vez hecho todo esto, deberías terminar con un script como este.
Vamos ahora a ver nuestro nuevo archivo de ayuda..
Ahhh, se ve genial! Ahora que nuestro script está completo, tenemos una última cosa que hacer: probar. Para esto, voy a salir del ISE y regresar a la consola de PowerShell para que podamos asegurarnos de que no haya anomalías.
Si comienzas con un simple forro y simplemente sigues construyendo sobre él como lo hicimos en esta guía, lo dominarás en poco tiempo. Eso es todo por ahora, nos vemos en la próxima instalación de Geek School..