Private/Get-PropertyOrder.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#function to extract properties
Function Get-PropertyOrder {
    <#
    .SYNOPSIS
        Gets property order for specified object
 
    .DESCRIPTION
        Gets property order for specified object
 
    .PARAMETER InputObject
        A single object to convert to an array of property value pairs.
 
    .PARAMETER Membertype
        Membertypes to include
 
    .PARAMETER ExcludeProperty
        Specific properties to exclude
 
    .FUNCTIONALITY
        PowerShell Language
    #>

    [cmdletbinding()]
     param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromRemainingArguments=$false)]
            [PSObject]$InputObject,

        [validateset("AliasProperty", "CodeProperty", "Property", "NoteProperty", "ScriptProperty",
            "Properties", "PropertySet", "Method", "CodeMethod", "ScriptMethod", "Methods",
            "ParameterizedProperty", "MemberSet", "Event", "Dynamic", "All")]
        [string[]]$MemberType = @( "NoteProperty", "Property", "ScriptProperty" ),

        [string[]]$ExcludeProperty = $null
    )

    begin {

        if($PSBoundParameters.ContainsKey('inputObject')) {
            $firstObject = $InputObject[0]
        }
    }
    process{

        #we only care about one object...
        $firstObject = $InputObject
    }
    end{

        #Get properties that meet specified parameters
        $firstObject.psobject.properties |
            Where-Object { $memberType -contains $_.memberType } |
            Select -ExpandProperty Name |
            Where-Object{ -not $excludeProperty -or $excludeProperty -notcontains $_ }
    }
} #Get-PropertyOrder