Está en la página 1de 31

UT 01: SCRIPTING CON POWERSHELL

3.- Programación de scripts


3.1 Mi primer script
Un script de Windows PowerShell no es más que un fichero de texto con la
extensión ".ps1".
Abre una consola PowerShell como administrador y ejecutar Get-
ExecutionPolicy para ver el nivel de seguridad que tenemos actualmente.
Niveles de seguridad, de más a menos:

Para poder ejecutar scripts de PowerShell que desarrolles de forma local, tienes
que autorizar su ejecución en tu ordenador. Para ello, abre una consola PowerShell
como administrador y ejecutar Set-ExecutionPolicy RemoteSigned

Con esta configuración, cualquier script que desarrolles localmente en tu


ordenador será autorizado. En cambio, si descargas tu script de forma remota, solo se
ejecutará si está firmado digitalmente.
Si confías en scripts que te descargues de forma remota y tienes problemas en
la ejecución, puedes ir a las propiedades del fichero y desbloquearlos para convertirlos
en scripts locales:

ANTONIO J. LEÓN DELGADO 1


UT 01: SCRIPTING CON POWERSHELL

Puedes crear scripts con tu editor de texto favorito, tal como el Bloc de Notas,
Notepad++, Atom, etc. No obstante, nosotros vamos a utilizar Windows PowerShell
ISE, un entorno integrado de desarrollo de scripts de PowerShell. Es un entorno muy
sencillo de utilizar y ofrece funcionalidades muy útiles como asistencia contextual a la
programación, un depurador y una consola PowerShell integrada donde ver los
resultados de tu script y ejecutar cualquier cmdlet, incluido el acceso a las variables de
tu script.

ANTONIO J. LEÓN DELGADO 2


UT 01: SCRIPTING CON POWERSHELL

Guardaré mis scripts en una carpeta llamada mis_scripts en una partición


adecuada. Vamos a probar con nuestro primer script.

Observación: podemos ejecutar scripts en la consola de PS, fuera de cualquier


IDE, tecleando su nombre como por ejemplo primer_script.ps1.

3.2 Tipos y operadores


El objetivo de este apartado es que puedas utilizar los tipos y los operadores
más comunes cuando realices un script en Windows PowerShell.
Tipos
Realizar un script llamado tipos.ps1 con el siguiente contenido:

ANTONIO J. LEÓN DELGADO 3


UT 01: SCRIPTING CON POWERSHELL

El tipo String es un conjunto de caracteres encerrados entre comillas dobles (o


simples), el Array es una lista de objetos separados por comas y el tipo Hash es una
tabla formada por pares de elementos (atributo=valor) separados por; (parecidos a los
diccionarios de Python). La variable $e podemos mostrarla simplemente poniendo $e
ya que Format-Table es el formato de salida por defecto. $d es una variable de tipo
boolean y $a es de tipo entera.
Para ver los tipos, hacemos lo siguiente:

Crear el script tipos2.ps1 añadiendo el método GetType() y la propiedad name.

Conversión de tipos: cast


Podemos decidir -restringir- el tipo de datos podrá almacenar una variable
imponiendo éste. Entre corchetes se pone el tipo de la variable. PowerShell intentará
hacer la conversión siempre que pueda.

Script: tipos3.ps1

¿Qué sucede?

ANTONIO J. LEÓN DELGADO 4


UT 01: SCRIPTING CON POWERSHELL

Solo falla el $d2 porque el 1 que es un string lo convierte Powershell a número y el


2014 igual. El $d2 falla al no poder PowerShell convertir el adiós en una fecha.

Operadores

Aritméticos

ANTONIO J. LEÓN DELGADO 5


UT 01: SCRIPTING CON POWERSHELL

Resultado

De asignación

ANTONIO J. LEÓN DELGADO 6


UT 01: SCRIPTING CON POWERSHELL

Resultado

De comparación

ANTONIO J. LEÓN DELGADO 7


UT 01: SCRIPTING CON POWERSHELL

Resultado

Lógicos

Resultado

ANTONIO J. LEÓN DELGADO 8


UT 01: SCRIPTING CON POWERSHELL

Observación: una disyunción exclusiva -XOR- solamente es verdadera cuando ambas


frases tienen valores diferentes y es falsa si las dos frases son ambas verdaderas o ambas
falsas. En lenguaje natural, A o B pero no ambos.

Algunos operadores sobre Strings

split convierte una cadena en un array cuyo número de elementos será el


obtenido por el carácter de separación (en el ejemplo será el carácter /) y join hace lo

ANTONIO J. LEÓN DELGADO 9


UT 01: SCRIPTING CON POWERSHELL

contrario, es decir, a partir de varios elementos obtiene una cadena separada por el
carácter especificado (en el ejemplo el carácter -).

Resultado (comprobarlo)

Más información sobre operadores

3.3 Estructuras de control


El objetivo de este apartado es que puedas utilizar las estructuras de control más
comunes de Windows PowerShell. También trata el cmdlet For-Each-Object, que se utiliza
habitualmente para iterar sobre los resultados de una canalización y en cierta forma se
comporta como una sentencia iterativa.

Estructuras de selección

ANTONIO J. LEÓN DELGADO 10


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 11


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 12


UT 01: SCRIPTING CON POWERSHELL

Estructuras de iteración

ANTONIO J. LEÓN DELGADO 13


UT 01: SCRIPTING CON POWERSHELL

Cmdlet Foreach-Object

ANTONIO J. LEÓN DELGADO 14


UT 01: SCRIPTING CON POWERSHELL

Otro ejemplo:

ANTONIO J. LEÓN DELGADO 15


UT 01: SCRIPTING CON POWERSHELL

Más información sobre condicionales y bucles:

ANTONIO J. LEÓN DELGADO 16


UT 01: SCRIPTING CON POWERSHELL

3.4 Aspectos sintácticos


Al ser Windows PowerShell un lenguaje de scripting, con una riqueza sintáctica
baja por tanto, en ocasiones sorprende cómo interpreta lo que codificas,
especialmente si utilizas habitualmente un lenguaje de programación de propósito
general. Vamos a conocer algunas de las particularidades más destacables de la
sintaxis de Windows PowerShell que lo hacen distinto a los lenguajes de programación
de propósito general.

Sentencias

ANTONIO J. LEÓN DELGADO 17


UT 01: SCRIPTING CON POWERSHELL

Comentarios

Sentencias de múltiples líneas

ANTONIO J. LEÓN DELGADO 18


UT 01: SCRIPTING CON POWERSHELL

Este ejemplo anterior nos demuestra que PS no es como un lenguaje


interpretado puro ya que, aunque el error se produce en la tercera sentencia (líneas 6
y 7), no permite la ejecución de las dos anteriores sentencias que si son correctas.

ANTONIO J. LEÓN DELGADO 19


UT 01: SCRIPTING CON POWERSHELL

Comillas dobles y simples

Acento grave

ANTONIO J. LEÓN DELGADO 20


UT 01: SCRIPTING CON POWERSHELL

Subexpresiones
Cuando PS encuentra código encerrado entre paréntesis – subexpresión -, se
evalúa antes que la sentencia que lo contiene.

ANTONIO J. LEÓN DELGADO 21


UT 01: SCRIPTING CON POWERSHELL

Más información:

3.5 Funciones
Declaración y uso

Más información sobre funciones


get-hel pabout_Functions

ANTONIO J. LEÓN DELGADO 22


UT 01: SCRIPTING CON POWERSHELL

3.6 Tipos compuestos


Arrays

ANTONIO J. LEÓN DELGADO 23


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 24


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 25


UT 01: SCRIPTING CON POWERSHELL

Tablas hash

ANTONIO J. LEÓN DELGADO 26


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 27


UT 01: SCRIPTING CON POWERSHELL

ANTONIO J. LEÓN DELGADO 28


UT 01: SCRIPTING CON POWERSHELL

3.7 Ejercicios propuestos


Sección Tipos y operadores

[int] $c1 = Read-Host "Dame un número"


[int] $c2 = Read-Host "Dame otro número"
[int]$c3 = Read-Host "Un último número"

$resul = if ($c1 -gt $c2 -and $c1 -gt $c3) {


Write-Host "El mayor es " $c1 }

elseif ($c2 -gt $c1 -and $c2 -gt $c3) {


Write-Host "El mayor es " $c2
}
else {Write-Host "El mayor es " $c3}

ANTONIO J. LEÓN DELGADO 29


UT 01: SCRIPTING CON POWERSHELL

Sección: Estructuras de control

Ejercicio 1.
Crea un script que averigüe cual es el mayor de tres números. Para ello:
Crea tres variables, asignando a cada una un número.
Con una sola sentencia "if", muestra el valor de la variable cuyo valor sea
superior al de las otras dos variables.

[int] $c1 = Read-Host "Dame un número"


[int] $c2 = Read-Host "Dame otro número"
[int]$c3 = Read-Host "Un último número"

if ($c1 -gt $c2 -and $c1 -gt $c3) {


Write-Host "El mayor es " $c1 }

elseif ($c2 -gt $c1 -and $c2 -gt $c3) {


Write-Host "El mayor es " $c2
}
else {Write-Host "El mayor es " $c3}

Ejercicio 2.
Crea un script que dado un color del arcoíris muestre su número de orden. Para
ello
Crea una variable y asígnale un color
1. Con una sentencia switch, compara el valor de la variable anterior con todos los
colores del arcoíris para averiguar su número de orden.
2. Muestra el número de orden.
3. Informa acerca de colores que no existan en el arcoíris.

switch ( $color )
{
"Lila" { $result = '1' }
"Azul_Oscuro" { $result = '2' }
"Azul_Cian" { $result = '3' }
"Verde" { $result = '4' }
"Amarillo" { $result = '5' }
"Rojo" { $result = '6' }
"Rosa" { $result = '7' }
default { "Ese color no existe" }
}

if ($result -ne 0) {
Write-Host "El número de orden del color $color es $result"

} else { Write-Host "El color $color no esta en el arcoiris" }

Ejercicio 3.
Crea un script que concatene en orden inverso una lista de strings. Para ello:
1. Crea una variable y asígnale una lista de strings (separados por comas).
2. Crea otra variable asignándole un string nulo. La utilizarás para ir construyendo
la concatenación de la lista de strings.

ANTONIO J. LEÓN DELGADO 30


UT 01: SCRIPTING CON POWERSHELL

3. Con una sentencia foreach, itera sobre el array creado en el paso anterior,
concatena el string en curso al principio del string que has ido construyendo
previamente.
4. Finalmente muestra el string.
Observación: puedes concatenar strings utilizando el operador +

$array=@("Hola","como","estas","me","llamo","fran") #Array
$result = ""

foreach($i in $array ) {
$result =$i + " " + $result

Write-Host $result

Ejercicio 4.
Crea un script que muestre las librerías de enlace dinámico (ficheros
conextensión .dll) del directorio c:\windows\system32 cuyo tamaño sea superior a 10
Mb. Para ello: utiliza el cmdlet ForEach-Object para procesar el resultado de
ejecutar.

Ejercicio 5
Realiza el ejemplo de la conectividad realizando el test en una función.

ANTONIO J. LEÓN DELGADO 31

También podría gustarte