将字符串拆分为对象数组

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;要使用其他表达式,例如 +,需要一个分组表达式 ((...)),如图所示(或者,对于使用整个 语句 的输出作为参数,$(...)@(...) )

【讨论】:

以上是关于将字符串拆分为对象数组的主要内容,如果未能解决你的问题,请参考以下文章

在JS中将对象拆分为对象数组

获取拆分为字符串数组的对象的“类”属性

js字符串拆分?

将字符串拆分为字符串数组[重复]

将数组拆分为字符串[关闭]

将字符串拆分为字符串数组