# Ciclos

## Comando ForEach-Object

Foreach-Object es un comando para procesar flujos de datos.

Foreach-Object se utiliza para el procesamiento línea por línea de elementos a medida que llegan al flujo de entrada:

```powershell
ForEach-Object -InputObject (Get-Process) -Process { $_ }
```

```powershell
Get-Process | ForEach-Object { $_.Name }
Get-Process | % { $_.Name }                          # % — alias de ForEach-Object
Get-Process | foreach { $_.Name }                    # alias de la palabra clave foreach
```

Los operadores `break` y `continue` no funcionan con ForEach-Object, ya que no es un ciclo en el sentido habitual, sino un procesamiento de objetos a través de un pipeline.

## Ciclo Foreach

El ciclo Foreach es un ciclo para procesar colecciones.

El ciclo `foreach` itera sobre una colección:

```powershell
foreach ($item in $array) {
  # acciones con $item
}
```

El operador `continue` omite el resto de la iteración actual y pasa a la siguiente.

El operador `break` interrumpe completamente el ciclo.

Para salir de ciclos anidados se puede utilizar una etiqueta:

```powershell
:outer foreach ($i in $array1) {
  foreach ($j in $array2) {
    if (<condición>) { break outer }
  }
}
```

## Método ForEach

El método ForEach() en PowerShell es un método de colecciones (por ejemplo, arreglos, listas) que permite ejecutar un script o acción especificada para cada elemento de la colección. Se invoca en el objeto de la colección, acepta un bloque de script y lo aplica secuencialmente a todos los elementos, pasando el elemento actual a una variable especial $PSItem (similar a $\_ en pipelines).

```powershell
$collection.ForEach({ 
    # Aquí $PSItem es el elemento actual de la colección
    Write-Output $PSItem 
})
```

Este método es conveniente cuando se necesita realizar una acción para los elementos de la colección sin usar un ciclo foreach o el comando ForEach-Object.

## Ciclo For

El ciclo For es un ciclo iterativo clásico.

La sintaxis es similar a los lenguajes de tipo C:

```powershell
for (inicialización; condición; acción) {
  # cuerpo del ciclo
}
```

Ejemplo:

```powershell
for ($i = 1; $i -le 10; $i++) {
  Write-Host $i
}
```

El operador `continue` omite el resto de la iteración actual y pasa a la siguiente.

El operador `break` interrumpe completamente el ciclo.

## Ciclos While y Do-While

El ciclo While es un ciclo con condición previa. While primero verifica la condición, luego ejecuta el cuerpo:

```powershell
while ($a -le 10) {
  $a++
}
```

El ciclo Do-While es un ciclo con condición posterior. Do-While primero ejecuta el cuerpo, luego verifica la condición:

```powershell
do {
  $i++
} while ($i -le 10)
```

La ejecución se repite mientras la condición sea verdadera.

El operador `continue` omite el resto de la iteración actual y pasa a la siguiente.

El operador `break` interrumpe completamente el ciclo.

## Ciclo Do-Until

El ciclo Do-Until ejecuta el cuerpo y luego verifica la condición para **falsedad**:

```powershell
do {
  $i++
} until ($i -le 10)
```

Repite el cuerpo mientras la condición **NO se cumple**.

El operador `continue` omite el resto de la iteración actual y pasa a la siguiente.

El operador `break` interrumpe completamente el ciclo.

## Trabajo con ciclos

Se pueden consultar ejemplos de uso en el siguiente enlace:

{% embed url="<https://fixmypc.ru/post/kak-rabotat-s-tsiklami-v-powershell-foreach-object-i-while-na-primerakh/>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/es/sherpa-rpa/sherpa-designer/sherpa-designer-otvety-na-chasto-zadavaemye-voprosy/powershell/cikly.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
