Prerequisites
Steps to reproduce
Below are two snippets demonstrating seemingly identical behavior, however the bottom snippet does not work.
# This Works
$VariableOutsideParallel = 'something'
1..1 | ForEach-Object -Parallel {
Write-Host $Using:VariableOutsideParallel
}
# This does NOT on 7.2.0+ (But does on 7.1.*)
$VariableOutsideParallel = 'something'
[scriptblock]$SB = {
Write-Host $Using:VariableOutsideParallel
}
1..1 | ForEach-Object -Parallel $SB
Expected behavior
PS> $VariableOutsideParallel = 'something'
PS> [scriptblock]$SB = {
Write-Host $Using:VariableOutsideParallel
}
PS> 1..1 | ForEach-Object -Parallel $SB
something
Actual behavior
PS> $VariableOutsideParallel = 'something'
PS> [scriptblock]$SB = {
Write-Host $Using:VariableOutsideParallel
}
PS> 1..1 | ForEach-Object -Parallel $SB
InvalidOperation:
Line |
2 | Write-Host $Using:VariableOutsideParallel
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command, Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid only if the script block is invoked on a remote computer.
Error details
PS> Get-Error
Exception :
Type : System.Management.Automation.RuntimeException
ErrorRecord :
Exception :
Type : System.Management.Automation.ParentContainsErrorRecordException
Message : A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command,
Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid
only if the script block is invoked on a remote computer.
HResult : -2146233087
CategoryInfo : InvalidOperation: (:) [], ParentContainsErrorRecordException
FullyQualifiedErrorId : UsingWithoutInvokeCommand
InvocationInfo :
ScriptLineNumber : 2
OffsetInLine : 3
HistoryId : -1
Line : Write-Host $Using:VariableOutsideParallel
PositionMessage : At line:2 char:3
+ Write-Host $Using:VariableOutsideParallel
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 2
TargetSite :
Name : GetUsingValue
DeclaringType : System.Management.Automation.VariableOps, System.Management.Automation, Version=7.2.4.500,
Culture=neutral, PublicKeyToken=31bf3856ad364e35
MemberType : Method
Module : System.Management.Automation.dll
Message : A Using variable cannot be retrieved. A Using variable can be used only with Invoke-Command,
Start-Job, or InlineScript in the script workflow. When it is used with Invoke-Command, the Using variable is valid
only if the script block is invoked on a remote computer.
Data : System.Collections.ListDictionaryInternal
Source : System.Management.Automation
HResult : -2146233087
StackTrace :
at System.Management.Automation.VariableOps.GetUsingValue(MutableTuple tuple, String usingExpressionKey, Int32
index, ExecutionContext context)
at System.Management.Automation.Interpreter.FuncCallInstruction`5.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
CategoryInfo : InvalidOperation: (:) [], RuntimeException
FullyQualifiedErrorId : UsingWithoutInvokeCommand
InvocationInfo :
ScriptLineNumber : 2
OffsetInLine : 3
HistoryId : -1
Line : Write-Host $Using:VariableOutsideParallel
PositionMessage : At line:2 char:3
+ Write-Host $Using:VariableOutsideParallel
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 2
Environment data
PS> $PSVersionTable
Name Value
---- -----
PSVersion 7.2.5
PSEdition Core
GitCommitId 7.2.5
OS Microsoft Windows 10.0.19044
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Visuals
No response
Prerequisites
Steps to reproduce
Below are two snippets demonstrating seemingly identical behavior, however the bottom snippet does not work.
Expected behavior
Actual behavior
Error details
Environment data
Visuals
No response