DsReg.psm1

Function Get-DsRegStatus()
{
    [CmdletBinding(DefaultParameterSetName='AsJson')]
    [OutputType([MG.DsReg.IDsRegResult])]
    param
    (
        [parameter(Mandatory=$false, Position=0, ParameterSetName="AsJson")]
        [ValidateSet("DeviceDetails", "DeviceState", "DiagnosticData", "NgcPrerequisiteCheck", "SsoState", "TenantDetails", "UserState", "WorkAccounts")]
        [string] $Display,

        [parameter(Mandatory=$false, ParameterSetName="AsJson")]
        [switch] $AsJson,

        [parameter(Mandatory=$false, ParameterSetName="Expand")]
        [switch] $Expand
    )

    $executor = [MG.DsReg.DsRegExecutor]::NewExecutor();
    $cmdResult = $executor.GetStatus();
    if ($PSBoundParameters.ContainsKey("Display"))
    {
        $object = $cmdResult.$Display;
        if ($PSBoundParameters.ContainsKey("AsJson"))
        {
            $object = $object.ToJson("Indented", $false);
        }
    }
    else
    {
        if ($PSBoundParameters.ContainsKey("AsJson"))
        {
            $object = $cmdResult;
            $object = $object | ConvertTo-Json -Depth 100;
        }
        elseif ($PSBoundParameters.ContainsKey("Expand"))
        {
            $object = New-Object 'System.Collections.Generic.List[MG.DsReg.BaseDetail]'
            $object.Add($cmdResult.DeviceDetails);
            $object.Add($cmdResult.DeviceState);
            $object.Add($cmdResult.DiagnosticData);
            $object.Add($cmdResult.NgcPrerequisiteCheck);
            $object.Add($cmdResult.SsoState);
            $object.Add($cmdResult.TenantDetails);
            $object.Add($cmdResult.UserState);
            $object.AddRange($cmdResult.WorkAccounts);
        }
        else
        {
            $object = $cmdResult;
        }
    }

    Write-Output -InputObject $object -NoEnumerate;
}