PowerShellBucles


Introducción

Un bucle es una secuencia de instrucción (es) que se repite continuamente hasta que se alcanza una determinada condición. Ser capaz de hacer que su programa ejecute repetidamente un bloque de código es una de las tareas más básicas pero útiles en la programación. Un bucle le permite escribir una declaración muy simple para producir un resultado significativamente mayor simplemente por repetición. Si se ha alcanzado la condición, la siguiente instrucción "cae" a la siguiente instrucción secuencial o se ramifica fuera del bucle.

Sintaxis

  • para (<Initialization>; <Condition>; <Repetition>) {<Script_Block>}

  • <Coleccion> | Foreach-Object {<Script_Block_with _ $ __ as_current_item>}

  • foreach (<Item> en <Collection>) {<Script_Block>}

  • while (<Condición>) {<Script_Block>}

  • do {<Script_Block>} while (<Condition>)

  • do {<Script_Block>} hasta (<Condition>)

  • <Collection> .foreach ({<Script_Block_with _ $ __ as_current_item>})

Observaciones

Para cada

Hay varias formas de ejecutar un bucle foreach en PowerShell y todas aportan sus propias ventajas y desventajas:

Solución Ventajas Desventajas
Declaración de foreach Lo más rápido. Funciona mejor con colecciones estáticas (almacenadas en una variable). Sin entrada o salida de tubería
Método ForEach () La misma sintaxis de scriptblock que Foreach-Object , pero más rápida. Funciona mejor con colecciones estáticas (almacenadas en una variable). Soporta salida de tubería. No hay soporte para entrada de tubería. Requiere PowerShell 4.0 o superior
Foreach-Object (cmdlet) Soporta entrada y salida de ductos. Admite bloques de script de inicio y fin para la inicialización y cierre de conexiones, etc. La solución más flexible. El más lento

Actuación

$foreach = Measure-Command { foreach ($i in (1..1000000)) { $i * $i } }
$foreachmethod = Measure-Command { (1..1000000).ForEach{ $_ * $_ } }
$foreachobject = Measure-Command { (1..1000000) | ForEach-Object { $_ * $_ } }

"Foreach: $($foreach.TotalSeconds)"
"Foreach method: $($foreachmethod.TotalSeconds)"
"ForEach-Object: $($foreachobject.TotalSeconds)"

Example output:

Foreach: 1.9039875
Foreach method: 4.7559563
ForEach-Object: 10.7543821

Si bien Foreach-Object es el más lento, su compatibilidad con tuberías puede ser útil, ya que le permite procesar los elementos a medida que llegan (al leer un archivo, recibir datos, etc.). Esto puede ser muy útil cuando se trabaja con big data y poca memoria, ya que no es necesario cargar todos los datos en la memoria antes de procesar.

Bucles Ejemplos relacionados