Azure PowerShell 的查询输出

每个 Azure PowerShell cmdlet 的结果都是 Azure PowerShell 对象。 即使是那些未显式执行 Get- 操作的 cmdlet 也可能返回可供检查的值,以提供有关已创建或修改资源的信息。 虽然大多数 cmdlet 返回单个对象,但某些 cmdlet 返回应循环访问的数组。

通常,可使用 Select-object cmdlet 查询 Azure PowerShell 的输出。 可使用 Where-Object 筛选输出。

选择简单属性

在默认表格式中,Azure PowerShell cmdlet 不显示其所有可用属性。 可使用 Format-List cmdlet,或通过管道将输出传输到 Select-Object -Property *,来获取完整属性:

Get-AzVM -Name TestVM -ResourceGroupName TestGroup |
  Select-Object -Property *
ResourceGroupName        : TESTGROUP
Id                       : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTGROUP/providers/Micro
                           soft.Compute/virtualMachines/TestVM
VmId                     : 00000000-0000-0000-0000-000000000000
Name                     : TestVM
Type                     : Microsoft.Compute/virtualMachines
Location                 : westus2
LicenseType              :
Tags                     : {}
AvailabilitySetReference :
DiagnosticsProfile       :
Extensions               : {}
HardwareProfile          : Microsoft.Azure.Management.Compute.Models.HardwareProfile
InstanceView             :
NetworkProfile           : Microsoft.Azure.Management.Compute.Models.NetworkProfile
OSProfile                : Microsoft.Azure.Management.Compute.Models.OSProfile
Plan                     :
ProvisioningState        : Succeeded
StorageProfile           : Microsoft.Azure.Management.Compute.Models.StorageProfile
DisplayHint              : Compact
Identity                 :
Zones                    : {}
FullyQualifiedDomainName :
AdditionalCapabilities   :
RequestId                : 00000000-0000-0000-0000-000000000000
StatusCode               : OK

知道你感兴趣的属性的名称后,可以将这些属性名称与 Select-Object 一起使用来直接获取它们:

Get-AzVM -Name TestVM -ResourceGroupName TestGroup |
  Select-Object -Property Name, VmId, ProvisioningState
Name   VmId                                 ProvisioningState
----   ----                                 -----------------
TestVM 00000000-0000-0000-0000-000000000000 Succeeded

使用 Select-Object 的输出总是格式化为显示所请求的信息。 若要了解如何在查询 cmdlet 结果期间使用格式设置,请参阅设置 Azure PowerShell cmdlet 的输出格式

选择嵌套属性

Azure PowerShell cmdlet 输出中的某些属性使用嵌套对象,例如 StorageProfile 输出中的 Get-AzVM 属性。 若要从嵌套属性获取值,请在作为字典参数传递给 Select-Object 时提供要检查的值的显示名称和完整路径。

Get-AzVM -ResourceGroupName TestGroup |
  Select-Object -Property Name, @{label='OSType'; expression={$_.StorageProfile.OSDisk.OSType}}
Name     OSType
----     ------
TestVM    Linux
TestVM2   Linux
WinVM   Windows

每个字典参数从对象中选择一个属性。 要提取的属性必须是表达式的一部分。

筛选结果

使用 Where-Object cmdlet 可以根据任何属性值(包括嵌套属性)筛选结果。 下一个示例演示如何使用 Where-Object 查找资源组中的 Linux VM。

Get-AzVM -ResourceGroupName TestGroup |
  Where-Object {$_.StorageProfile.OSDisk.OSType -eq 'Linux'}
ResourceGroupName    Name Location          VmSize OsType        NIC ProvisioningState Zone
-----------------    ---- --------          ------ ------        --- ----------------- ----
TestGroup          TestVM  westus2 Standard_D2s_v3  Linux  testvm299         Succeeded
TestGroup         TestVM2  westus2 Standard_D2s_v3  Linux testvm2669         Succeeded

可以通过管道相互传递 Select-ObjectWhere-Object 的结果。 出于性能考虑,我们建议始终将 Where-Object 操作放在 Select-Object 的前面:

Get-AzVM -ResourceGroupName TestGroup |
  Where-Object {$_.StorageProfile.OsDisk.OsType -eq 'Linux'} |
  Select-Object -Property Name, VmID, ProvisioningState
Name    VmId                                  ProvisioningState
----    ----                                  -----------------
TestVM  00000000-0000-0000-0000-000000000000  Succeeded
TestVM2 00000000-0000-0000-0000-000000000000  Succeeded