将字符串拆分为对象数组

Split a string into an Object array

我在 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 参数必须作为 flat 数组传递,这需要使用 expression:

# 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 的两个之一 - only a small subset of operators can be used, such as , and @, the splatting operator;要使用其他表达式,例如 +,需要一个分组表达式 ((...)),如图所示(或者,要使用整个 statements 的输出作为参数, $(...)@(...))