PowerShell调用Azure Migrate API返回字符串而非数组如何处理
解决方法
Azure Migrate API返回的applianceNameToSiteIdMapV3字段本身为序列化后的JSON字符串,需要手动反序列化为PowerShell对象数组,直接使用内置的ConvertFrom-Json cmdlet即可。
修改后的完整代码:
$siteuri= 'https://management.azure.com/subscriptions/' + $metadata.compute.subscriptionID +'/resourceGroups/' + $AzMigreateResourceGroup+ '/providers/Microsoft.Migrate/migrateProjects/' + $ProjectName + '/solutions/Servers-Discovery-ServerDiscovery?api-version=2018-09-01-preview' $siteoutput=(Invoke-RestMethod -Headers $Authtoken -uri $siteuri).properties.details.extendeddetails.applianceNameToSiteIdMapV3 # 新增以下行完成JSON字符串到数组的转换 $siteoutputArray = $siteoutput | ConvertFrom-Json
转换后数组的常用操作示例:
- 按索引访问指定设备:
# 访问第一个设备的信息 $firstAppliance = $siteoutputArray[0]
- 遍历所有设备提取信息:
foreach ($entry in $siteoutputArray) { $deviceTag = $entry.PSObject.Properties.Name $deviceDetail = $entry.PSObject.Properties.Value Write-Host "标识:$deviceTag,IP地址:$($deviceDetail.ApplianceDetails.IPAddress),注册状态:$($deviceDetail.ApplianceDetails.isRegistered)" }
- 筛选符合条件的设备:
# 筛选IP为192.168.50.143的设备 $targetDevice = $siteoutputArray | Where-Object { $_.PSObject.Properties.Value.ApplianceDetails.IPAddress -eq '192.168.50.143' }
内容的提问来源于stack exchange,提问作者Roger Chen
相关产品推荐
相关产品推荐

