Compartir a través de


ForEach-Object

Realiza una operación respecto a cada objeto de un conjunto de objetos de entrada.

Sintaxis

ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] [-End <scriptblock>] [-InputObject <psobject>] [<CommonParameters>]

Descripción

El cmdlet ForEach-Object realiza una operación en cada objeto de un conjunto de objetos de entrada. Los objetos de entrada se pueden canalizar al cmdlet o especificar mediante el parámetro InputObject.

La operación que se va a realizar se describe en un bloque de script que se proporciona al cmdlet como valor del parámetro Process. Este bloque puede contener cualquier script de Windows PowerShell.

En el bloque de script, el objeto de entrada actual está representado por la variable $_.

Además de usar el bloque de script que describe las operaciones que se van a realizar en cada objeto de entrada, se pueden proporcionar dos bloques adicionales. Uno, especificado como el valor del parámetro Begin, se ejecuta antes de que se procese el primer objeto de entrada. El otro, especificado como el valor del parámetro End, se ejecuta después de que se procese el último objeto de entrada.

Los resultados de la evaluación de todos los bloques de script, incluidos los especificados con Begin y End, se pasan a través de la canalización.

Parámetros

-Begin <scriptblock>

Especifica el bloque de script que se ejecuta antes de procesar los objetos de entrada.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-End <scriptblock>

Especifica el bloque de script que se ejecuta después de procesar todos los objetos de entrada.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

-InputObject <psobject>

Acepta un objeto al que se aplicará el bloque de script especificado en el parámetro Process. Especifique la variable que contiene los objetos, o bien, escriba un comando o una expresión que obtenga los objetos.

¿Requerido?

false

¿Posición?

named

Valor predeterminado

¿Aceptar canalización?

true (ByValue)

¿Aceptar caracteres comodín?

false

-Process <ScriptBlock[]>

Especifica el bloque de script que se aplica a cada objeto entrante.

¿Requerido?

true

¿Posición?

1

Valor predeterminado

¿Aceptar canalización?

false

¿Aceptar caracteres comodín?

false

<CommonParameters>

Este cmdlet admite los parámetros comunes: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer y -OutVariable. Para obtener más información, vea about_Commonparameters.

Entradas y salidas

El tipo de entrada es el tipo de los objetos que se pueden canalizar al cmdlet. El tipo devuelto es el tipo de los objetos que el cmdlet devuelve.

Entradas

System.Management.Automation.PSObject

Puede canalizar cualquier objeto a ForEach-Object.

Salidas

System.Management.Automation.PSObject

La entrada determina los objetos que ForEach-Object devuelve.

Ejemplo 1

C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}

Descripción
-----------
Este comando acepta una matriz de números enteros, divide cada número entre 1024 y muestra los resultados.





Ejemplo 2

C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }

Descripción
-----------
Este comando recupera los archivos y directorios situados en el directorio raíz de la unidad C:, y devuelve y muestra el tamaño de cada uno de ellos. Los ceros representan directorios sin tamaños de archivo disponibles.





Ejemplo 3

C:\PS>$events = get-eventlog -logname system -newest 1000

C:\PS> $events | foreach-object -begin {get-date} -process {out-file -filepath events.txt -append -inputobject $_.message} -end {get-date}

Descripción
-----------
Este comando recupera los 1000 eventos más recientes del registro del sistema y los almacena en la variable $events. A continuación, canaliza los eventos al cmdlet ForEach-Object. El parámetro Begin muestra la fecha y hora actuales. Después, el parámetro Process usa el cmdlet Out-File para crear un archivo de texto denominado events.txt y almacena la propiedad de mensaje de cada evento en este archivo. Por último, el parámetro End muestra la fecha y hora una vez finalizado todo el procesamiento.





Ejemplo 4

C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemproperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}

Descripción
-----------
Este comando cambia el valor de la entrada RemotePath del Registro en todas las subclaves de la clave HKCU:\Network a texto en mayúsculas. Puede utilizar este formato para cambiar la forma o el contenido de un valor de entrada del Registro.

Cada subclave de la clave Network representa una unidad de red asignada que volverá a establecer conexión en el inicio de sesión. La entrada RemotePath contiene la ruta de acceso UNC de la unidad conectada. Por ejemplo, si asigna la unidad E: a \\Server\Share, habrá una subclave E de HKCU:\Network y el valor de la entrada RemotePath del Registro en la subclave E será \\Server\Share.

El comando utiliza el cmdlet Get-ItemProperty para obtener todas las subclaves de la clave Network y el cmdlet Set-ItemProperty para cambiar el valor de la entrada RemotePath del Registro en cada clave. En el comando Set-ItemProperty, la ruta de acceso es el valor de la propiedad PSPath de la clave del Registro. (Esta es una propiedad del objeto de Microsoft .NET Framework que representa la clave del Registro; no es una entrada del Registro.) El comando utiliza el método ToUpper() del valor RemotePath, que es una cadena (REG_SZ).

Como Set-ItemProperty cambia la propiedad de cada clave, es necesario que el cmdlet ForEach-Object tenga acceso a la propiedad.