PowerShell / PowerShell/vscode-powershell
Nested ForEach-Object -Parallel
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 1.9k
- Fork
- 548
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
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.ps1with$MaxConcurrentJobs = 1and pressF5# no error - Open file
Test.ps1with$MaxConcurrentJobs = 2and pressF5# 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
Visuals
No response
Logs
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione in Test.ps1 ed eseguila dal terminale di PowerShell Extension e da un terminale PowerShell 7 standard usando i valori 1 e 2 per MaxConcurrentJobs. Traccia il punto di ingresso del terminale o del debugging dell’estensione per determinare perché l’ambito di ForEach-Object -Parallel annidato differisce. Il lavoro è completato quando lo stesso script si comporta in modo coerente in entrambi i terminali.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- powershell, vscode
- Ambito
- developer-experience, devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100