1
+ function Get-PSMDMember
2
+ {
3
+ <#
4
+ . ForwardHelpTargetName Microsoft.PowerShell.Utility\Get-Member
5
+ . ForwardHelpCategory Cmdlet
6
+ #>
7
+ [CmdletBinding (HelpUri = ' https://go.microsoft.com/fwlink/?LinkID=113322' , RemotingCapability = ' None' )]
8
+ param (
9
+ [Parameter (ValueFromPipeline = $true )]
10
+ [psobject ]
11
+ $InputObject ,
12
+
13
+ [Parameter (Position = 0 )]
14
+ [ValidateNotNullOrEmpty ()]
15
+ [string []]
16
+ $Name ,
17
+
18
+ [Alias (' Type' )]
19
+ [System.Management.Automation.PSMemberTypes ]
20
+ $MemberType ,
21
+
22
+ [System.Management.Automation.PSMemberViewTypes ]
23
+ $View ,
24
+
25
+ [string ]
26
+ $ArgumentType ,
27
+
28
+ [string ]
29
+ $ReturnType ,
30
+
31
+ [switch ]
32
+ $Static ,
33
+
34
+ [switch ]
35
+ $Force
36
+ )
37
+
38
+ begin
39
+ {
40
+ try
41
+ {
42
+ $outBuffer = $null
43
+ if ($PSBoundParameters.TryGetValue (' OutBuffer' , [ref ]$outBuffer ))
44
+ {
45
+ $PSBoundParameters [' OutBuffer' ] = 1
46
+ }
47
+ if ($ArgumentType ) { $PSBoundParameters.Remove (" ArgumentType" ) }
48
+ if ($ReturnType ) { $PSBoundParameters.Remove (" ReturnType" ) }
49
+ $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand (' Microsoft.PowerShell.Utility\Get-Member' , [System.Management.Automation.CommandTypes ]::Cmdlet)
50
+ $scriptCmd = { & $wrappedCmd @PSBoundParameters }
51
+ $steppablePipeline = $scriptCmd.GetSteppablePipeline ($myInvocation.CommandOrigin )
52
+ $steppablePipeline.Begin ($true )
53
+ }
54
+ catch
55
+ {
56
+ throw
57
+ }
58
+
59
+ function Split-Member
60
+ {
61
+ [CmdletBinding ()]
62
+ param (
63
+ [Parameter (ValueFromPipeline = $true )]
64
+ [Microsoft.PowerShell.Commands.MemberDefinition ]
65
+ $Member
66
+ )
67
+
68
+ process
69
+ {
70
+ if ($Member.MemberType -notlike " Method" ) { return $Member }
71
+
72
+ if ($Member.Definition -notlike " *), *" ) { return $Member }
73
+
74
+ foreach ($definition in $Member.Definition.Replace (" ), " , " )þþþ" ).Split(" þþþ" ))
75
+ {
76
+ if (-not $definition ) { continue }
77
+ New-Object Microsoft.PowerShell.Commands.MemberDefinition($Member.TypeName , $Member.Name , $Member.MemberType , $definition )
78
+ }
79
+ }
80
+ }
81
+
82
+ }
83
+
84
+ process
85
+ {
86
+ try
87
+ {
88
+ $members = $steppablePipeline.Process ($_ ) | Split-Member
89
+
90
+ if ($ArgumentType )
91
+ {
92
+ $tempMembers = @ ()
93
+ foreach ($member in $members )
94
+ {
95
+ if ($member.MemberType -notlike " Method" ) { continue }
96
+
97
+ if (($member.Definition -split " \(" , 2 )[1 ] -match $ArgumentType ) { $tempMembers += $member }
98
+ }
99
+ $members = $tempMembers
100
+ }
101
+
102
+ if ($ReturnType )
103
+ {
104
+ $members = $members | Where-Object Definition -match " ^$ReturnType "
105
+ }
106
+
107
+ $members
108
+ }
109
+ catch
110
+ {
111
+ throw
112
+ }
113
+ }
114
+
115
+ end
116
+ {
117
+ try
118
+ {
119
+ $steppablePipeline.End ()
120
+ }
121
+ catch
122
+ {
123
+ throw
124
+ }
125
+ }
126
+ }
0 commit comments