在PowerShell SELECT中解析JSON

时间:2016-02-22 10:01:33

标签: json powershell azure-powershell

我正在尝试使用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吗?

2 个答案:

答案 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

Result