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