Azure Powershell - 跨 EA 中的多个订阅

Azure Powershell - across MULTIPLE subscriptions in an EA

我可以 "billing reader" 访问 EA 中的数百个订阅。

我正在尝试获取所有订阅中的虚拟机列表及其大小。

所以目前当我 运行 a "Get-AzureRMSubscription" 它向我显示了所有订阅(数百个),但我不确定如何实际 运行 一个脚本来对抗所有订阅?

要是能"Get-AzureRMVM" 把他们全部搞定就太好了

有什么建议吗? 提前致谢!

你可以这样做:

$azureSubs = Get-AzureRMSubscription
$azureSubs | ForEach-Object {Select-AzureRMSubscription $_ | Out-Null; Get-AzureRMVM -WarningAction SilentlyContinue}

您实质上是在设置一个数组变量来保存您的所有 Azure 订阅并将其通过管道传递给 ForEach-Object cmdlet 以迭代数组中的所有对象。然后将其通过管道传递给 Get-AzureRMVM cmdlet,以列出每个订阅中的所有 VM。

这绝对没有针对性能进行优化,可能有更好的解决方案,但至少您可以 运行 并忘记它。

Out-Null 和 -WarningAction 的原因是为了抑制您不需要的输出。

您并没有要求,但对于经典资源,我们定期使用以下脚本 运行,其输出存储在 SQL 数据库中。

$subscriptions = Get-AzureSubscription
foreach ($sub in $subscriptions)
{
    $sub | Select-AzureSubscription
    Get-AzureService | % {
           Get-AzureDeployment -ServiceName $_.ServiceName 
        } | % { 
          New-Object -TypeName 'PSObject' -Property @{ 'ServiceName' = $_.ServiceName; 'Addresses' = $_.VirtualIPs.Address; } 
        } | sort Addresses | ft
}

%ForEach-ObjectftFormat-Table 尽管有些好心人可能会出现并尝试对其进行编辑并使其更难重用。您可以 select 语句中的 add/remove 属性根据需要定制输出。在一次订阅中试用它以优化您的需求,然后创建一个脚本以使其易于重用。

我们最近发布了 Azure Resource Graph 来支持跨多个订阅的这些类型的搜索。请在此处查看文档 https://docs.microsoft.com/en-us/azure/governance/resource-graph/overview

我有一个循环订阅和收集 VM 数据的脚本

https://it4it.solutions/2021/09/07/looping-through-azure-subscriptions-with-powershell/

作为示例负载,它清点 Azure VM(名称、资源组、sku、运行宁状态)

对于 运行在租户中的所有订阅上使用它 - 您需要 运行 它像:

.\azureSubscriptionLoop.ps1 -tenantID_Param “tenant_ID_here”