PowerShell / PowerShell/vscode-powershell

PowerShell Integrated Console: "Value cannot be null" for missing mandatory parameter when debugging

Open
#1,969 6 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Area-Debugging Issue-Bug
Dominant language
TypeScript
Stars
1.9k
Forks
547
PR merge metrics
No merged PRs in 30d

Description

Issue Type: Bug

Steps to reproduce

Create a .ps1 script file with the following contents:

class MyNewClass {
    [string] $DummyVar
}

function Get-Details {
    param (
        [Parameter(Mandatory)][MyNewClass] $ClassVar,
        [Parameter(Mandatory)][String] $StringVar
    )
    $ClassVar | Out-Host
}

Get-Details

Run the script from a PowerShell terminal window in VSCode.

Expected behavior

Using an explicit "pwsh" terminal inside VSCode, or an external Windows PowerShell or PowerShell Core shell, the above code gives:

cmdlet Get-Details at command pipeline position 1
Supply values for the following parameters:
ClassVar:

Actual behavior

From the PowerShell Integrated Console, the same script results in:

Value cannot be null.
Parameter name: type
At C:\Users\myuser\Documents\Development\PowerShell\TestParamNull.ps1:14 char:1
+ Get-Details
+ ~~~~~~~~~~~
+ CategoryInfo          : OperationStopped: (:) [], ArgumentNullException
+ FullyQualifiedErrorId : System.ArgumentNullException

If I explicitly call "pwsh" from inside this same integrated console, the script then works as expected.

Best guesses are that the issue is occurring when the debugger is involved, or that your readline is choking because it doesn't know how to request the user enters a custom class?

Environment data

Explicit pwsh

PS> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Microsoft Windows 10.0.17763
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
PS> $PSHOME
C:\Program Files\PowerShell\6

PowerShell Integrated Console

PS>$PSVersionTable
Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Microsoft Windows 10.0.17763
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0
PS> $PSHOME
C:\Program Files\PowerShell\6

VSCode PowerShell Debugger Launch Config

        {
            "name": "PowerShell Launch Current File",
            "type": "PowerShell",
            "request": "launch",
            "script": "${file}",
            "args": [],
            "cwd": "${file}"
        }

Extension version: 1.12.1
VS Code version: Code 1.34.0 (a622c65b2c713c890fcf4fbf07cf34049d5fe758, 2019-05-15T21:59:37.030Z)
OS version: Windows_NT x64 10.0.17763

System Info
Item Value
CPUs Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz (8 x 2904)
GPU Status 2d_canvas: enabled
checker_imaging: disabled_off
flash_3d: enabled
flash_stage3d: enabled
flash_stage3d_baseline: enabled
gpu_compositing: enabled
multiple_raster_threads: enabled_on
native_gpu_memory_buffers: disabled_software
rasterization: enabled
surface_synchronization: enabled_on
video_decode: enabled
webgl: enabled
webgl2: enabled
Load (avg) undefined
Memory (System) 31.81GB (14.95GB free)
Process Argv
Screen Reader no
VM 0%

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the provided MyNewClass/Get-Details script from the PowerShell Integrated Console and compare it with an explicit pwsh terminal. Start by tracing the debugger and integrated-console parameter-prompting path using the supplied PowerShell Debugger Launch Config. Done means the integrated console prompts for the missing mandatory parameter instead of reporting a null type error.

Written by the indexing model from the issue text.

Assessment

Tech stack
powershell, vscode
Domain
cli, devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.