Write-FormatWideView.ps1

function Write-FormatWideView
{
    [CmdletBinding(DefaultParameterSetName='Property')]
    param(
    # The name of the property displayed in the wide view.
    [Parameter(Mandatory=$true,ParameterSetName='OfProperty',ValueFromPipelineByPropertyName=$true)]
    [string]$Property,

    # The script block displayed in the wide view.
    [Parameter(Mandatory=$true,ParameterSetName='OfScriptBlock',ValueFromPipelineByPropertyName=$true)]
    [ScriptBlock]$ScriptBlock,

    # The view type name. This allows for a view to be displayed selectively, based off of a typename.
    [Parameter(ValueFromPipelineByPropertyName=$true)]
    [string]
    $ViewTypeName,

    # The view condition. This allows for a view to be displayed selectively, based off of a condition.
    # This must be used with -ViewTypeName or -ViewSelectionSet.
    [Parameter(ValueFromPipelineByPropertyName=$true)]
    [ScriptBlock]
    $ViewCondition,

    # The View Selection Set. This allows for a view to be displayed selectively, based of a selection set name.
    [Parameter(ValueFromPipelineByPropertyName=$true)]
    [string]
    $ViewSelectionSet,

    # If set, the view will be automatically sized.
    # This cannot be ignored if a ColumnCount is provided.
    [switch]
    $AutoSize,

    # The number of columns that will be displayed.
    # This will take override -AutoSize
    [Alias('Columns','ColumnNumber')]
    [int]
    $ColumnCount)

    begin {
        $accumulated = [Collections.ArrayList]::new()
    }
    process {
        $null = $accumulated.Add(@{} + $PSBoundParameters)
    }

    end {
        $xml = & {
        '<WideControl>'
        if ($ColumnCount) {
            "<ColumnNumber>$ColumnCount</ColumnNumber>"
        } elseif ($AutoSize) {
            '<AutoSize/>'
        }
        '<WideEntries>'
        foreach ($item in $accumulated) {
            '<WideEntry>'
            if ($item.ViewTypeName -or $item.ViewSelectionSet) {
                "<EntrySelectedBy>"
                if ($item.ViewCondition) {
                    "<SelectionCondition>"
                }
                foreach ($tn in $item.ViewTypeName) {
                    "<TypeName>$([Security.SecurityElement]::Escape($tn))</TypeName>"
                }
                foreach ($ssn in $item.ViewSelectionSet) {
                    "<SelectionSetName>$([Security.SecurityElement]::Escape($ssn))</SelectionSetName>"
                }
                if ($item.ViewCondition) {
                    "<ScriptBlock>$([Security.SecurityElement]::Escape($item.ViewCondition))</ScriptBlock>"
                    "</SelectionCondition>"
                }
                "</EntrySelectedBy>"
            }
            '<WideItem>'
            if ($item.Property) {
                '<PropertyName>'
                [Security.SecurityElement]::Escape($item.Property)
                '</PropertyName>'
            } elseif ($item.ScriptBlock) {
                '<ScriptBlock>'
                [Security.SecurityElement]::Escape($item.ScriptBlock)
                '</ScriptBlock>'
            }
            '</WideItem>'
            '</WideEntry>'
        }
        '</WideEntries>'
        '</WideControl>'
        }

        $xml = [xml]($xml -join '')

        if (-not $xml) { return }
        $xOut=[IO.StringWriter]::new()
        $xml.Save($xOut)
        "$xOut".Substring('<?xml version="1.0" encoding="utf-16"?>'.Length + [Environment]::NewLine.Length)
    }
}