Prerequisites
Environment:
- PowerShell 7.3.6 or higher on up-to-date Windows 10 22H2 x64
- ThreadJob 2.0.3 and Microsoft.PowerShell.ThreadJob 2.1.0
Sporadic race condition exception when accessing $Host.UI.psobject.Properties inside a runspace started with Start-ThreadJob:
Start new session:
pwsh -nop
Paste following:
$event= [System.Threading.ManualResetEvent]::new($false)
$jobs=1..500|% {
Start-ThreadJob {
$event=$using:event$null=$event.WaitOne()
$supportsVT=$Host.UI.psobject.Properties['SupportsVirtualTerminal'].Value
} -StreamingHost $Host
}
Start-Sleep-Milliseconds 500$null=$event.Set()
$jobs|Receive-Job-AutoRemoveJob -Wait- If you couldn't repro first time, start new PowerShell session, do not try in the same session.
Steps to reproduce with Pester 5.5.0:
Environment:
- PowerShell 7.3.6 or higher on up-to-date Windows 10 22H2 x64
- Pester 5.5.0
- ThreadJob 2.0.3 and Microsoft.PowerShell.ThreadJob 2.1.0
Sporadic race condition exception when accessing $Host.UI.psobject.Properties inside a runspace started with Start-ThreadJob:
Start new session:
pwsh -nop
Paste following:
1..500|ForEach-Object {
Start-ThreadJob {
1| Should -BeExactly 1$supportsVT=$Host.UI.psobject.Properties['SupportsVirtualTerminal'].Value
} -StreamingHost $Host
} |Wait-Job|Receive-Job|Remove-Job-Force- If you couldn't repro first time, start new PowerShell session, do not try in the same session.
More details here.
Expected behavior
There should be no exception.
Actual behavior
InvalidOperation: Cannot index into a null array.InvalidOperation: Cannot index into a null array.InvalidOperation: Cannot index into a null array.InvalidOperation: Cannot index into a null array.
Error details
PS C:\> Get-ErrorException : Type : System.Management.Automation.RuntimeException ErrorRecord : Exception : Type : System.Management.Automation.ParentContainsErrorRecordException Message : Cannot index into a null array. HResult : -2146233087 CategoryInfo : InvalidOperation: (:) [], ParentContainsErrorRecordException FullyQualifiedErrorId : NullArray InvocationInfo : ScriptLineNumber : 1 OffsetInLine : 26 HistoryId : -1 Line : 1 | Should -BeExactly 1; $supportsVT = $Host.UI.psobject.Properties['SupportsVirtualTerminal'].Value PositionMessage : At line:1 char:26 + … eExactly 1; $supportsVT = $Host.UI.psobject.Properties['SupportsVirtu … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CommandOrigin : Internal ScriptStackTrace : at <ScriptBlock>, <No file>: line 1 TargetSite : System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Object, System.String) Message : Cannot index into a null array. Data : System.Collections.ListDictionaryInternal Source : Anonymously Hosted DynamicMethods Assembly HResult : -2146233087 StackTrace : at CallSite.Target(Closure, CallSite, Object, String) at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) at System.Management.Automation.Interpreter.DynamicInstruction`3.Run(InterpretedFrame frame) at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)CategoryInfo : InvalidOperation: (:) [], RuntimeExceptionFullyQualifiedErrorId : NullArrayInvocationInfo : ScriptLineNumber : 1 OffsetInLine : 26 HistoryId : -1 Line : 1 | Should -BeExactly 1; $supportsVT = $Host.UI.psobject.Properties['SupportsVirtualTerminal'].Value PositionMessage : At line:1 char:26 + … eExactly 1; $supportsVT = $Host.UI.psobject.Properties['SupportsVirtu … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CommandOrigin : InternalScriptStackTrace : at <ScriptBlock>, <No file>: line 1
Environment data
Name Value
---------
PSVersion 7.3.6
PSEdition Core
GitCommitId 7.3.6
OS Microsoft Windows 10.0.19045
Platform Win32NT
PSCompatibleVersions {1.0,2.0,3.0,4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0Version
ThreadJob 2.0.3 and Microsoft.PowerShell.ThreadJob 2.1.0
Visuals

Prerequisites
Steps to reproduce (thanks to @SeeminglyScience)
Environment:
Sporadic race condition exception when accessing
$Host.UI.psobject.Propertiesinside a runspace started withStart-ThreadJob:Start new session:
pwsh -nopPaste following:
Steps to reproduce with Pester 5.5.0:
Environment:
Sporadic race condition exception when accessing
$Host.UI.psobject.Propertiesinside a runspace started withStart-ThreadJob:Start new session:
pwsh -nopPaste following:
More details here.
Expected behavior
There should be no exception.Actual behavior
Error details
Environment data
Version
ThreadJob 2.0.3 and Microsoft.PowerShell.ThreadJob 2.1.0
Visuals