如何从命令行获取 Azure 容器状态?

How can I get Azure container state from command line?

我想知道如何从命令行(Get-AzContainerGroupaz container list)过滤容器组的 'State'。

在 Azure 门户中,此字段报告为“状态”。

但我无法从命令行获取它,似乎没有提供此字段。

Get-AzContainerGroup | fl
ResourceGroupName        : rg-foo
Id                       : /subscriptions/foo/resourceGroups/foo/providers/Microsoft.ContainerInstance/containerGroups/test-01
Name                     : test-01
Type                     : Microsoft.ContainerInstance/containerGroups
Location                 : westeurope
Tags                     : {}
ProvisioningState        : Succeeded
Containers               : {test-01}
ImageRegistryCredentials : {}
RestartPolicy            : OnFailure
IpAddress                : 20.82.63.136
DnsNameLabel             :
Fqdn                     :
Ports                    : {80}
OsType                   : Linux
Volumes                  : {}
State                    :
Events                   : {}
Identity                 :

我试过了:

Get-AzContainerGroup | Where-Object {$_.State -eq "Succeeded"}

但由于字段似乎被报告,它没有工作。

因此,您在 Azure 门户上看到的 状态 column/property 实际上转换为 properties.instanceView.state Azure Container Instance

虽然 Get-AzContainerGroup | fl * 的输出中出现了 属性,但它似乎没有被填充。但是,当传递 ResourceGroupNameName 参数时,您会看到 它显示 !

再深入一点,这是因为 Get-AzContainerGroup cmdlet 在后台调用 Container Groups - List REST API,它没有 instanceView 属性 在响应中。

然而,Get-AzContainerGroup -ResourceGroupName <Resource-Group-Name> -Name <ContainerGroup-Name> 调用 Container Groups - Get REST API returns 所有扩展属性。

因此,要解决此问题,您可以 运行 以下代码段:

# List all container groups in the current subscription
# Equivalent to [Container Groups - List]
$AllContainerGroups = Get-AzContainerGroup

# Initialize an empty array to hold all container group objects with their extended properties
$AllContainerGroupsExtended = @()

foreach($ContainerGroup in $AllContainerGroups)
{
    # Gets a specific container group
    # Equivalent to [Container Groups - Get]
    $ContainerGroupExtended = Get-AzContainerGroup -ResourceGroupName $ContainerGroup.Id.Split('/')[4] -Name $ContainerGroup.Name
    
    $AllContainerGroupsExtended += $ContainerGroupExtended
}

# You can now filter the result as needed
$AllContainerGroupsExtended | Where-Object {$_.InstanceViewState -eq "Stopped"}