tests/Test-HostInstalledComponents.ps1
function Test-HostInstalledComponents { [CmdletBinding()] param ( [parameter()][string] $TestName = "Test-HostInstalledComponents", [parameter()][string] $TestGroup = "configuration", [parameter()][string] $Description = "Validate CM prerequisites and support components", [parameter()][hashtable] $ScriptParams ) try { $applist = Get-CmHealthDefaultValue -KeySet "applications" -DataSet $CmHealthConfig [System.Collections.Generic.List[PSObject]]$tempdata = @() # for detailed test output to return if needed $stat = "PASS" $msg = "All required components are installed" $reg64 = Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall $reg32 = Get-ChildItem -Path HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall $reg64 | ForEach-Object { if ($_.Property -contains 'DisplayName') { $pn = $_.GetValue('DisplayName') $pv = $_.GetValue('DisplayVersion') if ($pn -in $applist.ProductName) { $app = $applist | Where-Object {$_.ProductName -eq $pn} if ($app.Version -ne $pv) { $compliant = 'FAIL' } $tempdata.Add([pscustomobject]@{ ProductName = $pn Version = $pv Required = $app.Version Compliant = $compliant Platform = 64 }) } } } $app = $null $pn = $null $pv = $null $reg32 | ForEach-Object { if ($_.Property -contains 'DisplayName') { $pn = $_.GetValue('DisplayName') $pv = $_.GetValue('DisplayVersion') if ($pn -in $applist.ProductName) { $app = $applist | Where-Object {$_.ProductName -eq $pn} if ($app.Version -ne $pv) { $compliant = $False } $tempdata.Add([pscustomobject]@{ ProductName = $pn Version = $pv Required = $app.Version Compliant = $compliant Platform = 32 }) } } } } catch { $stat = 'ERROR' $msg = $_.Exception.Message -join ';' } finally { Write-Output $([pscustomobject]@{ TestName = $TestName TestGroup = $TestGroup TestData = $tempdata Description = $Description Status = $stat Message = $msg Credential = $(if($ScriptParams.Credential){$($ScriptParams.Credential).UserName} else { $env:USERNAME }) }) } } |