Нет необходимости в вашем обходном решении «добавить-дополнительный-элемент-затем-скрыть-это»:
* * * * * * * * * Проблема, связанная с root, заключается в том, что вывод коллекции из функции PowerShell приводит к ее перечисление по умолчанию, которое в случае коллекции single-item означает, что этот элемент сам выводится, а не массив элементов ( [object[]]
, так как PowerShell неявно собирает несколько выходных данных из команды, когда вы присваиваете значение l).
@()
, оператор подвыражения массива , существует именно для обратитесь к этому сценарию:
Вы заключаете его в команду, вывод которой вы всегда хотите рассматривать как массив, даже если команда выводит единственный объект:
# Populate my mapped printer list.
# @(...) ensures that the function output is an array.
$MyListbox.ItemsSource = @(Get-MappedPrinterInfo)
Обратите внимание, что эту проблему можно решить из внутри вашей функции - обернув вашу выходную коллекцию в aux. массив из одного элемента, так что исходная коллекция принимается вызывающей стороной - но обычно лучше не писать такие функции, так как они будут демонстрировать нестандартное поведение при использовании в конвейере, где другие команды ожидают поэлементно ввод, а не целые коллекции.
Если вы все же хотите это сделать (что хорошо для частных, специальных функций):
...
END {
# Return data wrapped in a single-item aux. array to ensure
# that the $Output collection is returned as a whole.
return , $Output
}
Несколько сторон в отношении вашего кода:
[object]$Printers = ...
Приведение [object]
бессмысленно в PowerShell, и приведение обычно не работает так же, как в C# Например,
Независимо от того, какой тип у RHS, становится эффективным типом $Printers
.
Если вы используете тип Speci c для ограничения LHS, однако преобразование в этот тип выполняется при каждом назначении значения этой переменной.
$Output += ...
+=
тихо преобразует $Output
в (новый экземпляр) массив ([object[]]
) независимо от исходного типа, который не является вашим намерением и также неэффективен.
Вам нужно вызвать метод .Add()
для экземпляра коллекции, изначально сохраненного в $Output
.