Get-AzureVmManagementSolutionOnboardingState.ps1
<#PSScriptInfo .VERSION 1.0.0 .GUID c3d8a692-159c-454a-af46-a6859730a2cb .AUTHOR stasku@microsoft.com .COMPANYNAME Microsoft Corp. .COPYRIGHT Microsoft Corp. 2017 .TAGS .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES #> <# .DESCRIPTION The script gets management solution onboarding information for an Azure VM #> Param( [string] [Parameter(Mandatory = $true)] $vmResourceId, [string] [Parameter(Mandatory = $true)] [ValidateSet("updates", "changeTracking")]$solutionType ) $information = [pscustomobject] [ordered] @{ #$information = New-Object -Type PSObject -Proper [ordered] @{ 'AzureVMFound'=$false 'AzureVMHasManagementExtensionInstalled'='n/a' 'AzureVMManagementExtensionHasManagementWorkspaceInformation'='n/a' 'ManagementWorkspaceFoundInSubscription'='n/a' 'VmHeartbeatDataIngestedIntoWorkspace'='n/a' 'VmHeartbeatDataIndicatesThatVmHasSolutionEnabled'='n/a' 'SolutionDataIngestedIntoWorkspace'='n/a' } $vmDiscriminator = New-Object -Type PSObject -Proper @{'id'=$vmResourceId} $vm = $vmDiscriminator | Get-AzureRmResource if($vm -ne $null){ $information.AzureVMFound = $true $vmMmaExtensionResourceId = "$($vmResourceId)/extensions/MMAExtension" $vmMmaExtensionDiscriminator = New-Object -Type PSObject -Proper @{'id'=$vmMmaExtensionResourceId} $vmMmaExtensionResource = $vmMmaExtensionDiscriminator | Get-AzureRmResource $information.AzureVMHasManagementExtensionInstalled = $false if($vmMmaExtensionResource -ne $null){ $information.AzureVMHasManagementExtensionInstalled = $true $vmManagementWorkspaceId = $vmMmaExtensionResource.Properties.settings.workspaceId $information.AzureVMManagementExtensionHasManagementWorkspaceInformation = $false if($vmManagementWorkspace -ne $null){ $information.AzureVMManagementExtensionHasManagementWorkspaceInformation = $true $vmManagementWorkspace = Get-AzureRmOperationalInsightsWorkspace | where-object {$_.CustomerId -eq $vmManagementWorkspaceId} $information.ManagementWorkspaceFoundInSubscription = $false if($vmManagementWorkspace -ne $null){ $information.ManagementWorkspaceFoundInSubscription = $true $vmManagementWorkspaceResourceDiscriminator = New-Object -Type PSObject -Proper @{'id'=$vmManagementWorkspace.ResourceId} $vmManagementWorkspaceResource = $vmManagementWorkspaceResourceDiscriminator | Get-AzureRmResource $vmManagementWorkspaceSearchVersion = @{'0'='OQL';'1'='KQL'}[$vmManagementWorkspaceResource.Properties.features.searchVersion.ToString()] $queryVmHeartbeatDataIngestedIntoWorkspace = [String]::Format(@{ 'OQL'='Type=Heartbeat and (ResourceId="{0}" or Computer="{1}") | top 1' 'KQL'='Heartbeat | where (ResourceId=~"{0}" or Computer=~"{1}") | take 1' }[$vmManagementWorkspaceSearchVersion], $vmResourceId, $vm.Name, $solutionType) $information.VmHeartbeatDataIngestedIntoWorkspace = ($vmManagementWorkspace | Get-AzureRmOperationalInsightsSearchResults -Query $queryVmHeartbeatDataIngestedIntoWorkspace).Value.Count -eq 1 $queryVmHeartbeatDataIndicatesThatVmHasSolutionEnabled = [String]::Format(@{ 'OQL'='Type=Heartbeat and (ResourceId="{0}" or Computer="{1}") and Solutions:contains("{2}") | top 1' 'KQL'='Heartbeat | where (ResourceId=~"{0}" or Computer=~"{1}") and Solutions has "{2}" | take 1' }[$vmManagementWorkspaceSearchVersion], $vmResourceId, $vm.Name, $solutionType) $information.VmHeartbeatDataIndicatesThatVmHasSolutionEnabled = ($vmManagementWorkspace | Get-AzureRmOperationalInsightsSearchResults -Query $queryVmHeartbeatDataIndicatesThatVmHasSolutionEnabled).Value.Count -eq 1 $solutionTableName = @{'updates'='Update';'changeTracking'='ConfigurationChange'}[$solutionType] $querySolutionDataIngestedIntoWorkspace = [String]::Format(@{ 'OQL'='Type={0} and (ResourceId="{1}" or Computer="{2}") | top 1' 'KQL'='{0} | where (ResourceId=~"{1}" or Computer=~"{2}") | take 1' }[$vmManagementWorkspaceSearchVersion], $solutionTableName, $vmResourceId, $vm.Name) $information.SolutionDataIngestedIntoWorkspace = ($vmManagementWorkspace | Get-AzureRmOperationalInsightsSearchResults -Query $querySolutionDataIngestedIntoWorkspace).Value.Count -eq 1 } } } } return $information |