Mi Blog
Cómo hacer bucles en Powershell

Cómo hacer bucles en Powershell

(3 votos)

Los Bucles en Powershell son igual de sencillos que en los demás lenguajes de programación. Powershell es mucho más avanzado y potente que el conocido CMD de Windows. Aunque la sintaxis de Powershell digamos "no es muy amigable", muchas cosas guardan similitudes con otros lenguajes de programación.

Seguid leyendo y os enseñaré a utilizar de forma sencilla y con ejemplos los bucles en Powershell...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ ES POWERSHELL?

PowerShell es una solución de automatización de tareas multiplataforma formada por un shell de línea de comandos, un lenguaje de scripting y un marco de administración de configuración. PowerShell funciona en Windows 10, Linux y macOS.

Shell
PowerShell es un shell de comandos moderno que incluye las mejores características de otros shells populares. A diferencia de la mayoría de los shells que solo aceptan y devuelven texto, PowerShell acepta y devuelve objetos .NET. El shell incluye las siguientes características:

  • Un historial de línea de comandos sólido.
  • Finalización con tabulación y predicción de comandos.
  • Admite alias de comando y parámetro.
  • Canalización para encadenar comandos.
  • Sistema de ayuda en la consola, similar a las páginas man de UNIX.

 

 

Lenguaje de scripting
Como lenguaje de scripting, PowerShell se usa normalmente para automatizar la administración de sistemas. También se usa para compilar, probar e implementar soluciones, a menudo en entornos de CI/CD. PowerShell se basa en .NET Common Language Runtime (CLR). Todas las entradas y salidas son objetos de .NET. No es necesario analizar la salida de texto para extraer información de la salida. El lenguaje de scripting de PowerShell incluye las siguientes características:

  • Extensible mediante funciones, clases, scripts y módulos.
  • Sistema de formato extensible para una salida fácil.
  • Sistema de tipos extensible para crear tipos dinámicos.
  • Compatibilidad integrada con formatos de datos comunes, como CSV, JSON y XML.

 

 

Administración de configuración
Desired State Configuration (DSC) de PowerShell es un marco de administración en PowerShell que permite administrar la infraestructura empresarial con configuración como código. Con DSC, puede:

  • Crear configuraciones declarativas y scripts personalizados para implementaciones repetibles.
  • Aplicar valores de configuración e informar sobre el desplazamiento de configuración.
  • Implementar la configuración mediante los modelos de inserción o extracción.

Existen básicamente 4 tipos de bucles en Powershell: while, do/while, do/until, y for. También hay estructuras similares que explicaremos al final del artículo.

 

Logo Powershell

 

 

Powershell permite automatizar, administrar y configurar sistemas Windows

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con Windows y Powershell

 

 

2.- BUCLES WHILE

El primer bucle que vamos a ver es el bucle while y es muy sencillo de entender. El concepto de este bucle es: Mientras se cumpla una condición dada, se ejecutarán X comandos. Y la sintaxis es la siguiente:

Sintaxis:

while (<condition>){<statement list>}

 

 

Loops PowershellBucle While

 

 

En el siguiente ejemplo, lo que haremos será: crear una variable llamada $counter, que tomará un valor inicial de 0, y se irá incrementando el valor en +1 hasta que valga $counter=5. Cuando la variable $counter valga 5, el programa finalizará:

$counter = 0

while ($counter -lt 5) {
$counter += 1
Write-Host "El valor de `$counter` es -> $counter"
}

 

 

La salida del código anterior es la siguiente:

El valor de $counter es -> 1
El valor de $counter es -> 2
El valor de $counter es -> 3
El valor de $counter es -> 4
El valor de $counter es -> 5

 

 

3.- BUCLES DO-WHILE y DO-UNTIL

El bucle do-while lo que hace es: Ejecutar X comandos MIENTRAS que se cumpla una condición dada. La diferencia con el while es que con do-while se ejecuta al menos una vez la parte del "do". La sintaxis es la siguiente:

Sintaxis do-while:

do {<statement list>} while (<condition>)

 

 

El bucle do-until lo que hace es: Ejecutar X comandos HASTA que se cumpla una condición dada. La diferencia con el while es que con do-until se ejecuta al menos una vez la parte del "do". La sintaxis es la siguiente:

Sintaxis do-until:

do {<statement list>} until (<condition>)

 

 

Loops PowershellBucles Do-While y Do-Until

 

 

En el siguiente ejemplo, mostraremos un mensaje en cada línea mientras que la variable $counter sea menor o igual a 10:

$counter = 0

do {
$counter += 1
Write-Host "La memoria RAM se mide en Gigas. Por ejemplo: $counter GB"
} while ($counter -lt 10)

 

 

La ejecución del script Powershell muestra el siguiente resultado:

La memoria RAM se mide en Gigas. Por ejemplo: 0 GB
La memoria RAM se mide en Gigas. Por ejemplo: 1 GB
La memoria RAM se mide en Gigas. Por ejemplo: 2 GB
La memoria RAM se mide en Gigas. Por ejemplo: 3 GB
La memoria RAM se mide en Gigas. Por ejemplo: 4 GB
La memoria RAM se mide en Gigas. Por ejemplo: 5 GB
La memoria RAM se mide en Gigas. Por ejemplo: 6 GB
La memoria RAM se mide en Gigas. Por ejemplo: 7 GB
La memoria RAM se mide en Gigas. Por ejemplo: 8 GB
La memoria RAM se mide en Gigas. Por ejemplo: 9 GB

 

 

En el siguiente ejemplo, mostraremos un mensaje en cada línea hasta que la variable $counter supere el valor de 4:

$counter = 0

do {
$counter += 1
Write-Host "El contador de cartas vale: $counter"
} until ($counter -gt 4)

 

 

La ejecución del script Powershell muestra el siguiente resultado:

El contador de cartas vale: 1
El contador de cartas vale: 2
El contador de cartas vale: 3
El contador de cartas vale: 4
El contador de cartas vale: 5

 

 

4.- BUCLES FOR

El bucle for es un poco diferente a los bucles while vistos anteriormente. Lo que hace un bucle for es, para cada uno de los valores ó elementos que le pasemos al bucle, ejecutaremos N comandos. 

Sintaxis:

for (<Init>; <Condition>; <Repeat>)
{
<Statement list>
}

 

 

Loops PowershellBucle For

 

 

En el siguiente ejemplo, recorreremos todos los elementos dentro de $directory_list utilizando el bucle for. El bucle finaliza cuando la variable $i = longitud del array.

$directory_list = Get-ChildItem c:/Users/raul/Desktop/ -directory

for ($i=0; $i -lt $directory_list.Length; $i++) {
Write-Host "El nombre del directorio es:" $directory_list[$i].Name
}

 

 

La salida de la ejecución del código anterior es la siguiente:

El nombre del directorio es: fotos
El nombre del directorio es: calibre
El nombre del directorio es: software
El nombre del directorio es: netbeans
El nombre del directorio es: js
El nombre del directorio es: seo

 

 

5.- FOREACH

Foreach es un caso especial. La instrucción (aunque no es una estructura tomo tal) es una construcción para recorrer Foreach en iteración una serie de valores de una Foreach colección de elementos. El tipo de colección más sencillo y típico que se va a recorrer es una matriz o array. Dentro de Foreach un bucle, es habitual ejecutar uno o varios comandos en cada elemento de una matriz o array.

Sintaxis:

foreach ($<item> in $<collection>){<statement list>}

 

 

En el siguiente ejemplo se puede ver como creamos un array $carArray con varios elementos. Con foreach se recorren todos los elementos del array y se ejecuta X comandos. Por ejemplo:

$carArray = "Ford","Ferrari","BMW","Fiat"
foreach ($car in $carArray)
{
Write-Host "Coche:" $car
}

 

 

Y aquí la salida del código Powershell anterior:

Coche: Ford
Coche: Ferrari
Coche: BMW
Coche: Fiat

 

 

6.- BREAK Y CONTINUE

Aunque no son realmente ningún tipo de bucle, break y continue se suelen utilizar dentro de los bucles vistos anteriormente para obligar al bucle a seguir o salirse de la ejecución. En el siguiente ejemplo, el bucle for termina cuando $myArray[$i] es 19, y entonces devuelve el valor solamente de los primeros 10 elementos del array:

$myArray = 10..50
for($i=0;$i -lt $myArray.Length; $i++){
Write-Host "El valor de `$myArray[$i]` es:" $myArray[$i]
if($myArray[$i] -eq 19){
break
}
}

 

 

La salida del código anterior es la siguiente:

El valor de $myArray[0] es: 10
El valor de $myArray[1] es: 11
El valor de $myArray[2] es: 12
El valor de $myArray[3] es: 13
El valor de $myArray[4] es: 14
El valor de $myArray[5] es: 15
El valor de $myArray[6] es: 16
El valor de $myArray[7] es: 17
El valor de $myArray[8] es: 18
El valor de $myArray[9] es: 19

 

 

En este otro ejemplo, haremos lo mismo pero usando continue. El siguiente ejemplo muestra un bucle while que tiene una sentencia continue que se ejecuta cuando el valor de $counter menor o igual a 10 menos cuando es igual a 5..

$counter = 0

while ($counter -lt 10)
{
$counter += 1
if ($counter -eq 5)
{
continue
}

Write-Host -Object $counter
}

 

 

La salida de la ejecución del código anterior, es la siguiente:

1
2
3
4
6
7
8
9
10

 

 

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!