PowerShell Universal Bug Report: `ArgumentOutOfRangeException` in `UDRunspaceFactory.GetRunspace()` when `SessionTimeout = 0`

Product: PowerShell Universal
Version: 5.6.12

Summary

We experienced intermittent API failures in PowerShell Universal where API endpoints would return HTTP 400 and log a System.ArgumentOutOfRangeException during runspace creation. The exception is thrown inside PowerShell Universal (UDRunspaceFactory.GetRunspace()), before any endpoint script code is executed.

The issue was resolved by changing SessionTimeout from 0 (infinite) to a positive integer (e.g., 60 minutes).


Symptoms

  • Some requests succeed, but periodically requests fail with:

  • HTTP 400

  • Error log: System.ArgumentOutOfRangeException: The added or subtracted value results in an un-representable DateTime. (Parameter 'value')

  • The failure happens before the endpoint code starts executing.


Stack Trace (excerpt)


System.ArgumentOutOfRangeException: The added or subtracted value results in an un-representable DateTime. (Parameter 'value')

at System.DateTime.ThrowDateArithmetic(Int32 param)

at System.DateTime.AddMinutes(Double value)

at UniversalDashboard.Services.UDRunspaceFactory.GetRunspace() in ...\UDRunspaceFactory.cs:line 37

at UniversalAutomation.Host.PowerShellApiService.ExecuteRequest(ApiRequest request) in ...\ApiService.cs:line 171


Configuration that triggers the issue

In .universal/settings.ps1:


$Parameters = @{

# ...

SessionTimeout = 0

# ...

}

Set-PSUSetting @Parameters


Expected behavior

  • SessionTimeout = 0 (“no limit / infinite”) should not cause API failures.

  • Runspace creation should be stable and should not throw ArgumentOutOfRangeException.


Actual behavior

  • With SessionTimeout = 0, PowerShell Universal intermittently fails to create a runspace.

  • PSU internally calls DateTime.AddMinutes(...) (seen in stack trace) and triggers a DateTime overflow (ArgumentOutOfRangeException).

  • Endpoint execution is aborted and the API returns HTTP 400.


Workaround / Fix

Changing SessionTimeout to a positive value resolves the issue:


$Parameters = @{

# ...

SessionTimeout = 60

# ...

}

Set-PSUSetting @Parameters

After this change:

  • The intermittent ArgumentOutOfRangeException stopped occurring.

  • API endpoints became stable again.


Why this appears to be a platform bug

  • The stack trace points entirely to PowerShell Universal internals (UDRunspaceFactory.GetRunspace()), not to endpoint scripts.

  • The failure occurs before the endpoint code runs, suggesting a runspace/session housekeeping edge-case.

  • Even if SessionTimeout=0 is considered a special value, the platform should handle it gracefully and not crash during runspace creation.


Request

Please:

  • Confirm whether SessionTimeout = 0 is a supported configuration.

  • Investigate and fix the DateTime.AddMinutes overflow in UDRunspaceFactory.GetRunspace() when SessionTimeout=0.

  • Provide recommended configuration guidance if 0 should not be used.