powershell - 在 Select-Object 或 Format-Table 中添加 -property 参数
问题描述
有什么办法可以将 -property 参数的Select-Object
or 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
解决方案
计算属性的语法是
@{
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
orSelect-Object
语句中定义计算属性的优势。
推荐阅读
- laravel - laravel 5.7 控制台测试如何创建 Artisan::command()
- r - 使用 REmap 和其他包的 install_github() 下载包时 R 失败
- sql - 如何在 SQL 中获取父母的前 2 个孩子?
- swift - 用swift创建乘法表
- python - Python:TypeError:+的不支持的操作数类型:'_io.TextIOWrapper'和'str'
- oracle - ORACLE 子查询不工作(有条件)
- swift - 如何下移 UISearchController?
- php - PHP / JSON - 返回大字符串导致错误
- php - 在PHP中用下划线替换文本中的非法字符
- python - 我安装 matplotlib