Aprender PowerShell paso a paso – V (Creando Scripts en PowerShell)

Escrito por Saul Da Silva

18/02/2018

Scripting en PowerShell

Es posible crear scripts en PowerShell y ejecutarlos como si de un batch se tratase, solo que en PowerShell podemos hacer una cantidad de cosas increíbles.

Vamos a crear el famoso “Hello World” para iniciarnos recomiendo utilizar el PowerShell ISE, la extensión de los scripts en PowerShell es .PS1. La ventaja de crear scripts en PowerShell es crear herramientas poderosas que nos ayuden en la automatización de las tareas diarias.

Para ejecutar scripts en PowerShell solo introducimos en la consola ./nombrescript.ps1

Es posible que te encuentres con computadores que no permitan la ejecución de scripts en PowerShell. En este caso solo debes habilitar la ejecución de scripts con el comando:  Set-ExecutionPolicy -ExecutionPolicy Unrestricted puedes ver también mi publicación sobre Los Comandos más Útiles en PowerShell donde detallamos este comando.

Ahora si vamos a crear nuestro “Hello World”

#Mi primer script en PowerShell
Write-Output “Hello World”

Guardamos el script y luego lo ejecutamos con el comando  ./nombredefichero.ps1

Hábitos para crear Scripts.

Las estructuras de los scripts varían mucho de acuerdo al desarrollador pero siempre es aconsejable seguir un patrón y reglas básicas a la hora de escribir un script.

1-. Comentar el Código: Los comentarios son muy importantes, tanto para ti cuando en un futuro necesites alterar algo y puedas identificar rápidamente secciones de tu código, como para quien va a ejecutar el script.

Los comentarios se insertan con el símbolo #

#Esto es un Comentario

2-.Definición de Variables y Constantes: Las variables deben definirse al principio de todo script. Las variables almacenaran valores que utilizaras a lo largo de tu script. Todas las variables comienzan con el símbolo $

$variable = “valor”

Existen variables especiales en PowerShell como por ejemplo $_ que contiene un canalizador del objeto actual. Es usado en bloques de script, filtros y en las declaraciones Where-Object si quieres saber más sobre los filtros y Where-Object puedes ir aquí donde explicamos este tema más a fondo.

En nuestro primer script usamos Write-Host ahora vamos usar el cmdlet Read-Host que en vez de mostrar datos solicitara datos para posteriormente almacenarlos en un variable.

$var1 = “Hola ”
$var2 = Read-Host “¿Cómo te llamas?”
$var1, $var2

Este script te preguntara tu nombre y mostrara como resultado   “HOLA JOSE”

3-. Declaración de Variables: Cuando creas variables es importante especificar el tipo así puede evitar errores, como por ejemplo intentar sumar valores numéricos con un variable tipo String “texto”

[int]$numero = 1

 

Arrays o Matriz

Un array es un medio de guardar un conjunto de objetos de la misma clase. Se accede a cada elemento individual del array mediante un número entero denominado índice. 0 es el índice del primer elemento y n-1 es el índice del último elemento, siendo n, la dimensión del array.

En este ejemplo almacenaremos valores como strings y luego los recuperaremos

$frutas =@(“manzana”,”pera”,”fresa”)
$frutas[0]
$frutas[1]
$frutas[2]

 

Tablas Hash

Las hash tables o tablas hash en español, son estructuras de datos que nos permiten almacenar datos en pares. “Clave -> Valor”. Esto nos permite realizar funciones como búsqueda, inserción y borrado de datos con mayor eficiencia que utilizando otras estructuras.

#tabla hash
$frutas = @{Manzanas=”1,20” ; Peras=”0,90” ; Uvas =”2,60”}
$frutas

#Agregar un elemento
$frutas[“Banana”] = ”1,00”
#Remover un elemento
$frutas.Remove(“Manzanas”)
#Obtener el valor de un Elemento
$frutas.Peras
#Contar cuantos elementos tiene la hashtable
$frutas.Count
#Mostrar Claves almacenadas
$frutas.keys
#Mostrar valores almacenados
$frutas.values
#Eliminar todos los valores
$frutas.clear()

IF…ELSE

Cuando creamos scripts muchas veces necesitamos condicionar la ejecución de ciertos bloques. La forma más fácil es usando IF

IF(Condición) {comando}

If (Get-ChildItem –File =c:\resultado.txt) {echo OK}

En este caso si la condición es verdadera devolverá el valor OK, de lo contrario mostrara un mensaje de error.

Podemos incluir entonces ELSE

IF(Condición) {comando1} ELSE {comando2}

If (Get-ChildItem –File =c:\resultado.txt) {echo OK} Else {echo NOT OK}

 

FOR…FOREACH…WHILE

Dentro de nuestros Scripts tambien tendremos necesidad de realizer LOOPS o BUCLES para determinados comandos.

Dentro de PowerShell puedes crear bucles de diversas maneras es muy similar a otros lenguajes de programación/scripting.

  • For
  • ForEach
  • While
  • Do While
  • Do Until

 

FOR

El más simple es FOR:

For ($a=1; $a –le 100; $a++) {echo $a}

Esto nos mostrara una lista de números del 1 al 100

FOREACH

Normalmente utilizamos foreach para ejecutar cada ítem de un grupo de datos, sean datos recolectados en un comando o un filtro de datos en un array.

ForEach ($variable e ítems) {código a ejecutar}

Foreach ($números in 1,2,3,4,5) {$numeros+100}

Obtendremos como resultado los números del 101 al 105

 

WHILE

While es sumamente simple su estructura While(Condición)

$a = 0
While ($a –lt 5)
{
$a++; $a
}

En este caso la salida serán los números del 1 al 5

 

FUNCIONES

Las funciones son comandos dentro de un script, que funcionan apenas durante la sesión que estas ejecutando.

Function HelloWorld 
{
   Write-Host “Función Hello World”;
}

Después podemos llamar la función HelloWorld introduciendo solo:  HelloWorld

 

Durante la sesión puede llamar tus funciones las veces que sean necesarias. Pues las mismas quedan disponibles como si de un cmdlet se tratase. Hemos llegado al final de esta breve introducción al mundo del scripting en PowerShell pero no quería irme sin dejarles este truco:

¿Cómo hacer que PowerShell hable?

Usamos el recurso SAPI.SPvoice

$a = New-Object –ComObject SAPI.SPVoice
$a. speak(“Sigue a Pandazul en las Redes Sociales”)

 

 

Te puede interesar…

0 Comments

Submit a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *