PowerShell 7.3.x:管道内无括号访问嵌套属性的理想Cmdlet是否存在?
在PowerShell 7.3.x中访问嵌套属性的简洁方案
PowerShell没有原生的Get-Object Cmdlet,但可以通过以下几种方式实现你想要的无括号管道式嵌套属性访问:
用
ForEach-Object简化语法直接访问
这是最便捷的内置方案,无需额外定义工具,直接利用ForEach-Object的简写%结合属性路径:Get-Content ./data.json | ConvertFrom-Json | % building1.data | Select-Object id, status这里
% building1.data等价于ForEach-Object { $_.building1.data },自动遍历管道输入并返回指定的嵌套属性值,完全适配你的管道流需求。自定义
Get-Object函数
如果你偏好Get-Object的明确语法,可以自己定义一个轻量函数,完美匹配你期望的调用方式:function Get-Object { param( [Parameter(ValueFromPipeline)] $InputObject, [Parameter(Position=0)] [string]$PropertyPath ) process { $InputObject.$PropertyPath } }定义后就能直接用你想要的命令:
Get-Content ./data.json | ConvertFrom-Json | Get-Object building1.data | Select-Object id, status这个函数会接收管道输入,按传入的属性路径提取对应值,逻辑简单且复用性强。
处理XML文件的适配
如果你要处理XML,逻辑类似,转换后同样可以用上述两种方式:# 用ForEach-Object简化语法 Get-Content ./data.xml | ConvertFrom-Xml | % building1.data | Select-Object id, status # 用自定义的Get-Object Get-Content ./data.xml | ConvertFrom-Xml | Get-Object building1.data | Select-Object id, status
内容的提问来源于stack exchange,提问作者Jiehong
相关产品推荐
相关产品推荐

