2

我在 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

有用。

谢谢您的帮助。

4

1 回答 1

3

您的-Property参数必须作为平面数组传递,这需要使用表达式

# Note: Target parameter -Property is positionally implied.
Select-Object (, @{Name = 'Command'; Expression={ "Insert" }} + $filterObjectArray)

笔记:

  • 因为需要一个表达式作为命令参数,所以它必须包含在(...)分组运算符中。

  • ,,数组构造操作符, 用于将脚本块 ( { ... }) 包装在一个单元素数组中,以便对其应用+运算符执行数组连接,这意味着 RHS 数组的元素$filterObjectArray, 直接成为结果数组的元素,从而产生必要的计算属性和属性名称的平面数组。


至于你尝试了什么:

@{Name = 'Command'; Expression = { "Insert" } }, $filterObjectArray

这个参数,在参数模式下解析,产生一个嵌套数组:第一个元素是脚本块({ ... }),第二个也是最后一个元素是整个数组$filterObjectArray,这就是为什么存储在其中的名称无法识别的原因。

请注意,在参数模式(PowerShell 的两种基本解析模式之一)中,只能使用一小部分运算符,例如,and @喷溅运算符;要使用其他表达式,例如+,需要一个分组表达式 ( (...)),如图所示(或者,使用整个语句的输出作为参数,$(...)或者@(...)

于 2020-12-08T18:04:07.103 回答