Azure Powershell-用于跨订阅获取VM信息的脚本

时间:2018-12-11 23:17:57

标签: azure powershell

尝试运行将连接到每个订阅的脚本,并拉出

$azureSubs = Get-AzureRMSubscription
$azureSubs | ForEach-Object {Select-AzureRMSubscription $_ | Out-Null; Get-AzureRMVM | select resourcegroupname, name, licensetype -WarningAction SilentlyContinue}

这有效,但是我想再添加两条信息:“ OSType”和“ VMSize”

如果我执行GET-AZURERMVM,则在运行命令的那个订阅的表中,我需要的两条信息在那里:VmSize和OsType

但是,当我尝试将它们添加到查询中时,这些列为空白。 我相信VmSize在HardwareProfile中,并且OsType在OsProfile中,就像我运行“ Get-AzureRMVM -name(名称)-resourcegroupname(RGname)”一样,然后它显示“硬件配置文件:VMSize”和“ OSProfile: ComputerName,AdminUsername WindowsConfiguration,机密”

最终目标是获得一个脚本,该脚本将为每个订阅显示以下结果:

ResourceGroupName  |  Name | License Type | VMSize | OS Type
TEST_RG | Test_VM | Windows_Server | DS3_v2 | Windows
Test_RG | Test_VM2 |     |  DS3_v2 | Linux

感谢您的帮助;很抱歉遇到这样一个菜鸟问题。花了很多时间试图解决这个问题...

2 个答案:

答案 0 :(得分:0)

您正在select端寻找类似的内容

select resourcegroupname, name, licensetype, @{Name="VMSize";Expression={$_.HardwareProfile.VmSize}}, @{Name="OsType";Expression={$_.StorageProfile.OsDisk.OsType}}

答案 1 :(得分:0)

类似以下的方法将起作用。 您主要缺少的是calculated properties。 这是使您能够执行一些自定义属性的方法。

一些注意事项:

在您的代码中,您在Select语句上使用了-WarningAction SilentlyContinue。您需要将其放在Get-AzureRMVM CmdLet上。

这是我的看法,但是除非您是故意编写单行代码,否则请尝试为代码加更多的代码。这将使其更易于阅读,调试和维护。

这是您编写的代码,已修改为包括计算的属性,并且WarningAction参数设置为Get-AzureRMVM而不是Select语句。

$azureSubs = Get-AzureRMSubscription
$Vms = $azureSubs | ForEach-Object {Select-AzureRMSubscription $_ | Out-Null; Get-AzureRMVM -WarningAction SilentlyContinue | select resourcegroupname, name, licensetype,  @{Name="VMSize";Expression={$_.HardwareProfile.VmSize}},@{Name="OsType";Expression={$_.StorageProfile.OsDisk.OsType}}}
$Vms | ft 

同一件事,带有一定的进度指示,而无需将所有内容强制放在一行上。

$azureSubs = Get-AzureRMSubscription
$Vms = New-Object 'System.Collections.Generic.List[PSObject]'
ForEach ($sub in $azureSubs) {
    Select-AzureRMSubscription $sub | Out-Null  
    Write-Host "Processing Subscription $($sub.Name)".PadRight(50,' ') -ForegroundColor Cyan -NoNewline
    [PsObject[]]$items = Get-AzureRMVM -WarningAction SilentlyContinue | 
        select resourcegroupname,
           name, 
           licensetype,
            @{Name="VMSize";Expression={$_.HardwareProfile.VmSize}}, 
            @{Name="OsType";Expression={$_.StorageProfile.OsDisk.OsType}}

        Write-Host "($($items.count) retrieved)"
        if ($items -ne $null) {
            $vms.AddRange($items)
        }
}


$vms | Format-Table