PowerShell - ScriptBlock 到可迭代类型

问题描述

我们正在使用 Inovke-RestMethod 响应。作为响应的一部分,我们有一个数组:

$array = @(
    {
        id = "9916"
        title = "title9916"
    }
    {
        id = "9917"
        title = "title9917"
    }
)

我们注意到数组中的每一项都被视为 ScriptBlock:

PS C:\> $array | % { $_.GetType() }

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     ScriptBlock                              System.Object
True     True     ScriptBlock                              System.Object

如何让每一项都可迭代?

附注。当 ScriptBlock 被指定为:

$scriptblock = {
    id = "9916"
    title = "title9916"
}

我们可以通过以下方式转换为 HashTable:

PS C:\> $hash = ConvertFrom-StringData -StringData $scriptblock.ToString()

如果 ScriptBlock 被指定为:

$scriptblock = {
    id = "9916"
    title = "title9916"
    details = @{
        name = "name9916"
        count = 128
    }
}

在这种情况下 ConvertFrom-StringData 将不起作用。

附注。对于那些好奇的人:我们正在使用 ManageEngine ServiceDesk Plus v3

FindGameObjectsWithTag

响应是作为 PSCustomObject 给出的,我们只需要它的某个子集。这个子集可以随时间变化,它被定义为 XML 文件中的一个列表。根据该列表,我们应该处理我们的响应。我们认为实现这一目标的最佳方式是将 PSCustomObject 转换为 XML 并使用函数

  • 选择节点
  • 选择单节点
  • GetElementsByTagName

为了将 PSCustomObject 转换为 XML,我们使用了脚本的修改版本:

https://www.manageengine.com/products/service-desk/sdpod-v3-api/SDPOD-V3-API.html#get-request

在处理数组之前,它可以完美运行。

解决方法

正如评论中提到的,您的 allDates.add(m.group(1)); 不是有效的 JSON - 我可以想象返回的类型“scriptblock”可能会产生误导,但在这种情况下,它与 powershell 块有关脚本,而不是 javascript

我不确定它的内容发生了什么变化,但如果它是 JSON,它会是这样的:

$array

这是从中获取可用数据的方法:

$array = @"
    [{
        id: "9916",title: "title9916"
    },{
        id: "9917",title: "title9917"
    }]
"@

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...