【问题标题】:Zscaler API Json issue using powershell使用 powershell 的 Zscaler API Json 问题
【发布时间】:2021-01-09 04:50:31
【问题描述】:

请参阅以下我目前使用的 powershell 代码。

$ZscalerURL = "https://ips.zscalertwo.net/cenr/json"
             $r = (Invoke-RestMethod -Uri $ZscalerURL).'zscalertwo.net'
             $results = New-Object PSObject

              $r.parameters.psobject.Properties.Name | 
             ForEach{ 
                 Add-Member -InputObject $results -NotePropertyName $_ -NotePropertyValue $r.parameters.$_.Value 
             }

我无法使用此方法和其他一些方法将 json 转换为可读格式,例如,我无法引用 $r.continent.city。

已尝试将 convertfrom-json 与 invoke-webrequest 一起使用,并尝试使用使用 foreach 循环的 hacky 方法 例如$americas=foreach ($name in $r.'continent : Americas'){$name}

【问题讨论】:

  • 不是 JSON。 $r.'continent : emea'.'city : amsterdam' 是您访问阿姆斯特丹数据详细信息的方式。您的预期输出是什么?

标签: json powershell


【解决方案1】:

目前尚不清楚您的预期输出是什么。但是,您可以通过遍历所有大陆属性和城市属性来执行以下操作。然后将这些大陆和城市名称传递给网络地址对象。

$ZscalerURL = "https://ips.zscalertwo.net/cenr/json"
$r = (Invoke-RestMethod -Uri $ZscalerURL).'zscalertwo.net'

foreach ($continent in $r.psobject.properties.name) {
    foreach ($city in $r.$continent.psobject.properties.name) {
        $r.$continent.$city |
            Select-Object @{n='Continent';e={($continent -split ':')[-1].Trim()}},@{n='City';e={($city -split ':')[-1].Trim()}},*
    }
}

如果您想按原样列出大陆和城市属性而不进行任何操作,您可以省略-split 方法。 rest 方法响应将大陆属性值提供为continent : <continent name>。同样,城市属性值为city : <city name>-split 方法去掉了 continent : city : 前缀。如果不进行任何操作,您将使用以下语法作为示例来检索特定城市的网络地址信息:

$r.'continent : emea'.'city : amsterdam'

【讨论】:

  • 我最终在 $r.$continent.$city 对象中使用了您的建议和 foreach-object { add-content -Value $_.range -path $CachePath }。我希望返回每个对象的范围属性列表。谢谢!
猜你喜欢
  • 2016-01-24
  • 2014-05-30
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 2014-03-26
  • 2013-07-11
相关资源
最近更新 更多