我在 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
它有效。
感谢您的帮助。
最佳答案
您的 -Property
参数必须作为平面数组传递,这需要使用表达式:
# Note: Target parameter -Property is positionally implied.
Select-Object (, @{Name = 'Command'; Expression={ "Insert" }} + $filterObjectArray)
注意:
由于需要一个表达式来充当命令参数,因此必须将其括在
(...)
中>,grouping operator .,
,array constructor operator ,用于将脚本 block ({ ... }
) 包装在单元素数组中,以便对其应用+
运算符执行数组串联,这意味着 RHS 数组$filterObjectArray
的元素直接成为结果数组的元素,从而产生计算属性和属性所需的 flat 数组名称。
至于你尝试过的:
@{Name = 'Command'; Expression = { "Insert" } }, $filterObjectArray
此参数在参数模式下解析,产生一个嵌套数组:第一个元素是脚本 block ({ ... }
),>第二个也是最后一个元素是$filterObjectArray
数组作为一个整体,这就是存储在其中的名称无法识别的原因。
请注意,在参数模式下 - PowerShell 的两个 fundamental parsing modes 之一- 只能使用一小部分运算符,例如 、
和 @
、splatting operator ;要使用其他表达式,例如 +
,需要分组表达式 ((...)
),如图所示(或者,为了使用整个语句的输出 作为参数,$(...)
或 @(...)
)
关于arrays - 将字符串拆分为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65204192/