Al principio, había un cmdlet
La mayoría de las veces, cuando piensa escribir algo en PowerShell, generalmente encontrará dentro de las primeras líneas unGet-ChildItem
, luego inevitablemente tendrá una para cada bucle.
Normalmente escribiría esto como foreach($item in $items)
, pero en una ocasión apareció el autocompletado en la variable de matriz con una opción .ForEach
, no sabía el uso correcto de esto, así que probé la opción habitual
Get-Help ForEach -ExamplesGet-Help ForEach -Online
Como esto realmente no mostraba esta opción (para ser honesto, puede que no haya ido a la ayuda correcta de PS), busqué en Google lo mismo, lo que inicialmente me llevó a una página similar en ss64.com, pero proporcionaron un enlace a otras opciones ForEach
, una de las cuales contenía cómo usar el método ForEach
Cómo usarlo .ForEach
veamos si puedo explicarlo en código:
$items.ForEach({# This exposes the $_ object, but I find that it doesn't know what each item is.# So I often find myself setting that to a new variable.$item = $_#I guess as you learn more and more you become versed in the ways of the object and can free type out the properties you need.})
Como puede ver, esta forma de escribir un ForEach todavía permite una instrucción multilínea, y siempre que sepa qué propiedades busca, nunca tendrá que configurar el objeto $ _ (pero sé que lo haré).
Tenga cuidado con los dragones
Hay algo que debe tenerse en cuenta en la versión 3 de PowerShell. Si el $array
podría ser nulo, debe verificar eso antes de realizar sus acciones.
if($items -ne $null){...}
Si ha utilizado PowerShell 2, es posible que ya esté al tanto de este problema con las matrices.
En PowerShell 3 y superior, el bucle foreach controla automáticamente los objetos de matriz nula, pero no será hasta que utilice PowerShell 5 que el método ForEach controla las matrices nulas.