e2etest/GuestProxyAgentTest/Scripts/InstallGuestProxyAgentExtension.ps1 (87 lines of code) (raw):
# Copyright (c) Microsoft Corporation
# SPDX-License-Identifier: MIT
param (
[Parameter(Mandatory=$true, Position=0)]
[string]$devExtensionSas
)
$decodedUrlBytes = [System.Convert]::FromBase64String($devExtensionSas)
$decodedUrlString = [System.Text.Encoding]::UTF8.GetString($decodedUrlBytes)
Write-Output "$((Get-Date).ToUniversalTime()) - Starting install guest proxy agent extension script"
$proxy = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows Azure\HandlerState"
foreach ($obj in $proxy) {
if($obj.Name -like "*Microsoft.CPlat.ProxyAgent.ProxyAgentWindows*")
{
$nonRootRegKeyPath = $obj.Name
Write-Output "$((Get-Date).ToUniversalTime()) - Got proxy agent extension registry key path: " $nonRootRegKeyPath
}
}
$registrykeyPath = $nonRootRegKeyPath -replace '^HKEY_LOCAL_MACHINE', 'HKLM:'
$PIRversion = ($registrykeyPath -split "_")[1]
Write-Output "$((Get-Date).ToUniversalTime()) - PIR Version: $PIRversion"
$seqNo = (Get-ItemProperty -Path $registrykeyPath).SequenceNumber
Write-Output "$((Get-Date).ToUniversalTime()) - Seq No: $seqNo"
$statusFolderPath = (Get-ItemProperty -Path $registrykeyPath).StatusFolder
Write-Output "$((Get-Date).ToUniversalTime()) - Status Folder: $statusFolderPath"
$statusFilePath = [IO.Path]::Combine($statusFolderPath, $seqNo + ".status")
Write-Output "$((Get-Date).ToUniversalTime()) - Status file path: $statusFilePath"
$extensionFolder = Split-Path -Path $statusFolderPath -Parent
Write-Output "$((Get-Date).ToUniversalTime()) - Extension Folder: $extensionFolder"
$PIRExePath = [IO.Path]::Combine($extensionFolder, "ProxyAgentExt.exe")
$PIRExtensionFolderZIPLocation = [IO.Path]::Combine($extensionFolder, "Microsoft.CPlat.ProxyAgent.ProxyAgentWindows_" + $PIRversion + ".zip")
Write-Output "$((Get-Date).ToUniversalTime()) - Delete status file of PIR version"
$boolStatus = Test-Path -Path $statusFilePath
if ($boolStatus) {
Remove-Item -Path $statusFilePath -Force
}
Write-Output "$((Get-Date).ToUniversalTime()) - Check that status file is success with 5 minute timeout"
$timeoutInSeconds = 300
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
do {
$boolStatus = Test-Path -Path $statusFilePath
if ($boolStatus) {
$json = Get-Content $statusFilePath | Out-String | ConvertFrom-Json
$extensionStatus = $json.status.status
if ($extensionStatus -eq "success") {
Write-Output "$((Get-Date).ToUniversalTime()) - The extension status is success: $extensionStatus."
break
}
if ($extensionStatus -eq "error") {
Write-Output "$((Get-Date).ToUniversalTime()) - The extension status is error: $extensionStatus."
break
}
if ($stopwatch.Elapsed.TotalSeconds -ge $timeoutInSeconds) {
Write-Output "$((Get-Date).ToUniversalTime()) - Timeout reached. Error, The extension status is $extensionStatus."
break
}
}
start-sleep -Seconds 3
} until ($false)
Write-Output "$((Get-Date).ToUniversalTime()) - Check that Extension service exists "
$serviceName = "GuestProxyAgentVMExtension"
$service = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
if ($service -ne $null) {
$serviceStatus = $service.Status
Write-Output "$((Get-Date).ToUniversalTime()) - The service $serviceName exists with status: $serviceStatus."
} else {
Write-Output "$((Get-Date).ToUniversalTime()) - The service $serviceName does not exist."
}
Write-Output "$((Get-Date).ToUniversalTime()) - Check Extension process exists"
$processName = "ProxyAgentExt"
$process = Get-Process -Name $processName -ErrorAction SilentlyContinue
if ($process -ne $null) {
Write-Output "$((Get-Date).ToUniversalTime()) - The process $processName is running."
} else {
Write-Output "$((Get-Date).ToUniversalTime()) - The process $processName is not running."
}
Write-Output "$((Get-Date).ToUniversalTime()) - Delete extension zip file $PIRExtensionFolderZIPLocation"
Remove-Item -Path $PIRExtensionFolderZIPLocation -Force
wget $decodedUrlString -OutFile $PIRExtensionFolderZIPLocation
Write-Output "$((Get-Date).ToUniversalTime()) - downloaded the proxyagent extension file to path: " $PIRExtensionFolderZIPLocation
Write-Output "$((Get-Date).ToUniversalTime()) - net stop $serviceName"
net stop $serviceName
Write-Output "$((Get-Date).ToUniversalTime()) - TASKKILL /F /IM ProxyAgentExt.exe"
TASKKILL /F /IM ProxyAgentExt.exe
Write-Output "$((Get-Date).ToUniversalTime()) - Delete registry key at $registrykeyPath"
Remove-Item -Path $registrykeyPath -Recurse
Write-Output "$((Get-Date).ToUniversalTime()) - Delete status file $statusFilePath"
Remove-Item -Path $statusFilePath -Force