File tree Expand file tree Collapse file tree
PSModuleDevelopment/functions/utility Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ function Search-PSMDPropertyValue
2+ {
3+ [CmdletBinding ()]
4+ param (
5+ $Object ,
6+
7+ $Value ,
8+
9+ [switch ]
10+ $Match ,
11+
12+ [int ]
13+ $Depth = 3
14+ )
15+
16+ function Search-Value
17+ {
18+ [CmdletBinding ()]
19+ param (
20+ $Object ,
21+
22+ $Value ,
23+
24+ [bool ]
25+ $Match ,
26+
27+ [int ]
28+ $Depth ,
29+
30+ [string []]
31+ $Elements
32+ )
33+
34+ $path = $Elements -join " ."
35+ Write-PSFMessage - Level Verbose - Message " Processing $path "
36+
37+ foreach ($property in $Object.PSObject.Properties )
38+ {
39+ if ($path ) { $tempPath = $path , $property.Name -join " ." }
40+ else { $tempPath = $property.Name }
41+ if ($Match )
42+ {
43+ if ($property.Value -match $Value )
44+ {
45+ [PSCustomObject ]@ {
46+ Parent = $path
47+ Path = $tempPath
48+ Value = $property.Value
49+ Type = $property.Value.GetType ()
50+ Depth = $Elements.Count + 1
51+ }
52+ }
53+ }
54+ else
55+ {
56+ if ($Value -eq $property.Value )
57+ {
58+ [PSCustomObject ]@ {
59+ Parent = $path
60+ Path = $tempPath
61+ Value = $property.Value
62+ Type = $property.Value.GetType ()
63+ Depth = $Elements.Count + 1
64+ }
65+ }
66+ }
67+
68+ if ($Elements.Count -lt $Depth )
69+ {
70+ $newItems = New-Object System.Object[]($Elements.Count )
71+ $Elements.CopyTo ($newItems , 0 )
72+ $newItems += $property.Name
73+ Search-Value - Object $property.Value - Value $Value -Match $Match - Depth $Depth - Elements $newItems
74+ }
75+ }
76+ }
77+
78+ Search-Value - Object $Object - Value $Value -Match $Match.ToBool () - Depth $Depth - Elements @ ()
79+ }
You can’t perform that action at this time.
0 commit comments