Saltar al contenido

Conceptos básicos de PowerShell: programación con bucles

    1651882981

    En este tutorial de PowerShell, le mostramos cómo usar el bucle For, el bucle ForEach-Object y los bucles While, Do-While y Do-Until.

    Los bucles de PowerShell, en su forma más básica, simplemente repiten el mismo conjunto de comandos una cantidad determinada de veces. Ideal para realizar acciones consistentes durante un período de tiempo determinado o una cierta cantidad de registros, los bucles pueden simplificar sus scripts en gran medida. PowerShell, en particular, presenta una serie de cmdlets, en particular los que comienzan con el verbo Obtener, que devuelven objetos que contienen una gran cantidad de datos similares.

    Hay varios tipos de bucles disponibles en PowerShell y, en muchos casos, se puede usar más de una técnica de bucle de forma eficaz. A veces es necesario determinar el tipo de bucle más eficiente, ya sea desde una perspectiva de rendimiento o de legibilidad del código.

    Bucle ForEach-Object

    En muchos casos, usar el cmdlet ForEach-Object (anteriormente discutido en nuestro artículo sobre cómo trabajar con objetos de PowerShell) es la mejor manera de recorrer un objeto. En su forma más simple, ForEach-Object requiere solo un objeto para recorrer y un bloque de script que contiene los comandos que se ejecutarán en cada miembro del objeto.

    Estos parámetros se pueden especificar mediante los nombres de parámetro -InputObject y -Process, o canalizando el objeto al cmdlet ForEach-Object y colocando el bloque de script como el primer parámetro. Para ilustrar esta sintaxis básica, el siguiente ejemplo muestra dos métodos de uso de ForEach-Object para recorrer el contenido de la carpeta Documentos de un usuario:

    $myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File $myDocuments | ForEach-Object {$_.FullName} ForEach-Object -InputObject $myDocuments -Process {$_.FullName}

    En ciertos escenarios, puede ser beneficioso realizar una o más acciones justo antes o justo después de que se realice el bucle. Los parámetros -Begin y -End se pueden usar para definir bloques de script para ejecutar justo antes o después del contenido del bloque de script -Process. Esto se puede usar para establecer o modificar una variable antes o después de la ejecución del bucle.

    ForEach-Object tiene dos alias, ForEach y %, y también admite la sintaxis abreviada a partir de PowerShell 3.0. Los siguientes tres ejemplos son idénticos en función.

    Obtener WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | % Espacio libre

    PowerShell para bucle

    Los bucles for se utilizan normalmente para iterar a través de un conjunto de comandos una cantidad específica de veces, ya sea para recorrer una matriz u objeto, o simplemente para repetir el mismo bloque de código según sea necesario. Un ciclo For se construye estableciendo el valor de una variable al ingresar al ciclo, la condición en la que se debe terminar el ciclo y una acción que se realizará contra esa variable cada vez que se complete el ciclo.

    El siguiente ejemplo muestra un bucle For básico utilizado para crear una tabla de multiplicar:

    For ($i=0; $i -le 10; $i++) { «10 * $i = » + (10 * $i) }

    Los bucles for se pueden usar para recorrer los valores de la matriz estableciendo el valor inicial en el índice inicial de la matriz y aumentando gradualmente el valor hasta alcanzar la longitud de la matriz. El índice de la matriz se especifica colocando la variable incrementada entre corchetes inmediatamente después del nombre de la variable, como se muestra en el siguiente ejemplo:

    $colores = @(«Rojo»,»Naranja»,»Amarillo»,»Verde»,»Azul»,»Añil»,»Violeta») For ($i=0; $i -lt $colores.Longitud; $ i++) { $colores[$i] }

    Ciclos while, Do-While y Do-Until

    Un tercer tipo de bucle que admite PowerShell implica establecer una condición que permite que el bucle se procese siempre que la condición sea verdadera o hasta que se cumpla. Los bucles while y Do-While se usan para realizar una acción mientras la condición se evalúa como $true y difieren solo en su sintaxis. Los bucles Do-Until tienen una sintaxis similar a Do-While, pero dejan de procesarse una vez que se cumple la declaración de condición.

    Los bucles Do-While y Do-Until comienzan con la palabra clave Do antes de un bloque de script, seguida de la palabra clave de condición (While o Until) y la condición. Como ejemplo, los siguientes dos bucles funcionan de manera idéntica, solo que se invierte la condición:

    $i=1 Hacer { $i $i++ } Mientras ($i -le 10)$i=1 Hacer { $i $i++ } Hasta ($i -gt 10)

    Mientras que los bucles funcionan de forma idéntica a los bucles Do-While, solo se modifica ligeramente la sintaxis. Los bucles while usan solo la palabra clave While, seguida de la condición y, finalmente, el bloque de secuencia de comandos. Este bucle tiene una función idéntica a los ejemplos anteriores y utiliza la misma condición que el bucle Do-While:

    $i=1 Mientras ($i -le 10) { $i $i++ }

    Cualquiera de estos tres tipos de bucle (bucles Do-While, Do-Until y While) también se puede utilizar para crear un bucle indefinidamente; Mientras y Do-While se repiten con la condición establecida en $true y Do-Until con la condición establecida en $false.

    En algunas situaciones, es posible que deba salir de un bucle antes de tiempo en función de algo que no sea la condición de los bucles. En este caso, se puede invocar la palabra clave Break para salir del bucle. Este ejemplo final muestra la misma funcionalidad, pero usa un bucle infinito y la palabra clave Break para salir en el momento adecuado:

    $i=1 Mientras ($verdadero) { $i $i++ si ($i -gt 10) { Descanso } }

    RELACIONADA:

    Operadores de comparación de PowerShell y lógica condicional
    PowerShell: uso de variables, matrices y tablas hash
    Conceptos básicos de PowerShell: administración de archivos y carpetas

    0 0 votes
    Rating post
    Subscribe
    Notify of
    guest
    0 comments
    Inline Feedbacks
    View all comments
    0
    Would love your thoughts, please comment.x
    ()
    x