2015-11-27 2 views
0

Я занимаюсь экспериментальным экспериментированием о конвейере, и я создал себе 3 функции: «Get-Getter», «Do-Something», «Output-Somewhere».Почему мой сценарий возвращает мне дважды объекты?

С моей функцией getter, я пытаюсь вывести 3 объекта, который имеет только свойство name. Это работа, за исключением того, что мои результаты будут дублированы (отображаются дважды).

Я задаюсь вопросом, что я сделал неправильно здесь:

function The-Getter { 
[CmdletBinding()] 
Param() 

begin{ 
Write-Verbose -Message 'Entering the begin bloc of The-Getter' 
$a = 'BMW X3' 
$b = 'BMW X4' 
$c = 'BMW X6' 
} 

process{ 
Write-Verbose -Message "Entering the process bloc of The-Getter with object $_" 
$Collection = @() 
$obj1 = New-Object –typename PSObject 
$obj1 | Add-Member –membertype NoteProperty –name Name –value ($a) –passthru 
$Collection += ($obj1) 

$obj2 = New-Object –typename PSObject 
$obj2 | Add-Member –membertype NoteProperty –name Name –value ($b) –passthru 
$Collection += ($obj2) 

$obj3 = New-Object –typename PSObject 
$obj3 | Add-Member –membertype NoteProperty –name Name –value ($c) –passthru 
$Collection += ($obj3) 

Return $Collection 
} 

end{ 
Write-Verbose -Message 'Entering the end bloc of The-Getter' 
} 
} 

Выход:

PS C:\> The-Getter 

Name 
---- 
BMW X3 
BMW X4 
BMW X6 
BMW X3 
BMW X4 
BMW X6 

Спасибо за ваше время.

ответ

1

Проблема возникла из ваших звонков в Add-Member, которая возвращает объект. Поскольку вы ничего не делаете с возвращенным объектом, он печатает.

Если объединить $Collection += с Add-Member выстилает вопрос должен уйти:

$obj2 = New-Object –typename PSObject 
$Collection += $obj2 | Add-Member –membertype NoteProperty –name Name –value ($b) –passthru 

Но на самом деле, вы можете избавиться от $Collection вообще:

process{ 
Write-Verbose -Message "Entering the process bloc of The-Getter with object $_" 
$obj1 = New-Object –typename PSObject 
$obj1 | Add-Member –membertype NoteProperty –name Name –value ($a) –passthru 
$obj2 = New-Object –typename PSObject 
$obj2 | Add-Member –membertype NoteProperty –name Name –value ($b) –passthru 
$obj3 = New-Object –typename PSObject 
$obj3 | Add-Member –membertype NoteProperty –name Name –value ($c) –passthru 
} 
+0

Это имеет смысл, спасибо @ ST8Z6FR57ABE6A8RE9UF –

 Смежные вопросы

  • Нет связанных вопросов^_^