PowerShell run commands once in nested foreach

Kelly Garcia
Kelly Garcia used Ask the Experts™
on
Hi,

I have a code similar to the below:

foreach($a in @(1..3)){
echo $a
foreach ($b in @("a","b","c","d","e")){
echo "Test"

}

}

Open in new window


i want the echo "test" to only happen once within the first foreach.  my real code contains powershell commandlets and i only want to execute these commandlets once per 1..3. so first loop will output 1, then it will go to the next foreach each which gives value a. within a, b, c, d, e. i want to echo test, however when it goes to 2 which is the first foreach, i dont want to echo test anymore. i hope this makes sense.  How can this be achieved?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2014
Commented:
Your real-world application could might dictate a better method, but here's one way.
$first = $true
foreach ($a in @(1..3)){
    echo $a
    foreach ($b in @("a","b","c","d","e")){
        If ( $first )
        {
            echo "Test"
            $first = $false
        }
    }
}

Open in new window


In other scenarios, I find using the -Begin, -Process, and -End parameters of ForEach-Object more to my liking.
Kelly GarciaSenior Systems Administrator

Author

Commented:
I think you've done it, brilliant!!
Kelly GarciaSenior Systems Administrator

Author

Commented:
still need to test though
Become a Microsoft Certified Solutions Expert

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

Kelly GarciaSenior Systems Administrator

Author

Commented:
can you give me an example of begin process end please.

thank you.
Kelly GarciaSenior Systems Administrator

Author

Commented:
apologies I mean begin process end for this scenario
Kelly GarciaSenior Systems Administrator

Author

Commented:
should $first be outside of the if statement?
Top Expert 2014

Commented:
In my example, line 8 could also be moved after the If statement (afer line 9), or after the second foreach loop (after line 10) but still with the first foreach loop.
Kelly GarciaSenior Systems Administrator

Author

Commented:
thank you
Top Expert 2014

Commented:
This scenario doesn't really lend itself well to using begin, process, and end.  But here's an example (didn't include end):
1..3 | ForEach-Object -Begin { echo "test" } -Process {
    echo $_
    foreach ($b in @("a","b","c","d","e")){
        # blah
    }
}

Open in new window

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial