Get-PropertySet.ps1

function Get-PropertySet
{
    <#
    .Synopsis
        Gets the property sets
    .Description
        Gets the property sets. Property sets are predefined views of an object.
    .Example
        Get-PropertySet
    .Example
        Get-PropertySet -TypeName System.Diagnostics.Process
    #>


    [OutputType([PSObject])]
    param(
    # The name of the typename to get
    [string[]]
    $TypeName
    )


    begin {
        $typeFiles = (Get-ChildItem $psHome -Filter *types.ps1xml) +
            @(Get-Module  | Where-Object { $_.ExportedTypeFiles }  | ForEach-Object{ $_.ExportedTypeFiles | Get-Item })
    }
    process {
        $typefiles |
            Select-Xml //PropertySet |
            Where-Object {
                $_.Node.parentnode.parentnode.name -ne 'PSStandardMembers' -and (
                (-not $typeName) -or ($typename -contains $_.Node.parentnode.parentnode.name)
                )
            }  |
            Select-Object @{
                Name='Typename';
                Expression={$_.Node.parentnode.parentnode.name}
            }, @{
                Name='PropertySet';
                Expression = {$_.Node.Name }
            }
    }
}