如何将变量值用作PowerShell中Sort-Object的排序字段?
使用变量指定PowerShell排序字段(兼容PS4/PS5)
要实现用变量替代硬编码的排序字段,同时兼容PowerShell 4和5版本,直接通过变量动态访问对象属性即可,具体实现如下:
硬编码原代码
$XLM.Products.Product | sort {[decimal]$_.price} | % { [void]$XML.Products.AppendChild($_) }
变量化实现代码
# 定义排序字段变量 $XML_Node_Attribute_Name = 'price' # 动态指定排序字段执行排序 $XLM.Products.Product | Sort-Object { [decimal]$_.$XML_Node_Attribute_Name } | ForEach-Object { [void]$XML.Products.AppendChild($_) }
关键说明
- PowerShell 4和5原生支持
$_.$变量名的动态属性访问语法,无需额外处理 - 保留
[decimal]类型转换至关重要:如果直接按字符串排序,会出现数值逻辑错误(例如"10"会被排在"2"之前) - 代码中使用命令全称
Sort-Object/ForEach-Object(缩写sort/%也可正常运行,全称可读性更强) - 确保
$XML_Node_Attribute_Name的值与目标节点的属性/成员名称完全一致,避免拼写错误导致的属性找不到问题
内容的提问来源于stack exchange,提问作者NOYB
相关产品推荐
相关产品推荐

