Итак, вы приводите переменную, даже не назначая ее. Так что ноль в ноль. Позже, когда вы используете оператор + =, вы добавляете таблицу ha sh в ноль. Результатом этой операции является массив, в котором индекс 0 равен нулю, а индекс 1 и далее представляют собой таблицы ha sh.
Я несколько удивлен, что приведение к нулю инициирует переменную.
Тест:
[hashtable]$properties
Get-Variable properties
Это возвращает Cannot find a variable with the name 'properties'.
Тем не менее, если вы прокомментируете эту строку, функция действительно вернет PSCustomObject.
Тем не менее, я думаю, реальная проблема в том, что вы создаете объект внутри l oop. И так, воссоздавая его на каждой итерации. Кажется, это не является целью вашего кода.
Если я правильно интерпретирую ваше намерение, вы хотите создать один большой объект со свойствами, названными постепенно для каждой службы, с которой вы сталкиваетесь.
Попробуйте эти незначительные корректировки:
Function Get-PSCustomObjectAsOutputType
{
$Services = Get-Service | Select -First 5
$Properties = [Ordered]@{}
# Ordered can only be on a literal
For( $i = 0; $i -le $Services.Count; ++$i)
{
$Service = $Services[$i] # Assign a var; easier to reference
$Properties +=
@{
"Name$i" = $Service.Name
"Status$i" = $Service.Status
"Displayname$i" = $Service.DisplayName
}
}
[PSCustomObject]$Properties # Another way to create the object...
} #End Function Get-PSCustomObjectAsOutputType
Обратите внимание, что я использовал заказанный ха sh. Это должно сделать ваш вывод немного более читабельным.
Я также использовал a для l oop, что избавляет вас от необходимости увеличивать переменную самостоятельно ...
Дайте мне знать, если это помогает. Спасибо.