Распространение параметра -property в Select-Object или Format-Table - PullRequest
0 голосов
/ 19 октября 2018

Есть ли способ выделить параметр -property Select-Object или Format-Table.

Взять, к примеру, следующее: я надеялся создать хэш-таблицу пользовательских выражений, а не @{N="Address"; E={$ping[0].Address}} но я был неудачным.

Есть ли другой подход для достижения этого (или аналогичного)?

Желаемый результат

$param = @{
    'Property' = @{
        'Address' = $ping[0].Address
        'IPV4 Address' = $ping[0].IPV4Address.IPAddressToString
        'IPV6 Address' = $ping[0].IPV6Address.IPAddressToString
        'Count' = $_.Count
        'Average' = [Math]::Round($_.Average)
        'Maximum' = $_.Maximum
        'Minimum' = $_.Minimum
    }

}

$ping | Measure-Object -Property ResponseTime -Average -Minimum -Maximum | Select-Object @param
$ping | Measure-Object -Property ResponseTime -Average -Minimum -Maximum | Format-Table @param

Ошибки

Select-Object : The IPV6 Address key is not valid.
At line:15 char:76
+ ... operty ResponseTime -Average -Minimum -Maximum | Select-Object @param
+                                                      ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Select-Object], NotSupport 
   edException
    + FullyQualifiedErrorId : DictionaryKeyIllegal,Microsoft.PowerShell.Comman 
   ds.SelectObjectCommand

Format-Table : The IPV6 Address key is not valid.
At line:16 char:76
+ ... roperty ResponseTime -Average -Minimum -Maximum | Format-Table @param
+                                                       ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Format-Table], NotSupporte 
   dException
    + FullyQualifiedErrorId : DictionaryKeyIllegal,Microsoft.PowerShell.Comman 
   ds.FormatTableCommand

   ds.SelectObjectCommand

Ниже описано, как я обычно создаю пользовательские свойства, но с более крупными объектами это становится громоздким и более сложным в управлении.

$ping | Measure-Object -Property ResponseTime -Average -Minimum -Maximum | Format-Table -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}}

Желаемый вывод

Address      IPV4 Address  IPV6 Address             Count Average Maximum Minimum
-------      ------------  ------------             ----- ------- ------- -------
Google.co.uk 216.58.206.67 2a00:1450:4009:814::2003    10      12      13      12

1 Ответ

0 голосов
/ 19 октября 2018

Синтаксис для вычисляемого свойства:

@{
    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 оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...