public/Get-SCOMInfo.ps1
function Get-SCOMInfo { Param( $ComputerName, [System.Management.Automation.PSCredential] $Credential ) $scriptblock = { ##Check for program in Add/Remove Programs $keypaths = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*","HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" $SCOM = foreach ($path in $keypaths){Get-ItemProperty $path | Where-Object {$_.Displayname -like "Microsoft Monitoring Agent"} | Sort-Object DisplayName | Select-Object @{N='Name';E={$_.DisplayName}}, @{N='Version';E={$_.DisplayVersion}}, Publisher, InstallDate,UninstallString,InstallLocation,InstallSource} # Get Agent Settings if ($SCOM){ $Agent = New-Object -ComObject AgentConfigManager.MgmtSvcCfg $ServiceStatus = (Get-Service HealthService).Status.ToString() $apmstatus = try {(Get-Service "System Center Management APM" -ErrorAction Stop).StartType.ToString()}catch {"NotInstalled"} $dllversion = (Get-ItemProperty -Path "C:\Program Files\Microsoft Monitoring Agent\Agent\HealthServiceRuntime.dll").versioninfo.fileversion $ManagementGroupInfoRaw = $agent.GetManagementGroups() $ADIntegrationEnabled = try{$agent.GetActiveDirectoryIntegrationEnabled()}catch{try{$agent.ActiveDirectoryIntegrationEnabled()}catch{}} $LocalCollectionEnabled = try{$agent.GetLocalCollectionEnabled()}catch{try{$agent.LocalCollectionEnabled()}catch{}} $proxyURL = try{$agent.proxyURL}catch{} $proxyUsername = try{$agent.proxyUsername}catch{} #iterate through management group info can be mutli value, especially during migration $ManagementGroupInfo = @() foreach ($info in $ManagementGroupInfoRaw){ $mgobject = [PSCustomObject]@{ managementGroupName = $info.managementGroupName ManagementServer = $info.ManagementServer managementServerPort = $info.managementServerPort IsManagementGroupFromActiveDirectory = $info.IsManagementGroupFromActiveDirectory ActionAccount = $info.ActionAccount } $ManagementGroupInfo += $mgobject } } else { Write-Warning "[ $env:COMPUTERNAME ] :: SCOM is not installed." $ManagementGroupInfo = @() } $object = [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME SCOMVersionInstalled = $SCOM.version SCOMInstallDate = $scom.installdate DLLVersion = $dllversion ServiceStatus = $ServiceStatus APMStatus = $apmstatus ADIntegrationEnabled = $ADIntegrationEnabled LocalCollectionEnabled = $LocalCollectionEnabled ManagementGroupInfo1 = if ($ManagementGroupInfo[0]){($ManagementGroupInfo[0] -join ";").tostring()}else {} ManagementGroupInfo2 = if ($ManagementGroupInfo[1]){($ManagementGroupInfo[1] -join ";").tostring()}else {} ManagementGroupInfo3 = if ($ManagementGroupInfo[2]){($ManagementGroupInfo[2] -join ";").tostring()}else {} proxyURL = $proxyURL proxyUsername = $proxyUsername } return $object } # end scriptblock #Execute Scriptblock on Computername(s) with set parameters. $params = @{ ScriptBlock = $scriptblock } if ($ComputerName){ $params['ComputerName'] = $ComputerName } if ($Credential){ $params['Credential'] = $Credential } Invoke-Command @params } |