Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nested ForEach-Object -Parallel #4926

Open
6 tasks done
DarkLite1 opened this issue Feb 23, 2024 · 0 comments
Open
6 tasks done

Nested ForEach-Object -Parallel #4926

DarkLite1 opened this issue Feb 23, 2024 · 0 comments
Labels
Issue-Bug A bug to squash. Needs: Triage Maintainer attention needed!

Comments

@DarkLite1
Copy link

DarkLite1 commented Feb 23, 2024

Prerequisites

  • I have written a descriptive issue title.
  • I have searched all open and closed issues to ensure it has not already been reported.
  • I have read the troubleshooting guide.
  • I am sure this issue is with the extension itself and does not reproduce in a standalone PowerShell instance.
  • I have verified that I am using the latest version of Visual Studio Code and the PowerShell extension.
  • If this is a security issue, I have read the security issue reporting guidance.

Summary

I am expecting the same behaviour between the PowerShell Extension terminal and the standard PowerShell terminal.

It appears that there is a scoping issue or not cleaning up of variable names within the PowerShell Extension terminal.

PowerShell Version

Name                           Value
----                           -----
PSVersion                      7.4.1
PSEdition                      Core
GitCommitId                    7.4.1
OS                             Microsoft Windows 10.0.20348
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Name             : ConsoleHost
Version          : 7.4.1
InstanceId       : 1a36e6cd-b018-4307-8cf6-1068ec5a11bf
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

Visual Studio Code Version

1.86.2
903b1e9d8990623e3d7da1df3d33db3e42d80eda
x64

Extension Version

ms-vscode.powershell@2024.3.0

Steps to Reproduce

Test.ps1

Param (
    [int]$MaxConcurrentJobs = 2
)

$Tasks = @(
    @{
        Type    = 'PC'
        Actions = @(
            @{
                ComputerName = 'PC1'
                Result       = $null
            }
            @{
                ComputerName = 'PC2'
                Result       = $null
            }
        )
    }
    @{
        Type    = 'SERVER'
        Actions = @(
            @{
                ComputerName = 'SERVER1'
                Result       = $null
            }
            @{
                ComputerName = 'SERVER2'
                Result       = $null
            }
        )
    }
)

$outerScriptBlock = {
    $task = $_

    $innerScriptBlock = {
        $action = $_

        if (-not $MaxConcurrentJobs) {
            $task = $using:task
        }

        $action.Result = '{0} - {1}' -f $task.Type, $action.ComputerName
    }

    $innerForeachParams = @{
        Process = $innerScriptBlock
    }

    if (-not $MaxConcurrentJobs) {
        $innerForeachParams = @{
            Parallel      = $innerScriptBlock
            ThrottleLimit = $using:MaxConcurrentJobs
        }
    }

    $task.Actions | ForEach-Object @innerForeachParams
}

$foreachParams = @{
    Process = $outerScriptBlock
}

if ($MaxConcurrentJobs -gt 1) {
    $foreachParams = @{
        Parallel      = $outerScriptBlock
        ThrottleLimit = $MaxConcurrentJobs
    }
}

$Tasks | ForEach-Object @foreachParams

$Tasks.Actions.Result

Execute in terminal PowerShell Extension:

Step 1

  • Open file Test.ps1 with $MaxConcurrentJobs = 1 and press F5 # no error
  • Open file Test.ps1 with $MaxConcurrentJobs = 2 and press F5 # no error

Step 2

& 'T:\Test\Brecht\PowerShell\Test.ps1' -MaxConcurrentJobs 2 # no error 

Execute in a standard PowerShell 7 terminal:

Step 1

& 'T:\Test\Brecht\PowerShell\Test.ps1' -MaxConcurrentJobs 1 # no error

Step 2

& 'T:\Test\Brecht\PowerShell\Test.ps1' -MaxConcurrentJobs 2 # ERROR

image

Visuals

No response

Logs

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Issue-Bug A bug to squash. Needs: Triage Maintainer attention needed!
Projects
None yet
Development

No branches or pull requests

1 participant