Generate Virtual Machine Inventory Report

Microsoft.SystemCenter.WindowsAzure.Subcription.GenerateComputeVmReport.Task (Task)

Generates a report with the list of all Virtual Machines (classic and non-classic).

Element properties:

TargetMicrosoft.SystemCenter.MicrosoftAzure.Subscription
AccessibilityPublic
CategorySystem
EnabledTrue
RemotableFalse
Timeout300

Member Modules:

ID Module Type TypeId RunAs 
WA WriteAction Microsoft.Windows.PowerShellWriteAction Default

Source Code:

<Task ID="Microsoft.SystemCenter.WindowsAzure.Subcription.GenerateComputeVmReport.Task" Accessibility="Public" Enabled="true" Target="Microsoft.SystemCenter.MicrosoftAzure.Subscription" Timeout="300" Remotable="true">
<Category>System</Category>
<WriteAction ID="WA" TypeID="Windows!Microsoft.Windows.PowerShellWriteAction">
<ScriptName>GenerateComputeVmReport.ps1</ScriptName>
<ScriptBody><Script>

function Get-CustomVM($vm)
{
foreach ($prop in $vm.GetProperties())
{
$vm | Add-Member -MemberType NoteProperty -Name $prop.Name -Value $vm[$prop].Value -Force
}
$vm
}

$subscriptionId = '$Target/Property[Type="Microsoft.SystemCenter.MicrosoftAzure.Subscription"]/SubscriptionId$'

$OpsMgrMainLib = "Microsoft.EnterpriseManagement.OperationsManager,Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
[void][Reflection.Assembly]::Load($OpsMgrMainLib)

$mg = new-object Microsoft.EnterpriseManagement.ManagementGroup("localhost")

$mpClassCriteria = new-object Microsoft.EnterpriseManagement.Configuration.MonitoringClassCriteria("Name = 'Microsoft.SystemCenter.MicrosoftAzure.GenericVirtualMachine'")
$mpClass = $mg.GetMonitoringClasses($mpClassCriteria)[0]
$mpObjectCriteria = new-object Microsoft.EnterpriseManagement.Monitoring.MonitoringObjectGenericCriteria("Path LIKE '%$subscriptionId%'")

$vmList = $mg.GetMonitoringObjects($mpObjectCriteria, $mpClass) | % { Get-CustomVM $_ }
$vmList | Sort ServiceName | Format-Table -Wrap -Autosize -Property HealthState, ServiceName, Location, Size, OsVersion

</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</WriteAction>
</Task>