Process-CorrelationResults.ps1 (3367B)
1 Param( 2 [Parameter(Position = 0, HelpMessage = "The root location of the results.")] 3 [String] $ResultsPath 4 ) 5 6 $resultFile = Join-Path $ResultsPath "results.csv" 7 $failedFile = Join-Path $ResultsPath "failed.csv" 8 $statsFile = Join-Path $ResultsPath "stats.json" 9 10 if (Test-Path $resultFile) 11 { 12 Remove-Item $resultFile -Force 13 } 14 15 if (Test-Path $failedFile) 16 { 17 Remove-Item $failedFile -Force 18 } 19 20 $stats = @{ 21 Total = 0 22 Missing = 0 23 Completed = 0 24 Failed = 0 25 CorrelatePackageKnown = 0 26 CorrelateArchive = 0 27 CorrelateMetadata = 0 28 CorrelationDisagreement = 0 29 CorrelateArchiveRatio = 0 30 CorrelatePackageKnownRatio = 0 31 CorrelateMetadataRatio = 0 32 CorrelationDisagreementRatio = 0 33 } 34 35 # Aggregate results in a single CSV file 36 foreach ($result in (Get-ChildItem $ResultsPath -Directory)) 37 { 38 $stats.Total++ 39 40 $resultJSON = Join-Path $result.FullName "install_and_correlate.json" 41 if (Test-Path $resultJSON) 42 { 43 $resultObj = (Get-Content -Path $resultJSON -Encoding utf8 | ConvertFrom-Json) 44 } 45 46 if (-not $resultObj) 47 { 48 # Result JSON file does not exist or is empty 49 $stats.Missing++ 50 continue 51 } 52 53 $metadataJSON = Join-Path $result.FullName "metadata_output.json" 54 if (Test-Path $metadataJSON) 55 { 56 $metadataObj = (Get-Content -Path $metadataJSON -Encoding utf8 | ConvertFrom-Json) 57 } 58 59 if ($resultObj.HRESULT -eq 0) 60 { 61 $stats.Completed++ 62 $stats.CorrelateArchive += $resultObj.CorrelateArchive 63 $stats.CorrelatePackageKnown += $resultObj.CorrelatePackageKnown 64 if ($metadataObj -and $metadataObj.status -eq "Success") 65 { 66 $stats.CorrelateMetadata += 1 67 Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "CorrelateMetadata" -Value 1 -Force 68 Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "MetadataName" -Value $metadataObj.metadata[0].metadata[0].AppsAndFeaturesEntries[0].DisplayName -Force 69 Add-Member -InputObject $resultObj -MemberType NoteProperty -Name "MetadataPublisher" -Value $metadataObj.metadata[0].metadata[0].AppsAndFeaturesEntries[0].Publisher -Force 70 71 if ($resultObj.PackageKnownName -ne "" -and $resultObj.MetadataName -ne "" -and $resultObj.PackageKnownName -ne $resultObj.MetadataName) 72 { 73 $stats.CorrelationDisagreement += 1 74 } 75 } 76 Export-Csv -InputObject ($resultObj | Select-Object -Property * -ExcludeProperty @("Error", "Phase", "Action", "HRESULT") ) -Path $resultFile -Append -Encoding utf8 77 } 78 else 79 { 80 $stats.Failed++ 81 Export-Csv -InputObject $resultObj -Path $failedFile -Append -Encoding utf8 82 } 83 } 84 85 # Write some stats to a file for quick evaluation 86 $stats.CompletedRatio = $stats.Completed / $stats.Total 87 if ($stats.Completed -ne 0) 88 { 89 $stats.CorrelateArchiveRatio = $stats.CorrelateArchive / $stats.Completed 90 $stats.CorrelatePackageKnownRatio = $stats.CorrelatePackageKnown / $stats.Completed 91 $stats.CorrelateMetadataRatio = $stats.CorrelateMetadata / $stats.Completed 92 $stats.CorrelationDisagreementRatio = $stats.CorrelationDisagreement / $stats.Completed 93 } 94 $stats | ConvertTo-Json | Out-File $statsFile -Force