Синтаксис для вычисляемого свойства:
@{
Name = 'Foo'
Expression = { ... }
}
или
@{
Label = 'Foo'
Expression = { ... }
}
, которые определяют имя / метку одного такого свойства, а также способ его вычисления.Скриптблок (анонимная функция) откладывает выполнение выражения, поэтому значение свойства не вычисляется до использования хеш-таблицы с Format-Table
(или Select-Object
и т. Д.).
Аргумент дляпараметр -Property
является массивом этих хеш-таблиц.Даже если вы разделяете параметры, вам все равно нужно определить этот список хеш-таблиц.
Ваш код отображает имя параметра в единую хеш-таблицу с именами и выражениями, которые вы хотите использовать для вычисляемых свойств.Это неверный синтаксис, хотя.И даже если бы синтаксис был действительным, вы все равно не получили бы желаемый результат, потому что вычисление значений не откладывается (потому что они не определены в скриптовых блоках).
Чтобы получить желаемый результат, вынеобходимо определить $param
следующим образом:
$param = @{
Property = @{N="Address";E={$ping[0].Address}},
@{N="IPV4 Address";E={$ping[0].IPV4Address.IPAddressToString}},
@{N="IPV6 Address";E={$ping[0].IPV6Address.IPAddressToString}},
@{N="Count";E={$_.Count}},
@{N="Average";E={[Math]::Round($_.Average)}},
@{N="Maximum";E={$_.Maximum}},
@{N="Minimum";E={$_.Minimum}}
}
Однако, если вы не хотите разбивать одно и то же определение параметра несколько раз, я не вижу преимущества вышеупомянутого над определением вычисляемых свойств непосредственно вFormat-Table
или Select-Object
оператор.