【发布时间】:2019-05-05 06:46:20
【问题描述】:
我对 EA 中的数百个订阅拥有“计费阅读器”访问权限。
我正在尝试获取所有订阅的虚拟机列表及其大小。
所以目前当我运行“Get-AzureRMSubscription”时,它会显示所有订阅(数百个),但我不确定如何针对所有订阅实际运行脚本?
如果能在它们之间获得一个“Get-AzureRMVM”会很棒
有什么建议吗? 提前致谢!
【问题讨论】:
标签: azure powershell enterprise
我对 EA 中的数百个订阅拥有“计费阅读器”访问权限。
我正在尝试获取所有订阅的虚拟机列表及其大小。
所以目前当我运行“Get-AzureRMSubscription”时,它会显示所有订阅(数百个),但我不确定如何针对所有订阅实际运行脚本?
如果能在它们之间获得一个“Get-AzureRMVM”会很棒
有什么建议吗? 提前致谢!
【问题讨论】:
标签: azure powershell enterprise
你可以这样做:
$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-Object,ft 是 Format-Table 尽管可能会有一些好心人尝试编辑它并使其更难重用。您可以在 select 语句中添加/删除属性以根据需要定制输出。在一个订阅中试用以优化您的需求,然后创建一个脚本以使其易于重复使用。
【讨论】:
我们最近发布了 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(名称、resourceGroup、sku、运行状态)
要在租户中的所有订阅上运行它 - 您需要像这样运行它:
.\azureSubscriptionLoop.ps1 -tenantID_Param "tenant_ID_here"
【讨论】: