e2etest/GuestProxyAgentTest/Scripts/GuestProxyAgentLoadedModulesValidation.ps1 (67 lines of code) (raw):
# Copyright (c) Microsoft Corporation
# SPDX-License-Identifier: MIT
param (
[Parameter(Mandatory=$true, Position=0)]
[string]$customOutputJsonSAS,
[Parameter(Mandatory=$true, Position=1)]
[string]$loadedModulesBaseLineSAS
)
Write-Output "$((Get-Date).ToUniversalTime()) - Start Guest Proxy Agent Loaded Module Validation"
$decodedUrlBytes = [System.Convert]::FromBase64String($customOutputJsonSAS)
$decodedUrlString = [System.Text.Encoding]::UTF8.GetString($decodedUrlBytes)
$moduleBaselineUrlBytes = [System.Convert]::FromBase64String($loadedModulesBaseLineSAS)
$moduleBaselineUrlString = [System.Text.Encoding]::UTF8.GetString($moduleBaselineUrlBytes)
$currentFolder = $PWD.Path
$customOutputJsonPath = $currentFolder + "\validateLoadedModule.json";
$moduleBaselineFilePath = $currentFolder + "\moduleListBaseline.txt";
New-Item -ItemType File -Path $customOutputJsonPath
New-Item -ItemType File -Path $moduleBaselineFilePath
Invoke-WebRequest -Uri $moduleBaselineUrlString -OutFile $moduleBaselineFilePath
Write-Output "$((Get-Date).ToUniversalTime()) - Downloaded baseline file"
$baseArray = @()
foreach ($line in Get-Content $moduleBaselineFilePath| Where-Object { $_.Trim() -ne '' }) {
$baseArray += $line.Trim().ToLower()
}
Write-Output "$((Get-Date).ToUniversalTime()) - Read baseline list: $baseArray"
$processName = "GuestProxyAgent"
$process = Get-Process -Name $processName -ErrorAction SilentlyContinue
$currentModulesArray = @()
if ($process -eq $null) {
Write-Output "$((Get-Date).ToUniversalTime()) - Process '$processName' not found."
} else {
Write-Output "$((Get-Date).ToUniversalTime()) - Loaded modules for process '$processName':"
$modules = $process.Modules
foreach ($module in $modules) {
$moduleName = $module.ModuleName
$currentModulesArray += $moduleName.Trim().ToLower()
Write-Output "$((Get-Date).ToUniversalTime()) - Module Name: $moduleName"
}
}
Write-Output "$((Get-Date).ToUniversalTime()) - Current loaded list: $currentModulesArray"
$comparisonResult = Compare-Object -ReferenceObject $baseArray -DifferenceObject $currentModulesArray
$missedInBaselineModules = @()
$newAddedModules = @()
$isMatch = $false
if ($comparisonResult -eq $null -or $comparisonResult.Count -eq 0) {
Write-Output "$((Get-Date).ToUniversalTime()) - No differences found."
$isMatch = $true
} else {
Write-Output "$((Get-Date).ToUniversalTime()) - Differences found:"
# Display the differences
foreach ($result in $comparisonResult) {
$inputObject = '"' + $result.InputObject + '"'
$sideIndicator = $result.SideIndicator
if ($sideIndicator -eq "<=") {
$missedInBaselineModules += $inputObject
} else {
$newAddedModules += $inputObject
}
}
}
$jsonString = '{ "isMatch": ' + $isMatch.ToString().ToLower() + ', "newAddedModules": [' + ($newAddedModules -join ",") + '], "missedInBaselineModules": [' + ($missedInBaselineModules -join ",") + ']}'
Set-Content -Path $customOutputJsonPath -Value $jsonString
$headers = @{
'x-ms-blob-type' = 'BlockBlob'
}
Invoke-RestMethod -Uri $decodedUrlString -Method Put -Headers $headers -InFile $customOutputJsonPath
Write-Output "$((Get-Date).ToUniversalTime()) - Uploaded json output result."