簡體   English   中英

PowerShell - 腳本塊到可迭代類型

[英]PowerShell - ScriptBlock to iterable type

我們正在玩 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

如何使每個項目可迭代?

PS。 當 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 將不起作用。

PS。 對於那些好奇的人:我們正在使用 ManageEngine ServiceDesk Plus v3

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

響應以 PSCustomObject 的形式給出,我們只需要它的某個子集。 這個子集可能會隨時間改變,它被定義為 XML 文件中的列表。 基於該列表,我們應該處理我們的響應。 我們認為實現這一目標的最佳方法是將 PSCustomObject 轉換為 XML 並使用函數:

  • 選擇節點
  • 選擇單節點
  • GetElementsByTagName

要將 PSCustomObject 轉換為 XML,我們使用的是腳本的修改版本:

https://www.powershellgallery.com/packages/Traverse/0.5.1085.1/Content/Private%5CConvert-HashTableToXML.ps1

在涉及到數組之前,它可以完美運行。

如評論中所述,您的$array無效 JSON - 我可以想象返回的類型“腳本塊”可能會產生誤導,但在這種情況下,它是關於powershell腳本塊,而不是ZDE9B9ED78D2E2E1DCEEFFEE708

我不確定它的內容發生了什么,但如果它是 JSON,它會是這樣的:

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

這是從中獲取可用數據的方法:

# Produces PSCustomObjects, which is probably what you're looking for:
$result = ConvertFrom-Json $array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM