将字符串拆分为对象数组
Posted
技术标签:
【中文标题】将字符串拆分为对象数组【英文标题】:Split a string into an Object array 【发布时间】:2021-03-20 02:03:07 【问题描述】:我在 PowerShell 中有这个字符串:
$filter = "Name;Server;Mounted;ObjectCategory;Guid;WhenChangedUTC;WhenCreatedUTC;ObjectState"
我想拆分它得到一个对象数组,我试过了:
$stringArray = $filter.Split(';')
但它是一个字符串数组。
最后我想打电话:
... | Select-Object -Property @Name = 'Command'; Expression = "Insert" , $filterObjectArray
$filterObjectArray 当它是一个字符串数组时不起作用。
但是如果$filterObjectArray = 'Name', 'Server'
...
问题是我的自定义属性称为 Command 因为如果我只使用:
... | Select-Object -Property $filterObjectArray
它有效。
感谢您的帮助。
【问题讨论】:
【参考方案1】:您的 -Property
参数必须作为 flat 数组传递,这需要使用 表达式:
# Note: Target parameter -Property is positionally implied.
Select-Object (, @Name = 'Command'; Expression= "Insert" + $filterObjectArray)
注意:
因为需要一个表达式作为命令参数,所以它必须包含在(...)
,grouping operator中。
,
,array constructor operator,用于将脚本块 ( ...
) 包装在单元素数组中,以便在其上应用 +
运算符执行数组连接 ,这意味着 RHS 数组的元素 $filterObjectArray
直接成为结果数组的元素,从而产生了计算属性和属性名称所必需的 flat 数组。
至于你尝试了什么:
@Name = 'Command'; Expression = "Insert" , $filterObjectArray
这个参数,在参数模式下解析,产生一个嵌套数组:第一个元素是脚本块( ...
),第二个和最后一个元素是$filterObjectArray
数组作为一个整体,这就是无法识别其中存储的名称的原因。
请注意,在参数模式(PowerShell 的两个fundamental parsing modes 之一)中,只能使用一小部分运算符,例如,
和@
,splatting operator;要使用其他表达式,例如 +
,需要一个分组表达式 ((...)
),如图所示(或者,对于使用整个 语句 的输出作为参数,$(...)
或 @(...)
)
【讨论】:
以上是关于将字符串拆分为对象数组的主要内容,如果未能解决你的问题,请参考以下文章