如何在 PowerShell 中像对象一样处理表格内容?
我想像对象一样处理我的函数的表格格式输出,即行 [2] 列 'Action' 应该像 $r[2].Action 一样可寻址。我怎样才能做到这一点?
我尝试使用 powershellgallery 中的“ConvertFrom-SourceTable”,但这没有用。我宁愿有一个没有额外安装的简单解决方案。
Function Get-NetFirewallRulesByPort {
Param ( [Parameter(Mandatory=$true)]
[ValidateRange(1,65535)]
[int] $port )
Get-NetFirewallRule |
where { ($_ | Get-NetFirewallPortFilter).LocalPort -eq ${port} } |
select Enabled, Action, Direction, DisplayName | ft -AutoSize
}
# usage:
$r = (Get-NetFirewallRulesByPort 443)
$r
# required:
Write-Host $r[2].Action
Write-Host $r[1].DisplayName
# etc. ...
回答
因此,| ft -AutoSize在您的函数中,您强制它输出仅用于显示目的而格式化的收集数据
稍后尝试对其进行解码以使其再次成为对象数组绝对不是要走的路。
| ft -AutoSize从函数中删除,以便您的变量 $r 将接收一组对象
如果必须,请$r以多种方式使用该变量显示结果:
$r | Format-Table -AutoSize
或者
$r | Out-GridView
通过将其保留为对象,您现在可以做您想做的事情,例如$r[2].Action(当然,前提是您至少返回了 3 个对象..)