gpt4 book ai didi

powershell - 在选择对象或格式表中喷溅-property参数

转载 作者:行者123 更新时间:2023-12-03 00:43:54 24 4
gpt4 key购买 nike

有什么办法可以喷射Select-ObjectFormat-Table的-property参数。

以下面的示例为例,我希望创建一个自定义表达式的哈希表,而不是@{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

最佳答案

计算属性的语法是

@{
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-TableSelect-Object语句中定义计算的属性。

关于powershell - 在选择对象或格式表中喷溅-property参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com