PowerShell For Loop, ForEach y Do While/Hasta que se explique

Una de las funciones más fundamentales en la programación además de «If, Else» son los bucles.

Le permiten procesar datos o ejecutar una función hasta que se alcanza una determinada condición.

En PowerShell, podemos usar diferentes tipos de bucles For loop, ForEach, Do While y Hacer hasta.

En este artículo, vamos a echar un vistazo a las diferentes funciones de bucle que podemos usar en PowerShell, cómo usarlas y cuáles son las diferencias entre ellas.

Powershell para bucle

El For Loop en PowerShell es prácticamente el bucle más básico que puede usar. Itera un número específico de veces a través de una parte del script hasta que se cumple la condición.

Para usar el bucle For en PowerShell, deberá especificar un contador $ila condición $i -lt 5 (ejecútelo mientras $i sea menor que 5) y aumente el contador.

For ($i = 0; $i -lt 5; $i++) {
    Write-host $i 
}

También se puede aumentar el contador dentro del script. Esto le permite aumentar el contador solo cuando se cumple una condición específica en su secuencia de comandos.

For ($i = 0; $i -lt 5) {
    Write-Host $i;    
    $i++
}

También puede iterar sobre una matriz con un For Loop simple en PowerShell. Podemos tomar el longitud de la matriz como parte de la condición e iterar a través de la matriz hasta que hayamos procesado todos los elementos de la matriz.

Es más fácil usar un bucle foreach para procesar una matriz que un bucle for, más sobre eso más adelante.

$fruit = @('apple','pear','banana','lemon','lime','mango')

# -le means less or equal to
For ($i = 0; $i -le $fruit.length; $i++) {
    Write-Host $fruit[$i];    
}

PowerShell también tiene una forma abreviada que puede usar para un bucle. Puede definir un rango 1..10 eso le permite especificar cuántas veces desea ejecutar el script y simplemente canalizar el script detrás de él.

$path = "C:\temp"

1..10 | % {
    $newFile = "$path\test_file_" + $_ + ".txt";
    New-Item $newFile
}

Bucle PowerShell Foreach y ForEach-Object

Para procesar cada elemento en una matriz o colección, puede usar las funciones ForEach en PowerShell.

Hay dos tipos de funciones foreach en PowerShell, tenemos para cada y Para cada objeto.

La diferencia entre los dos es que foreach cargará toda la colección en la memoria antes de comenzar a procesar los datos, lo que ForEach-Object procesará los datos de uno en uno.

Esto hace que ForEach-Object sea perfecto para canalizar detrás de otra función.

ForEach-Object tiene dos abreviaturas que puede usar, ForEach y %. El lugar donde usa ForEach determina qué versión de las dos se usa.

$fruits = @('apple','pear','banana','lemon','lime','mango')

# Foreach - Loads all the fruits in the memory and process it
# Takes 21,4553 miliseconds
Foreach ($fruit in $fruits) {
    Write-Host $fruit;
}

#Shorthand for foreach
# Takes 14,3926 miliseconds
$fruits.foreach( {
    Write-Host $_;
}) 

# ForEach-Object 
# Takes 7,8812 miliseconds
$fruits | ForEach-Object {Write-Host $_}

# Shorthand for ForEach-Object
# Takes 7.3507 miliseconds
$fruits | ForEach {Write-Host $_}

# Also a Shorthand for ForEach-Object
# Takes 7,2982 miliseconds
$fruits | % {Write-Host $_}

Como puede ver, foreach es un poco más lento en este ejemplo, pero la razón de esto es que se tarda un poco en cargar la colección en la memoria.

Si tomamos un gran conjunto de datos, con 300.000 registros, por ejemplo, podemos ver que foreach puede ser mucho más rápido que ForEach-Object. Solo el consumo de memoria sería un poco más alto que el de foreach.

$items = 0..300000

# Takes 180 ms to complete
(Measure-Command { foreach ($i in $items) { $i } }).TotalMilliseconds

# Takes 1300 ms to complete
(Measure-Command { $items | ForEach-Object { $_ } }).TotalMilliseconds

# Takes 850 ms to complete
(Measure-Command { $items.ForEach({ $i })}).TotalMilliseconds

Cuando usa qué función realmente depende de su conjunto de datos. Si necesita procesar una gran cantidad de datos, entonces ForEach-Object sería la mejor opción para evitar problemas de memoria.

Los pequeños conjuntos de datos se pueden procesar perfectamente con ForEach.

Otra ventaja de ForEach-Object es que puede canalizar otro cmdlet detrás de él, como exportarlo a CSV, por ejemplo.

Bloques de secuencias de comandos ForEach-Object

ForEach-Object le permite usar bloques de secuencias de comandos que pueden ser realmente útiles cuando necesita registrar el proceso o limpiar cuando se completa la secuencia de comandos.

$path = "C:\temp"
$totalSize = 0

Get-ChildItem $path | ForEach-Object -Begin {
        Write-Host "Processing folder $path"
    } -Process {
        $totalSize += ($_.length / 1kb)
    } -End {
        Write-host $totalSize "Kb"
    }

Powershell hacer mientras bucle

El PowerShell Hacer mientras bucle se utiliza para ejecutar un script siempre que la condición sea verdadera o se cumpla. también tienes la Mientras bucle en PowerShell, sin la parte Do.

Son básicamente lo mismo, ambos se ejecutan hasta que se cumple una condición.

Si ejecuta los scripts a continuación, verá que ambos son excelentes 10 archivos de prueba en la carpeta temporal. Ambos funcionan mientras $i es menos de 10.

$i = 0;
$path = "C:\temp"

# Do While loop
Do {
    # Do Something
    $newFile = "$path\dowhile_test_file_" + $i + ".txt";
    New-Item $newFile
    $i++;
}
While ($i -lt 10)

# While loop
$i = 0;
While ($i -lt 10) {
    # Do Something
    $newFile = "$path\while_test_file_" + $i + ".txt";
    New-Item $newFile
    $i++;
}

Pero hay una gran diferencia entre los dos. Do While siempre se ejecutará al menos una vez, sin importar la condición que esté utilizando.

El bucle while solo se ejecutará cuando se cumpla la condición.

Tome el siguiente ejemplo, queremos ejecutar el script, siempre y cuando $i es menor que 10.

Pero hemos puesto el contador en 15 para empezar. Como verá cuando ejecute el script, Do While se ejecuta una vez, y while no se ejecuta en absoluto.

$i = 15;

Do {
    Write-host "Do While $i is less then 15";
    $i++;
}
While ($i -lt 10)

$i = 15;
while ($i -lt 10)
{
    Write-host "While $i is less then 15";
    $i++;
}

A menudo, utiliza un ciclo do-while en PowerShell cuando espera que se cumpla una condición, por ejemplo, hasta que finaliza un proceso o, como en el ejemplo a continuación, hasta que la conexión a Internet está fuera de línea.

PowerShell no continuará en la línea Write-Host hasta que se cumpla la condición while. Entonces, en este ejemplo, estamos probando la conexión a Internet con Test-Connection.

Devolverá verdadero cuando tengamos una conexión, y en caso contrario, devolverá falso.

Do {
    Write-Host "Online"
    Start-Sleep 5
}
While (Test-Connection -ComputerName 8.8.8.8 -Quiet -Count 1)

Write-Host "Offline"

Creación de un bucle de suspensión en PowerShell

Si desea crear un ciclo que verifique si un servicio está nuevamente en línea o que se cree un archivo, la mejor opción es usar una suspensión dentro de su ciclo.

Sin la parte de suspensión, el script se ejecutará lo más rápido posible, lo que puede ser un par de 1000 iteraciones por segundo o más.

Con el Inicio-Sueño cmdlet podemos iniciar un pequeño descanso antes de la siguiente iteración:

Do {
    Write-Host "Online"
    Start-Sleep 5
}
While (Test-Connection -ComputerName 8.8.8.8 -Quiet -Count 1)

Write-Host "Offline"

En el ejemplo anterior, esperamos 5 segundos antes de volver a probar la conexión a 8.8.8.8. También puede usar milisegundos en lugar de segundos en el comando de inicio y suspensión.

Start-Sleep -Miliseconds 50

PowerShell hacer hasta bucle

Do Until es prácticamente lo mismo que Do While en PowerShell. La única diferencia es la condición en la que se ejecutan.

  • hacer mientras sigue corriendo siempre y cuando la condición sea verdadera. Cuando la condición es falsa, se detendrá.
  • Hacer hasta sigue corriendo siempre que la condición sea falsa. Cuando la condición se vuelve verdadera, se detendrá.
Do {
    Write-Host "Computer offline"
    Start-Sleep 5
}
Until (Test-Connection -ComputerName 'lab01-srv' -Quiet -Count 1)

Write-Host "Computer online"

Cuándo usar Mientras o Hasta realmente depende de lo que quieras hacer. Es la base que puede decir que cuando la condición de salida debe ser verdadera, entonces use Hasta.

Si la condición de salida es negativa (falsa), entonces debe usar While.

Detener un bucle Do While/Until

En PowerShell, podemos usar Romper para detener un bucle antes de tiempo.

Es mejor limitar el uso de pausas en sus bucles porque hacen que su código sea más difícil de leer.

Si ha estructurado bien su código, entonces realmente no lo necesita.

Si necesita usar un descanso, entonces una cosa puede ser útil, puede agregar una etiqueta GoTo detrás de él.

De esta manera puede saltar a otra función de bucle.

$i=0;
Do {
    Write-Host "Computer offline"
    Start-Sleep 1
    $i++;

    if ($i -eq 2) {
        Break :TestInternetConnection
    }
}
Until (Test-Connection -ComputerName 'test' -Quiet -Count 1)

Write-Host "Computer online"

:TestInternetConnection Do{
    Write-Host "Checking internet connection"
}
Until (Test-Connection -ComputerName '8.8.8.8' -Quiet -Count 1)

Write-host "Connected"

Uso de Continuar en un bucle de PowerShell

Otro método útil que puede usar dentro de un bucle do-while/until en PowerShell es Continuar.

Con Continuar, puede detener el script dentro del cuerpo Do y continuar con la siguiente iteración del bucle.

Esto puede ser útil si tiene una secuencia de comandos grande dentro de un bloque Do y desea pasar al siguiente elemento cuando se cumple una determinada condición.

$servers = @('srv-lab01','srv-lab02','srv-lab03')

Foreach ($server in $servers) {
    
    if ((Test-Connection -ComputerName $server -Quiet -Count 1) -eq $false) {
        Write-warning "server $server offline"
        Continue
    }

    # Do stuff when server is online
}

Ejemplos de bucles de PowerShell

A continuación encontrará un par de ejemplos de bucles que pueden ayudarle a crear sus propios bucles.

Bucle infinito de PowerShell

Puede crear un bucle infinito en PowerShell con la función de bucle While. Mientras que seguirá ejecutándose mientras la condición sea verdadera. Entonces, para crear un bucle infinito, simplemente podemos hacer lo siguiente:

While ($true) {
    # Do stuff forever
    Write-Host 'looping'

    # Use Break to exit the loop
    If ($condition -eq $true) {
        Break
    }
}

Para salir del ciclo infinito puedes usar cualquiera Control + C o basado en una condición con Romper.

Bucle de Powershell a través de archivos

Para recorrer los archivos vamos a utilizar la función foreach-object. Los archivos son objetos que podemos obtener con el cmdlet get-childitem, por lo que podemos canalizar el objeto foreach detrás de él.

Otra razón para usar ForEach-Object en lugar de foreach es que no sabemos por adelantado cuántos archivos vamos a procesar.

Foreach cargará todos los datos en la memoria, lo que no queremos con un conjunto de datos desconocido.

$path = "C:\temp"
$csvItems = 0

Get-ChildItem $path | ForEach-Object {
    $_.Name;

    If ($_.Extension -eq '.csv') {
        $csvItems++;
    }
}

Write-host "Total CSV Files are $csvItems";

Si también desea incluir la subcarpeta, puede usar la opción -recurse. Use -filter para obtener solo los archivos .csv, por ejemplo.

Get-ChildItem $path -recurse -filter *.csv

Bucle a través de un archivo de texto

En PowerShell, puede recorrer un archivo de texto línea por línea. Esto puede ser realmente útil si desea leer automáticamente los archivos de registro, por ejemplo.

El siguiente ejemplo funciona bien para archivos pequeños, pero el problema es que Get-Content leerá el archivo completo en la memoria.

$lineNr = 0

foreach($line in Get-Content c:\temp\import-log.txt) {
    if($line -match 'warning'){
        # Work here
        Write-warning "Warning found on line $lineNr :"
        Write-warning $line
    }

    $lineNr++;
}

Para leer y procesar archivos más grandes con PowerShell, también puede usar el lector de archivos .Net:

foreach($line in [System.IO.File]::ReadLines("c:\temp\import-log.txt"))
{
       $line
}

Terminando

Espero que el ejemplo haya ayudado a crear los bucles For, Foreach-Object, Do While y Until de PowerShell.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Una de las funciones más fundamentales en la programación además de «If, Else» son los bucles.

Le permiten procesar datos o ejecutar una función hasta que se alcanza una determinada condición.

En PowerShell, podemos usar diferentes tipos de bucles For loop, ForEach, Do Whiley Hacer hasta.

En este artículo, vamos a echar un vistazo a las diferentes funciones de bucle que podemos usar en PowerShell, cómo usarlas y cuáles son las diferencias entre ellas.

Powershell para bucle

El For Loop en PowerShell es prácticamente el bucle más básico que puede usar. Itera un número específico de veces a través de una parte del script hasta que se cumple la condición.

Para usar el bucle For en PowerShell, deberá especificar un contador $ila condición $i -lt 5 (ejecútelo mientras $i sea menor que 5) y aumente el contador.

For ($i = 0; $i -lt 5; $i++) {
    Write-host $i 
}

También se puede aumentar el contador dentro del script. Esto le permite aumentar el contador solo cuando se cumple una condición específica en su secuencia de comandos.

For ($i = 0; $i -lt 5) {
    Write-Host $i;    
    $i++
}

También puede iterar sobre una matriz con un For Loop simple en PowerShell. Podemos tomar el longitud de la matriz como parte de la condición e iterar a través de la matriz hasta que hayamos procesado todos los elementos de la matriz.

Es más fácil usar un bucle foreach para procesar una matriz que un bucle for, más sobre eso más adelante.

$fruit = @('apple','pear','banana','lemon','lime','mango')

# -le means less or equal to
For ($i = 0; $i -le $fruit.length; $i++) {
    Write-Host $fruit[$i];    
}

PowerShell también tiene una forma abreviada que puede usar para un bucle. Puede definir un rango 1..10 eso le permite especificar cuántas veces desea ejecutar el script y simplemente canalizar el script detrás de él.

$path = "C:\temp"

1..10 | % {
    $newFile = "$path\test_file_" + $_ + ".txt";
    New-Item $newFile
}

Bucle PowerShell Foreach y ForEach-Object

Para procesar cada elemento en una matriz o colección, puede usar las funciones ForEach en PowerShell.

Hay dos tipos de funciones foreach en PowerShell, tenemos para cada y Para cada objeto.

La diferencia entre los dos es que foreach cargará toda la colección en la memoria antes de comenzar a procesar los datos, lo que ForEach-Object procesará los datos de uno en uno.

Esto hace que ForEach-Object sea perfecto para canalizar detrás de otra función.

ForEach-Object tiene dos abreviaturas que puede usar, ForEach y %. El lugar donde usa ForEach determina qué versión de las dos se usa.

$fruits = @('apple','pear','banana','lemon','lime','mango')

# Foreach - Loads all the fruits in the memory and process it
# Takes 21,4553 miliseconds
Foreach ($fruit in $fruits) {
    Write-Host $fruit;
}

#Shorthand for foreach
# Takes 14,3926 miliseconds
$fruits.foreach( {
    Write-Host $_;
}) 

# ForEach-Object 
# Takes 7,8812 miliseconds
$fruits | ForEach-Object {Write-Host $_}

# Shorthand for ForEach-Object
# Takes 7.3507 miliseconds
$fruits | ForEach {Write-Host $_}

# Also a Shorthand for ForEach-Object
# Takes 7,2982 miliseconds
$fruits | % {Write-Host $_}

Como puede ver, foreach es un poco más lento en este ejemplo, pero la razón de esto es que se tarda un poco en cargar la colección en la memoria.

Si tomamos un gran conjunto de datos, con 300.000 registros, por ejemplo, podemos ver que foreach puede ser mucho más rápido que ForEach-Object. Solo el consumo de memoria sería un poco más alto que el de foreach.

$items = 0..300000

# Takes 180 ms to complete
(Measure-Command { foreach ($i in $items) { $i } }).TotalMilliseconds

# Takes 1300 ms to complete
(Measure-Command { $items | ForEach-Object { $_ } }).TotalMilliseconds

# Takes 850 ms to complete
(Measure-Command { $items.ForEach({ $i })}).TotalMilliseconds

Cuando usa qué función realmente depende de su conjunto de datos. Si necesita procesar una gran cantidad de datos, entonces ForEach-Object sería la mejor opción para evitar problemas de memoria.

Los pequeños conjuntos de datos se pueden procesar perfectamente con ForEach.

Otra ventaja de ForEach-Object es que puede canalizar otro cmdlet detrás de él, como exportarlo a CSV, por ejemplo.

Bloques de secuencias de comandos ForEach-Object

ForEach-Object le permite usar bloques de secuencias de comandos que pueden ser realmente útiles cuando necesita registrar el proceso o limpiar cuando se completa la secuencia de comandos.

$path = "C:\temp"
$totalSize = 0

Get-ChildItem $path | ForEach-Object -Begin {
        Write-Host "Processing folder $path"
    } -Process {
        $totalSize += ($_.length / 1kb)
    } -End {
        Write-host $totalSize "Kb"
    }

Powershell hacer mientras bucle

El PowerShell Hacer mientras bucle se utiliza para ejecutar un script siempre que la condición sea verdadera o se cumpla. también tienes la Mientras bucle en PowerShell, sin la parte Do. Son básicamente lo mismo, ambos se ejecutan hasta que se cumple una condición.

Si ejecuta los scripts a continuación, verá que ambos son excelentes 10 archivos de prueba en la carpeta temporal. Ambos funcionan mientras $i es menos de 10.

$i = 0;
$path = "C:\temp"

# Do While loop
Do {
    # Do Something
    $newFile = "$path\dowhile_test_file_" + $i + ".txt";
    New-Item $newFile
    $i++;
}
While ($i -lt 10)

# While loop
$i = 0;
While ($i -lt 10) {
    # Do Something
    $newFile = "$path\while_test_file_" + $i + ".txt";
    New-Item $newFile
    $i++;
}

Pero hay una gran diferencia entre los dos. Do While siempre se ejecutará al menos una vez, sin importar la condición que esté utilizando.

El bucle while solo se ejecutará cuando se cumpla la condición.

Tome el siguiente ejemplo, queremos ejecutar el script, siempre y cuando $i es menor que 10.

Pero hemos puesto el contador en 15 para empezar. Como verá cuando ejecute el script, Do While se ejecuta una vez, y while no se ejecuta en absoluto.

$i = 15;

Do {
    Write-host "Do While $i is less then 15";
    $i++;
}
While ($i -lt 10)

$i = 15;
while ($i -lt 10)
{
    Write-host "While $i is less then 15";
    $i++;
}

A menudo, utiliza un ciclo do-while en PowerShell cuando espera que se cumpla una condición, por ejemplo, hasta que finaliza un proceso o, como en el ejemplo a continuación, hasta que la conexión a Internet está fuera de línea.

PowerShell no continuará en la línea Write-Host hasta que se cumpla la condición while. Entonces, en este ejemplo, estamos probando la conexión a Internet con Test-Connection.

Devolverá verdadero cuando tengamos una conexión, y en caso contrario, devolverá falso.

Do {
    Write-Host "Online"
    Start-Sleep 5
}
While (Test-Connection -ComputerName 8.8.8.8 -Quiet -Count 1)

Write-Host "Offline"

Creación de un bucle de suspensión en PowerShell

Si desea crear un ciclo que verifique si un servicio está nuevamente en línea o que se cree un archivo, la mejor opción es usar una suspensión dentro de su ciclo.

Sin la parte de suspensión, el script se ejecutará lo más rápido posible, lo que puede ser un par de 1000 iteraciones por segundo o más.

Con el Inicio-Sueño cmdlet podemos iniciar un pequeño descanso antes de la siguiente iteración:

Do {
    Write-Host "Online"
    Start-Sleep 5
}
While (Test-Connection -ComputerName 8.8.8.8 -Quiet -Count 1)

Write-Host "Offline"

En el ejemplo anterior, esperamos 5 segundos antes de volver a probar la conexión a 8.8.8.8. También puede usar milisegundos en lugar de segundos en el comando de inicio y suspensión.

Start-Sleep -Miliseconds 50

PowerShell hacer hasta bucle

Do Until es prácticamente lo mismo que Do While en PowerShell. La única diferencia es la condición en la que se ejecutan.

  • hacer mientras sigue corriendo siempre y cuando la condición sea verdadera. Cuando la condición es falsa, se detendrá.
  • Hacer hasta sigue corriendo siempre que la condición sea falsa. Cuando la condición se vuelve verdadera, se detendrá.
Do {
    Write-Host "Computer offline"
    Start-Sleep 5
}
Until (Test-Connection -ComputerName 'lab01-srv' -Quiet -Count 1)

Write-Host "Computer online"

Cuándo usar Mientras o Hasta realmente depende de lo que quieras hacer. Es la base que puede decir que cuando la condición de salida debe ser verdadera, entonces use Hasta.

Si la condición de salida es negativa (falsa), entonces debe usar While.

Detener un bucle Do While/Until

En PowerShell, podemos usar Romper para detener un bucle antes de tiempo.

Es mejor limitar el uso de pausas en sus bucles porque hacen que su código sea más difícil de leer. Si ha estructurado bien su código, entonces realmente no lo necesita.

Si necesita usar un descanso, entonces una cosa puede ser útil, puede agregar una etiqueta GoTo detrás de él. De esta manera puede saltar a otra función de bucle.

$i=0;
Do {
    Write-Host "Computer offline"
    Start-Sleep 1
    $i++;

    if ($i -eq 2) {
        Break :TestInternetConnection
    }
}
Until (Test-Connection -ComputerName 'test' -Quiet -Count 1)

Write-Host "Computer online"

:TestInternetConnection Do{
    Write-Host "Checking internet connection"
}
Until (Test-Connection -ComputerName '8.8.8.8' -Quiet -Count 1)

Write-host "Connected"

Uso de Continuar en un bucle de PowerShell

Otro método útil que puede usar dentro de un bucle do-while/until en PowerShell es Continuar. Con Continuar, puede detener el script dentro del cuerpo Do y continuar con la siguiente iteración del bucle.

Esto puede ser útil si tiene una secuencia de comandos grande dentro de un bloque Do y desea pasar al siguiente elemento cuando se cumple una determinada condición.

$servers = @('srv-lab01','srv-lab02','srv-lab03')

Foreach ($server in $servers) {
    
    if ((Test-Connection -ComputerName $server -Quiet -Count 1) -eq $false) {
        Write-warning "server $server offline"
        Continue
    }

    # Do stuff when server is online
}

Ejemplos de bucles de PowerShell

A continuación encontrará un par de ejemplos de bucles que pueden ayudarle a crear sus propios bucles.

Bucle infinito de PowerShell

Puede crear un bucle infinito en PowerShell con la función de bucle While. Mientras que seguirá ejecutándose mientras la condición sea verdadera. Entonces, para crear un bucle infinito, simplemente podemos hacer lo siguiente:

While ($true) {
    # Do stuff forever
    Write-Host 'looping'

    # Use Break to exit the loop
    If ($condition -eq $true) {
        Break
    }
}

Para salir del ciclo infinito puedes usar cualquiera Control + C o basado en una condición con Romper.

Bucle de Powershell a través de archivos

Para recorrer los archivos vamos a utilizar la función foreach-object. Los archivos son objetos que podemos obtener con el cmdlet get-childitem, por lo que podemos canalizar el objeto foreach detrás de él. Otra razón para usar ForEach-Object en lugar de foreach es que no sabemos por adelantado cuántos archivos vamos a procesar.

Foreach cargará todos los datos en la memoria, lo que no queremos con un conjunto de datos desconocido.

$path = "C:\temp"
$csvItems = 0

Get-ChildItem $path | ForEach-Object {
    $_.Name;

    If ($_.Extension -eq '.csv') {
        $csvItems++;
    }
}

Write-host "Total CSV Files are $csvItems";

Si también desea incluir la subcarpeta, puede usar la opción -recurse. Use -filter para obtener solo los archivos .csv, por ejemplo.

Get-ChildItem $path -recurse -filter *.csv

Bucle a través de un archivo de texto

En PowerShell, puede recorrer un archivo de texto línea por línea. Esto puede ser realmente útil si desea leer automáticamente los archivos de registro, por ejemplo.

El siguiente ejemplo funciona bien para archivos pequeños, pero el problema es que Get-Content leerá el archivo completo en la memoria.

$lineNr = 0

foreach($line in Get-Content c:\temp\import-log.txt) {
    if($line -match 'warning'){
        # Work here
        Write-warning "Warning found on line $lineNr :"
        Write-warning $line
    }

    $lineNr++;
}

Para leer y procesar archivos más grandes con PowerShell, también puede usar el lector de archivos .Net:

foreach($line in [System.IO.File]::ReadLines("c:\temp\import-log.txt"))
{
       $line
}

Terminando

Espero que el ejemplo haya ayudado a crear los bucles For, Foreach-Object, Do While y Until de PowerShell.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

Cómo usar PowerShell Reemplazar para reemplazar una cadena o un carácter

Cómo usar PowerShell Reemplazar para reemplazar una cadena o un carácter

¿Necesita reemplazar una cadena o un carácter en PowerShell? ¿O desea insertar bloques de texto completos en un archivo? Entonces ...
Leer Más
PSDrive - Cómo usar la alternativa PowerShell Net Use

PSDrive – Cómo usar la alternativa PowerShell Net Use

Todos conocemos el comando Net Use que podemos usar para mapear unidades de red desde la línea de comandos. Aunque ...
Leer Más
Encuentra direcciones de correo electrónico en Office 365 con PowerShell

Encuentra direcciones de correo electrónico en Office 365 con PowerShell

A veces necesita encontrar el usuario o un buzón que está usando una dirección de correo electrónico en particular. En ...
Leer Más
Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

Get-ADComputer- Cómo encontrar y exportar computadoras AD PowerShell

¿Necesita exportar todas las computadoras desde una unidad organizativa o buscar una computadora en su Active Directory? ¿O quieres contar ...
Leer Más
Cómo crear un perfil de PowerShell

Cómo crear un perfil de PowerShell

¿Quiere sacar más partido a su PowerShell? Luego, asegúrese de configurar su perfil de PowerShell para mejorar su consola de ...
Leer Más
Buzón: cambie la configuración del buzón con PowerShell

Buzón: cambie la configuración del buzón con PowerShell

El cmdlet Set-Mailbox en PowerShell nos permite cambiar la configuración del buzón en Exchange Server y Exchange Online. Podemos usar ...
Leer Más

Deja un comentario