Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[System.Management.Automation.PSCustomObject] weirdness #2295

Copy link
Copy link
@vors

Description

@vors
Issue body actions

Steps to reproduce

There are few issues with casting to [System.Management.Automation.PSCustomObject]. Note the full name! The short name [PSCustomObject] works just fine, I guess it uses a different (type accelerator) code path.

First part

Try to create a [PSCustomObject] as described in a numerous of blog posts (example)

> $a = [PSCustomObject]@{a = 'a'; b = 'b'}       
> $a      
a b                                                                                                                                         
- -                                                                                                                     
a b 

> $a.GetType().FullName            
System.Management.Automation.PSCustomObject                                                         

So far so good.
Now, try to do it with the full name

> [System.Management.Automation.PSCustomObject]@{a = 'a'; b = 'b'}
Cannot convert the "System.Collections.Hashtable" value of type "System.Collections.Hashtable" to type                                       
"System.Management.Automation.PSCustomObject".
At line:1 char:2
+  [System.Management.Automation.PSCustomObject]@{a = 'a'; b = 'b'}
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException

Expected behavior

Conversion succeed.

Actual behavior

> [System.Management.Automation.PSCustomObject]@{a = 'a'; b = 'b'}
Cannot convert the "System.Collections.Hashtable" value of type "System.Collections.Hashtable" to type                                       
"System.Management.Automation.PSCustomObject".
At line:1 char:2
+  [System.Management.Automation.PSCustomObject]@{a = 'a'; b = 'b'}
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException

Second part

Now try to cast the original object $a

> [System.Management.Automation.PSCustomObject]$a                    
Cannot convert the "@{a=a; b=b}" value of type "System.Management.Automation.PSCustomObject" to type 
"System.Management.Automation.PSCustomObject".
At line:1 char:2
+  [System.Management.Automation.PSCustomObject]$a
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException

The error message is pretty weird, since no actual conversion should be required.

Note: this affects UX, because auto-completion on [pscu will expend it into [System.Management.Automation.PSCustomObject and not [PSCustomObject.
This is also inconsistent with [pso that expends into [psobject and not [System.Management.Automation.PSObject]

Also, note that this works fine

> [System.Management.Automation.PSObject]@{a = 'a'; b = 'b'}

Environment data

> $PSVersionTable
Name                           Value                                                                                                        
----                           -----                                                                                                        
PSVersion                      6.0.0-alpha                                                                                                  
PSEdition                      Core                                                                                                         
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                      
BuildVersion                   3.0.0.0                                                                                                      
GitCommitId                    v6.0.0-alpha.10                                                                                              
CLRVersion                                                                                                                                  
WSManStackVersion              3.0                                                                                                          
PSRemotingProtocolVersion      2.3                                                                                                          
SerializationVersion           1.1.0.1 

cc @jpsnover

Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

Issue-BugIssue has been identified as a bug in the productIssue has been identified as a bug in the productResolution-FixedThe issue is fixed.The issue is fixed.Up-for-GrabsUp-for-grabs issues are not high priorities, and may be opportunities for external contributorsUp-for-grabs issues are not high priorities, and may be opportunities for external contributorsWG-Enginecore PowerShell engine, interpreter, and runtimecore PowerShell engine, interpreter, and runtimeWG-Languageparser, language semanticsparser, language semantics

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.