Skip to content

Get-TypeData does not actually get the "IsHidden" state for the given type's members. #27131

@JosephColvin

Description

@JosephColvin

Prerequisites

Steps to reproduce

Open a terminal and type in the following (or copy and paste the commands)

$TypeData = [System.Management.Automation.Runspaces.TypeData]::new('Demo')
$VisableMember = [System.Management.Automation.Runspaces.NotePropertyData]::new('VisableMember', 'Visable')
$HiddenMember = [System.Management.Automation.Runspaces.NotePropertyData]::new('HiddenMember', 'Hidden')
$HiddenMember.IsHidden = $true
$VisableMember, $HiddenMember | Select-Object Name, IsHidden, Value
$TypeData.Members.Add($VisableMember.Name, $VisableMember)
$TypeData.Members.Add($HiddenMember.Name, $HiddenMember)
$TypeData.Members.Values | Select-Object Name, IsHidden, Value
Get-TypeData -TypeName 'Demo'
$null -eq (Get-TypeData -TypeName 'Demo')
Update-TypeData -TypeData $TypeData -Force
$null -eq (Get-TypeData -TypeName 'Demo')
$GetTypeDataResult = Get-TypeData -TypeName 'Demo'
$GetTypeDataResult.Members.Values | Select-Object Name, IsHidden, Value

Expected behavior

PS C:\Users\Joseph.Colvin> $GetTypeDataResult = Get-TypeData -TypeName 'Demo'
PS C:\Users\Joseph.Colvin> $GetTypeDataResult.Members.Values | Select-Object Name, IsHidden, Value

Name          IsHidden Value
----          -------- -----
VisableMember    False Visable
HiddenMember      True Hidden

PS C:\Users\Joseph.Colvin>

Actual behavior

PS C:\Users\Joseph.Colvin> $GetTypeDataResult = Get-TypeData -TypeName 'Demo'
PS C:\Users\Joseph.Colvin> $GetTypeDataResult.Members.Values | Select-Object Name, IsHidden, Value

Name          IsHidden Value
----          -------- -----
VisableMember    False Visable
HiddenMember     False Hidden

PS C:\Users\Joseph.Colvin>

Error details

Environment data

Name                           Value
----                           -----
PSVersion                      7.6.0
PSEdition                      Core
GitCommitId                    7.6.0
OS                             Microsoft Windows 10.0.22631
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.4
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Visuals

Testing the Demo TypeData with the following commands

$Demo
$Demo = [PSCustomObject]@{ PSTypeName = 'Demo' }
$Demo.PSTypeNames
$Demo | Get-Member -Name 'VisableMember', 'HiddenMember' | Select-Object Name, Definition
$Demo | Get-Member -Name 'VisableMember', 'HiddenMember' -Force | Select-Object Name, Definition

produces the following output:

Demo
System.Management.Automation.PSCustomObject
System.Object

Name          Definition
----          ----------
VisableMember string VisableMember=Visable

Name          Definition
----          ----------
VisableMember string VisableMember=Visable
HiddenMember  string HiddenMember=Hidden

As you can see from above, to get the hidden member 'HiddenMember' you must use the '-Force' parameter and thus showing it is indeed hidden. Also, no tab completion for the hidden member is available, all as expected.
Only thing unexpected was that the Get-TypeData does not return True for the 'Ishidden' property of the hidden member. This happens even if you provide an PS1XML Types File or from a module.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs-TriageThe issue is new and needs to be triaged by a work group.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions