¿Cómo usar cada bucle en PowerShell?

Como otros lenguajes de programación, PowerShell tiene el concepto de bucles. El bucle (ciclo) permite ejecutar varias veces un cierto conjunto de comandos.

El bucle ForEach permite iterar sobre los valores del array. Su tarea es realizar ciertas acciones para todos los elementos del array. A diferencia del regular para , se usa para iterar sobre los objetos de una matriz.

Pista . Les recordamos que PowerShell es un lenguaje de programación orientado a objetos.

El bucle ForEach tiene la siguiente sintaxis:

ForEach ($item in $array){
Scriptblock
}

La variable $item dentro del bucle apunta al elemento actual del $array.

Por ejemplo, crear una simple matriz y usar el bucle foreach para listar todos sus valores:

$PCs = "PCName1", "PCName2", "PCName3"
foreach ($PC en $PCs)
{
anfitrión de la escritura $PC
}

En algunos lenguajes de programación, el procesamiento para procesar tal conjunto debe realizar 2 pasos. Primero, necesitas obtener la longitud del array, y luego realizar una acción para cada elemento. En PowerShell, todo es más simple. No necesitas calcular el número de elementos en el array. Simplemente pasa secuencialmente por todos los elementos.

Ahora trata de obtener una lista de archivos en un directorio específico. Ahora, usando el bucle ForEach, muestra los nombres de los archivos y la fecha de creación de cada uno de ellos:

$Files = (Get-ChildItem "C:PS*")
foreach ($Archivo en $Archivos) {
write-host $Archivo.nombre $Archivo.tiempo de creación
}

Como puedes ver, dentro del bucle ForEach puedes acceder a todas las propiedades y métodos de cada objeto de la matriz.

LEER TAMBIÉN la Guía para la copia de seguridad del registro de transacciones del servidor SQL

Consideremos otro ejemplo de uso de un bucle de For-Each en AD. Por ejemplo, es necesario copiar un archivo específico a todos los ordenadores de Denver (se supone que todos los ordenadores unidos al dominio del Directorio Activo y situados en la misma Unidad Organizativa ):

# Obtener una lista de los ordenadores activos de AD en OU Denver
$ADComps = Get-ADComputer -Filtro {activado -eq "true"}
# Ahora, usando el bucle ForEach, copie el archivo de la carpeta compartida de la red al directorio raíz (C: drive) de cada computadora
$SourceFile= "denv-fs01docdistrmy.cfg"
foreach ($computadora en $ADComps)
{
Nombre de pila = Nombre de la computadora.
$TargetPath = "$HostnameC$"
Copy-Item $SourceFile $TargetPath -Force
}

Obsérvese que hay un cmdlet para cada objeto (con el alias para cada uno ), y un bucle para cada uno . Esto puede ser engañoso. El comando ForEach-Object se usa más a menudo en tuberías. El bucle ForEach no se puede usar en la tubería.

Por ejemplo, el comando ForEach-Object:

Get-Service | ForEach-Object {$PSitem.Name}

O, usando un alias:

Get-Service | ForEach {$PSitem.Name}

Y ahora el bucle de ForEach:

$servicios= Obtener-Servicio
Para cada uno ($servicio en $servicios) {
write-host $service.displayname
}

El PowerShell entiende por una sintaxis de construcción general cuándo usar el cmdlet de ForEach y cuándo usar un bucle.

Una de las diferencias entre el bucle de la foreach y el cmdlet de la foreach es la capacidad de utilizar operadores de continuar y de romper .

La declaración de continuar le permite saltar la ejecución de la parte restante de un y pasar inmediatamente al siguiente elemento de la matriz.

LEER TAMBIÉN Lo básico de PowerShell DSC (Configuración de Estado Deseado)

La sentencia break detiene completamente la enumeración de elementos en un bucle. Se utiliza, buscamos un valor específico y hay que salir del bucle cuando se encuentra:

$num=0
$computadoras = $0027PC1$0027,$0027PC2$0027,$0027Servidor1$0027,$0027PC3$0027.
foreach ($computadora en $computadoras) {
 si ($computadora -como $0027*Servidor*$0027) {
break
}
$num++
}
$num

En este ejemplo, el bucle se detuvo en los terceros elementos.

Tres variables especiales están disponibles en el bucle ForEach::

  • $foreach.MoveNext() – ir al siguiente elemento;
  • $foreach.current – puntero del artículo actual;
  • $foreach.reset() – reinicia la iteración. La iteración comenzará de nuevo, llevando a un bucle sin fin.

Cada bucle de PowerShell tiene un alcance muy grande. Esto ayuda en la administración de servidores, en la gestión de servicios, procesos y archivos, en las operaciones con objetos de Active Directory, etc.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.