我有一个Azure powershell脚本,该脚本提取XML文件,然后通过“ foreach”循环运行值。
我在Azure存储中有一个具有以下格式(XML)的blob文件-
<ns1:MessageId>
这个想法是让azure powershell脚本循环遍历XML并为每个XML创建网络安全组条目。 那部分工作正常。
我想做的不是提取XML文件,而是让它成为具有所有子网值的Json。
这是当前脚本(请注意,用户为网络安全组输入了$ nsgname和$ resourcegroupname,该脚本随后将为XML文件中的每个子网创建NSG条目)
<?xml version="1.0"?>
<Root>
<PublicSubnets>
<Subnet>192.168.1.0/24</Subnet>
<Subnet>192.168.50.0/24</Subnet>
<Subnet>10.82.19.5/24</Subnet>
<Subnet>10.1.1.0/16</Subnet>
<Subnet>172.16.15.0/16</Subnet>
</PublicSubnets>
<Descrip>
<Description>"This is the description"</Description>
</Descrip>
</Root>
这应该打印出来: 计数器为1,子网为192.168.1.0/24 计数器为2,子网为192.168.50.0/24
我将如何去做,但不是XML,而是Json
答案 0 :(得分:1)
您需要做的是将json文件内容下载为字符串,然后使用ConvertFrom-Json
将其转换为Powershell对象。
请遵循以下代码:
$url="https://xxx.blob.core.windows.net/t1s/test.json"
$subnets=@()
$web_client = New-Object System.Net.WebClient
$download_json = $web_client.DownloadString($url)
#convert the download string to a PowerShell object
$json = $download_json | ConvertFrom-Json
$counter=0
foreach($subnet in $json.Root.PublicSubnets.Subnet)
{
$counter++
Write-Output "Counter is at $counter and subnet is $subnet"
}
test.json文件:
{
"Root": {
"PublicSubnets": {
"Subnet": [
"192.168.1.0/24",
"192.168.50.0/24",
"10.82.19.5/24",
"10.1.1.0/16",
"172.16.15.0/16"
]
},
"Descrip": { "Description": "\"This is the description\"" }
}
}
更新:
或者您可以使用Invoke-RestMethod -Uri $url
,它将自动解析JSON对PSObject的响应: