-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathInvoke-PSCustomObjectForEach.ps1
More file actions
62 lines (57 loc) · 1.72 KB
/
Invoke-PSCustomObjectForEach.ps1
File metadata and controls
62 lines (57 loc) · 1.72 KB
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
61
62
Function Invoke-PSCustomObjectForEach {
<#
.SYNOPSIS
A sugar function to handle iterating over a PSCustomObject
.DESCRIPTION
This function provides a wrapper to iterate over a PSCustomObject.
It removes the eye irration of $PSCustomObject.PSObject.Properties | ForEach-Object {} each time you need to iterate over a PSCustomObject
.EXAMPLE
$test = [PSCustomObject]@{
A = 'AA'
B = 'BB'
C = 'CC'
D = 'DD'
}
Invoke-PSCustomObjectForEach -PSCustomObject $Test -ScriptBlock {
Write-output "Found $($_.Name)"
}
Invoke-PSCustomObjectForEach -Object $Test -ScriptBlock {
Write-output "Found $($_.Name)"
}
Invoke-PSCustomObjectForEach -Scriptblock {
Write-output "Found $($_.Name)"
} $test
ipscofe {
Write-output "Found $($_.Name)"
} $test
$test | ipscofe {
Write-output "Found $($_.Name)"
}
$Test | Foreach-PSCustom {
Write-output "Found $($_.Name)"
}
#>
[alias("ipscofe", "Foreach-PSCustom")]
[CmdletBinding()]
param (
[Parameter(
Mandatory,
ValueFromPipeline,
Helpmessage = "Input a PSCustomObject",
Position = 1
)]
[Alias("Object", "InputObject")]
[PSCustomObject]
$PSCustomObject,
[Parameter(
Mandatory,
Helpmessage = "Input a ScriptBlock",
Position = 0)]
[Alias("Script", "Code")]
[ScriptBlock]
$ScriptBlock
)
process {
$PSCustomObject.PSObject.Properties | ForEach-Object $ScriptBlock
}
}