arrays - 将字符串拆分为对象数组

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

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

相关文章:

powershell - 将具有特定扩展名的文件 move 到更高层次的文件夹中

string - 如何在 Powershell 中运行 ffmpeg 命令并将变量传递给它?

命令行 "*"操作数在后缀表示法 c 程序中不起作用

python - 如何从 python 脚本将参数传递给 cmd.exe?

batch-file - 为什么命令行参数在 ELSE 中表现得很奇怪?

javascript - 为什么使用 "for...in"进行数组迭代是一个坏主意?

ios - 如何在 swift 3 中删除数组中的模型类数据?

powershell - 如何在Powershell中使用Get-ChildItem将文件附加到电子邮件

arrays - 在 for 循环中找到了 2 个带有 ',' 运算符的线性 C 解决方案,有人可以解释给定的逗号运算符语句吗?

javascript - 如何从表示更改的对象数组中获取最终状态