我创建了一个函数来处理我想要的对象中的项目并将它们分类到一个新的 PSCustomObject 中。如果我通过管道传递对象,我会得到一些重复和奇怪的结果,而不是将对象作为参数传递给函数并使用 ForEach-Object 循环。
这是我的示例(这将产生 3 条记录):
$audioSessions | Where-Object {$_.QoeReport.FeedbackReports}
与此相反(产生六个,有些是重复的:
$audioSessions | Where-Object {$_.QoeReport.FeedbackReports} | ProcessFeedback
知道为什么会发生这种情况吗?我将 3 个对象传递给 ProcessFeedback 函数,不是吗?为什么有些项目重复而有些则没有?
如果我选择将整个变量传递给函数并在其中循环,我会按预期从函数中取回 3 个对象:
ProcessFeedback -feedbackInput $audioSessions
然后,在我的函数中,我使用 Where-Object 语句进行过滤,结果如下:
function ProcessFeedback{
[cmdletbinding()]
Param(
[Parameter(mandatory=$true, valuefrompipeline=$true)]
$feedbackInput
)
begin{}
process{
$feedbackInput | Where-Object {$_.QoeReport.FeedbackReports} | ForEach-Object{
[array]$newObject += [PSCustomObject][ordered]@{
FromUri = $_.FromUri
ToUri = $_.ToUri
CaptureTime = $_.QoeReport.FeedbackReports.CaptureTime
Rating = $_.QoeReport.FeedBackReports.Rating
}
}
return $newObject
}
}
注意:当我通过管道传递对象时,我删除了 ProcessFeedback 函数中的 Where-Object 语句,因为我一次只看到一个对象传递给它。