[英]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 並使用函數:
要將 PSCustomObject 轉換為 XML,我們使用的是腳本的修改版本:
在涉及到數組之前,它可以完美運行。
如評論中所述,您的$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.