我正在尝试使用powershell命令列出所有Azure虚拟机的大小。
问题是HardwareProfile
属性返回一个JSON对象,我想要解析并只使用该对象的vmSize
属性值。
所以我正在运行这个命令:
Get-AzureRmVM
这给了我这个:
ResourceGroupName : TESTRG
...
Name : ubuntu-server
...
HardwareProfile : {
"vmSize": "Standard_DS2"
}
...
注意 HarwareProfile
值中的JSON。
我想做的是:
Get-AzureRmVM | Select ResourceGroupName, Name, HardwareProfileText `
| Out-Gridview -PassThru
哪个有用 - 只是,我想摆脱HardwareProfileText中的JSON表示法。使用Format-Table
看起来像这样:
ResourceGroupName Name HardwareProfileText
----------------- ---- -------------------
TESTRG ubuntu-server {...
所以问题是:如何在此表中仅获得vmSize
的值?我可以在某个地方潜行ConvertFrom-Json
吗?
答案 0 :(得分:5)
你不能直接使用select-expression并将json-string转换为对象吗?所以你可以在以后的管道中使用它。
类似的东西:
select @{Name="VMSize";Expression={($_|ConvertFrom-Json).vmSize}};
将json作为文件中的文本(用于简单测试):
(Get-Content -raw C:\tmp\test.json)|select @{Name="VMSize";Expression={($_|ConvertFrom-Json).vmSize}};
这将为您提供仅包含VmSize的属性。您可以将表达式select与普通属性或多个表达式组合,然后如果要过滤其他条件,则继续将其传递给管道。
答案 1 :(得分:0)
我不知道get-azureRmVm函数,但它可以使用属性InstanceSize而不是HardwareProfileText。
Import-Module 'Azure'
Get-AzureVM | Select ResourceGroupName, Name, InstanceSize `
| Out-Gridview -PassThru