在PowerShell SELECT中解析JSON

在PowerShell SELECT中解析JSON,json,powershell,azure-powershell,Json,Powershell,Azure Powershell,我正在尝试使用powershell命令列出所有Azure虚拟机及其大小。 问题是HardwareProfile属性返回一个JSON对象,我只想解析并使用该对象的vmSize属性值 所以我运行这个命令: Get-AzureRmVM 这就给了我: ResourceGroupName : TESTRG ... Name : ubuntu-server ... HardwareProfile : {

我正在尝试使用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符号。使用
格式表
看起来是这样的:

ResourceGroupName Name          HardwareProfileText
----------------- ----          -------------------
TESTRG            ubuntu-server {...

所以问题是:如何在这个表中只获取
vmSize
的值?我可以偷偷地从Json转换到某个地方吗?

我不知道get-azureRmVm函数,但它可以使用属性InstanceSize而不是HardwareProfileText正常工作

Import-Module 'Azure'
Get-AzureVM | Select ResourceGroupName, Name, InstanceSize `
          | Out-Gridview -PassThru

您不能直接使用select表达式并将json字符串转换为对象吗?因此,您可以稍后在管道中使用它

比如:

select @{Name="VMSize";Expression={($_|ConvertFrom-Json).vmSize}};
将json作为文件中的文本(用于简单测试):

这将为您提供一个仅包含VmSize的属性。如果要根据其他条件进行筛选,则可以将“选择”表达式与“法线”属性或多个表达式组合,然后继续沿管道传递它

所有Rm函数都来自“新”ResourceManager模型函数-我将检查该接口是否与“经典”/ASM模型不同。
(Get-Content -raw C:\tmp\test.json)|select @{Name="VMSize";Expression={($_|ConvertFrom-Json).vmSize}};