Azure Powershell - скрипт для получения информации о виртуальных машинах по подпискам - PullRequest
0 голосов
/ 12 декабря 2018

Попытка запустить скрипт, который будет подключаться к каждой подписке, и получить

$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 (name) -resourcegroupname (RGname)», затем он показывает «Профиль оборудования: VMSize» и «OSProfile:ComputerName, AdminUsername windowsConfiguration, Secrets "

Конечная цель - получить скрипт, который для каждой подписки будет печатать результаты, такие как:

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 голосов
/ 12 декабря 2018

Что-то вроде следующего будет работать.В основном вам не хватало расчетных свойств .Это то, что позволяет вам выполнять выбор пользовательского свойства.

Некоторые примечания:

В своем коде вы использовали -WarningAction SilentlyContinue в операторе Select.Вместо этого вам нужно поместить его в 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 
0 голосов
/ 12 декабря 2018

Вы ищете что-то подобное со стороны select

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...