【问题标题】: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

它有效。

感谢您的帮助。

【问题讨论】:

    标签: arrays powershell command-line-arguments select-object


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2012-02-22
      相关资源
      最近更新 更多