-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGet-Methods.ps1
60 lines (46 loc) · 1.87 KB
/
Get-Methods.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
55
56
57
58
59
60
function Get-Namespace([string]$namespace = 'root') {
$innerNamespaces = Get-CimInstance -Namespace $namespace -ClassName __Namespace -ErrorAction Ignore | Select-Object -ExpandProperty Name
Write-Output $namespace
foreach($innerNamespace in $innerNamespaces) {
Get-Namespace "$namespace/$innerNamespace"
}
}
function Get-PlainClass([string]$Namespace) {
$classes = Get-CimClass -Namespace $Namespace -ErrorAction Ignore
foreach ($class in $classes) {
$methods = $class.CimClassMethods
foreach ($method in $methods) {
$parameters = $method.Parameters
foreach ($parameter in $parameters) {
$objProps = @{
'Namespace' = $Namespace;
'Class' = $class.CimClassName;
'Method' = $method.Name;
'Parameter' = $parameter;
}
$obj = New-Object -TypeName PSObject -Property $objProps
Write-Output $obj
}
}
}
}
function Get-AllPlainClasses {
$namespaces = Get-Namespace
foreach ($namespace in $namespaces) {
$plainClasses = Get-PlainClass $namespace
Write-Output $plainClasses
}
}
function Get-FilteredPlainClasses {
$classes = Get-AllPlainClasses
foreach ($class in $classes) {
$Parameter = $class.Parameter
$Qualifiers = $Parameter.Qualifiers
$qualifierNames = $Qualifiers | Select-Object -ExpandProperty Name
$match = ($qualifierNames -contains 'EmbeddedInstance') -and ($qualifierNames -contains 'in') -and ($Parameter.CimType -eq [Microsoft.Management.Infrastructure.CimType]::InstanceArray)
if ($match -eq $true) {
Write-Output $class
}
}
}
Get-FilteredPlainClasses | Sort-Object -Property Namespace,Class,Method -Unique | Select-Object -Property Namespace,Class,Method