$jumps = 'rejk-a-tcs201','rejk-a-tcs202','rejk-a-mdl201' $target = 'rejk-a-cac201' $targetScript = { return "$env:COMPUTERNAME was here" } $credentials = Get-Credential $jumpScript = { param($jumps, $target, $jumpScript, $targetScript, $credentials) "Hello from $env:COMPUTERNAME - Jumps remaining: $($jumps.Count)" if($jumps.Count -gt 0) { $nextJump = $jumps | select -First 1 $remainingJumps = @($jumps | select -Skip 1) #v2 fix Invoke-Command -ScriptBlock ([scriptblock]::Create($jumpScript)) -ComputerName $nextJump -Credential $credentials -ArgumentList $remainingJumps, $target, $jumpScript, $targetScript, $credentials } else { Invoke-Command -ScriptBlock ([scriptblock]::Create($targetScript)) -ComputerName $target -Credential $credentials } } if($jumps.Count -gt 0) { $nextJump = $jumps | select -First 1 $remainingJumps = @($jumps | select -Skip 1) Invoke-Command -ScriptBlock $jumpScript -ComputerName $nextJump -Credential $credentials -ArgumentList $remainingJumps, $target, $jumpScript, $targetScript, $credentials } else { Invoke-Command -ScriptBlock $targetScript -ComputerName $target -Credential $credentials }