我想要将名称/值对作为对象管道传递给高级函数。
我从一个看起来像这样的OrderedDictionary开始:
$jobs = [ordered]@{0='job0';1='job1';2='job2';3='job3';4='job4'; 5='job5';6='job6';}
控制台输出如下所示:
$jobs
Name Value
---- -----
0 job0
1 job1
2 job2
3 job3
4 job4
5 job5
6 job6
该功能如下所示:
Function Process-Jobs {
[cmdletbinding()]
Param (
[Parameter(ValueFromPipeline=$true)][hashtable]$jobs
)
Begin {
Write-Output '--> begin block <--'
}
Process {
Write-Output $_.Name
Write-Output $_.Value
}
End {
Write-Output '--> end block <--'
}
}
$jobs = [ordered]@{0='job0';1='job1';2='job2';3='job3';4='job4'; 5='job5';6='job6';}
$jobs | Process-Jobs
上面的代码不起作用并将其返回到控制台:
--> begin block <--
--> end block <--
我尝试将哈希表设为这样的自定义对象:
$jobs = [PSCustomObject][ordered]@{0='job0';1='job1';2='job2';3='job3';4='job4'; 5='job5';6='job6';}
控制台输出如下所示:
$jobs
0 : job0
1 : job1
2 : job2
3 : job3
4 : job4
5 : job5
6 : job6
如果我修改了这个功能......
Function Process-Jobs {
[cmdletbinding()]
Param (
[Parameter(ValueFromPipeline=$true)][PSCustomObject]$jobs
)
Begin {
Write-Output '--> begin block <--'
}
Process {
$i = 0
Write-Output $jobs.Name
Write-Output $jobs.$i
}
End {
Write-Output '--> end block <--'
}
}
$jobs = [PSCustomObject][ordered]@{0='job0';1='job1';2='job2';3='job3';4='job4'; 5='job5';6='job6';}
$jobs | Process-Jobs
控制台输出如下所示:
--> begin block <--
job0
--> end block <--
我似乎失去了引用Name属性的能力。
如何访问$jobs
对象的Name属性?
我从OrderedDictionary开始,因为我需要它来处理函数中的其他地方。
是否有更好的方法将名称/值对管道传输到高级功能?
我应该使用这样的东西:
$jobs = New-Object –TypeName PSCustomObject
$jobs | Add-Member –MemberType NoteProperty –Name 'Name' –Value 0
$jobs | Add-Member –MemberType NoteProperty –Name 'Value' –Value 'job0'
...
$jobs | Process-Jobs
需要额外的代码来循环和排序......