如何在PowerShell中将函数输出的表格内容当作对象调用?
解决方案
核心原因
你当前函数末尾调用了ft -AutoSize(即Format-Table命令),该命令的作用是将原始结构化对象转换为仅供控制台显示的渲染格式对象,丢失了原有的属性访问能力,所以赋值给变量后无法直接调用对应属性。
修正方案(无额外插件,原生PowerShell支持)
1. 修改自定义函数,移除Format-Table调用
直接返回带指定属性的结构化对象即可:
Function Get-NetFirewallRulesByPort { Param ( [Parameter(Mandatory=$true)] [ValidateRange(1,65535)] [int] $port ) Get-NetFirewallRule | Where-Object { ($_ | Get-NetFirewallPortFilter).LocalPort -eq $port } | Select-Object Enabled, Action, Direction, DisplayName }
2. 调用说明
- 存储到变量后可直接访问属性,完全符合你期望的调用效果:
# 赋值到变量 $r = Get-NetFirewallRulesByPort 443 # 访问属性 Write-Host $r[2].Action Write-Host $r[1].DisplayName
- 如果需要在控制台查看时显示为自适应的表格样式,只需在输出时额外调用Format-Table即可,不会破坏变量本身的结构化属性:
# 控制台查看表格样式 $r | Format-Table -AutoSize
额外说明
你之前尝试的ConvertFrom-SourceTable是用于将纯文本形式的表格内容转换为结构化对象的工具,你本身可以直接获取原始结构化对象,不需要走这个迂回方案。
内容的提问来源于stack exchange,提问作者jamacoe
相关产品推荐
相关产品推荐

