Saltar al contenido

Diferencia entre ForEach y ForEach-Object en powershell

Verificamos de forma completamente cada tutoriales en nuestro espacio con el objetivo de mostrarte siempre información con la mayor veracidad y actualizada.

Solución:

foreach es un alias de ForEach-Object pero también parece ser una palabra clave (lo cual es confuso).

El foreach ($ in $) la sintaxis que estás usando es help about_foreach.

El foreach como ForEach-Object alias es help ForEach-Object.

La palabra clave foreach opera sobre cada $ en el $ como se indica en el () un poco.

El alias foreach/función ForEach-Object opera sobre cada elemento de la colección que recibe como entrada.

Son comandos diferentes para diferentes propósitos. El ForEach-Object cmdlet se usa en la canalización, y usa $ PSItem o $ _ para hacer referencia al objeto actual con el fin de ejecutar un scriptblock así:

1..5 | ForEach-Object $_

>1
>2
>3
>4
>5

Ahora, también puede utilizar un aspecto muy similar palabra clave, ForEach, al principio de una línea. En este caso, puede ejecutar un scriptblock en el que defina el nombre de la variable, así:

ForEach ($number in 1..5)$number
>1
>2
>3
>4
>5

La diferencia principal aquí es donde usa el comando, uno se usa en medio de una canalización, mientras que el otro inicia su propia canalización. En los scripts de estilo de producción, recomendaría usar la palabra clave ForEach en lugar del cmdlet.

Ambas respuestas anteriores son correctas, pero https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/08/getting-to-know-foreach-and-foreach-object/ tiene un buen resumen:

Cuando canaliza la entrada a ForEach, es el alias de ForEach-Object. Pero cuando coloca ForEach al principio de la línea, es una declaración de Windows PowerShell.

y más detalles:

La instrucción ForEach carga todos los elementos por adelantado en una colección antes de procesarlos uno a la vez. ForEach-Object espera que los elementos se transmitan a través de la canalización, lo que reduce los requisitos de memoria, pero al mismo tiempo, sufre un impacto en el rendimiento.

Luego incluye algunas medidas de desempeño y concluye:

Entonces, ¿cuál usas? Bueno, la respuesta es: “Depende”. Puede recorrer en iteración una colección de elementos mediante la instrucción ForEach o el cmdlet ForEach-Object. ForEach es perfecto si tiene mucha memoria, desea el mejor rendimiento y no le importa pasar la salida a otro comando a través de la canalización. ForEach-Object (con sus alias% y ForEach) toma la entrada de la canalización. Aunque es más lento procesar todo, le brinda el beneficio de los bloques Begin, Process y End. Además, le permite transmitir los objetos a otro comando a través de la canalización. Al final, utilice el enfoque que mejor se adapte a sus necesidades y la capacidad de su sistema.

Reseñas y puntuaciones

Si aceptas, eres capaz de dejar una sección acerca de qué le añadirías a esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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