Entendiendo el bucle ForEach de PowerShell y ForEach-Object

En el lenguaje de scripting de Microsoft PowerShell, los cmdlets se utilizan para realizar tres operaciones: recoger información, establecer información y eliminar información. Además de los cmdlets, PowerShell también proporciona la capacidad de procesar información más de una vez. Hay dos funciones de PowerShell incorporadas que la mayoría de los administradores de PowerShell utilizan. Son el bucle ForEach y el objeto ForEach. El bucle ForEach de PowerShell le permite iterar a través de un conjunto de elementos recogidos en una variable de PowerShell. Por ejemplo, utilizando el cmdlet de PowerShell Get-ADUser puede recopilar información de usuarios de Active Directory. Si necesita mirar la propiedad de la ciudad de cada usuario antes de realizar una acción, podría utilizar el bucle ForEach. El bucle ForEach-Object se puede utilizar para trabajar con objetos directamente y, sobre todo, se utiliza en un pipeline como explicaremos en este artículo. Veamos algunos de los ejemplos en los que se utilizan las funciones ForEach Loop y ForEach-Object.

PowerShell ForEach Loop

Nuestro primer ejemplo de uso de ForEach Loop es para comprobar la propiedad city de los usuarios de Active Directory y luego realizar una acción. Supongamos que queremos exportar los usuarios cuya propiedad de ciudad es «Londres» y luego guardar el resultado en un archivo CSV. Aquí está el script de PowerShell:

Como puede ver en el script anterior, hemos creado una variable llamada $CityReport que almacena la ruta para el archivo CSV donde se guardará el informe. A continuación, estamos recogiendo todos los usuarios de una unidad organizativa específica y almacenando los usuarios recogidos con todas las propiedades en la variable $AllUsersNow. A continuación, comienza el procesamiento del bucle ForEach. En la función del bucle ForEach estamos comprobando la propiedad de la ciudad del usuario y luego utilizando una condición IF, estamos comprobando si la propiedad de la ciudad tiene el valor «Londres» o no para el usuario actual. Si el usuario tiene «Londres» como valor en la propiedad de la ciudad, los valores del nombre de usuario actual y del nombre de la ciudad se añaden al archivo C:

Otro ejemplo de uso del bucle ForEach es para procesar la información almacenada en un archivo CSV. Supongamos que tiene un archivo CSV que contiene valores de nombre de usuario, ciudad y departamento. Usted quiere modificar las propiedades de la ciudad y el departamento del usuario desde el archivo CSV. Para ello, utilizarás el siguiente script de PowerShell:

Como puedes ver en el script anterior, hemos importado el contenido del archivo CSV en la variable $CSVFile y luego utilizando el bucle ForEach estamos almacenando los valores de departamento y ciudad del archivo CSV en las variables $NewDepartment y $NewCity y luego utilizando el cmdlet de PowerShell Set-ADUser estamos actualizando los valores de departamento y ciudad para el usuario.

En pocas palabras, utilice el bucle ForEach de PowerShell cuando necesite procesar la información más de una vez si necesita realizar una acción sobre un elemento específico basado en el valor de la propiedad del elemento, y/o cuando necesite modificar la información de un objeto desde un archivo.

Además de la función ForEach Loop, PowerShell también ofrece ForEach-Object. El ForEach-Object, como su nombre indica, trabaja directamente con los objetos y se utiliza sobre todo en una tubería. Por ejemplo, como se puede ver en el comando siguiente, el cmdlet Get-Process recupera todos los procesos en el equipo local y ForEach-Object después de la tubería (|) procesa los objetos (nombres de procesos), y luego sólo muestra el nombre del proceso en la ventana de salida.

Get-Process | ForEach-Object {$_.ProcessName}

De forma similar, si necesitas ver el nombre del proceso junto con el ID del mismo, ejecutarás este comando:

Get-Process | ForEach-Object {$_.ProcessName, $_.ID}

Otro ejemplo de uso de ForEach-Object es para obtener la longitud de todos los archivos de un directorio. Supongamos que quieres comprobar la longitud de todos los archivos de la carpeta C:
Temp. Ejecutará estos comandos:

$ThisDir = «C:\Temp»
Get-ChildItem $ThisDir | ForEach-Object -Process {if (!$_.PSIsContainer) {$_.Name; $_.Length / 1024; » » }}

En el ejemplo de PowerShell ForEach-Object que se muestra a continuación, se están recopilando eventos del registro de eventos de la aplicación y, a continuación, se guarda el mensaje del evento en un archivo de texto.

Toma desde aquí

Así que ahora tiene una idea de cómo utilizar las funciones incorporadas de PowerShell ForEach y ForEach-Object. El bucle ForEach de PowerShell se puede utilizar para iterar a través de un conjunto de elementos recogidos en una variable de PowerShell y almacenados en un archivo CSV. La función ForEach-Object puede utilizarse para trabajar con objetos directamente. Los ejemplos que hemos proporcionado utilizando tanto el bucle ForEach como las funciones ForEach-Object en este artículo deberían servirle para empezar y hacer que piense en formas de utilizar los comandos en su trabajo.

.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *