2021-01-21 12:32:59 -05:00
|
|
|
param(
|
2022-04-16 09:49:58 -04:00
|
|
|
[Parameter(Mandatory=$false)][int]$CUSTOMER_ID=1,
|
2022-04-16 10:25:53 -04:00
|
|
|
[Parameter(Mandatory=$false)][string]$INTEGRATOR_ID,
|
2021-08-11 16:05:03 -04:00
|
|
|
[Parameter(Mandatory=$false)][string]$AGENT_FILENAME="AteraAgentSetup.msi",
|
2021-02-03 09:58:32 -05:00
|
|
|
[Parameter(Mandatory=$false)][switch]$FORCE
|
2021-01-21 12:32:59 -05:00
|
|
|
)
|
|
|
|
|
|
2022-04-16 10:25:53 -04:00
|
|
|
# Make sure $INTEGRATOR_ID exists, otherwise exit this script as an agent cannot be downloaded
|
2022-04-16 10:33:54 -04:00
|
|
|
#If ( ($INTEGRATOR_ID -eq $null) -or ($INTEGRATOR_ID -eq '') ) { Exit }
|
2022-04-16 10:25:53 -04:00
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Source the Tools.ps1 script
|
2021-01-21 12:32:59 -05:00
|
|
|
Function SourceTools
|
|
|
|
|
{ . $([Scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://dev.emberkom.com/emberkom/management-scripts/raw/branch/master/Tools.ps1'))) }
|
|
|
|
|
. SourceTools
|
|
|
|
|
|
2022-04-16 11:42:00 -04:00
|
|
|
Function Get-UninstallCodes ([string]$DisplayName) {
|
|
|
|
|
'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 'HKLM:SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' | ForEach-Object {
|
|
|
|
|
Get-ChildItem -Path $_ -ErrorAction SilentlyContinue | ForEach-Object {
|
|
|
|
|
If ( $(Get-ItemProperty -Path $_.PSPath -Name 'DisplayName' -ErrorAction SilentlyContinue) -and ($(Get-ItemPropertyValue -Path $_.PSPath -Name 'DisplayName' -ErrorAction SilentlyContinue) -eq $DisplayName) ) {
|
|
|
|
|
$str = (Get-ItemPropertyValue -Path $_.PSPath -Name 'UninstallString')
|
|
|
|
|
$code = $str.Substring(($str.Length - 37),36)
|
|
|
|
|
LogMsg " - ${code}"
|
|
|
|
|
$UninstallCodes.Add($code) | Out-Null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Get-ProductKeys ([string]$ProductName) {
|
|
|
|
|
Get-ChildItem -Path 'HKCR:Installer\Products' | ForEach-Object {
|
|
|
|
|
If ( $(Get-ItemProperty -Path $_.PSPath -Name 'ProductName' -ErrorAction SilentlyContinue) -and ($(Get-ItemPropertyValue -Path $_.PSPath -Name 'ProductName' -ErrorAction SilentlyContinue) -eq $ProductName) ) {
|
|
|
|
|
$prod = $_.PSPath.Substring($_.PSPath.Length - 32)
|
|
|
|
|
LogMsg " - ${prod}"
|
|
|
|
|
$ProductKeys.Add($prod) | Out-Null
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Get-ServiceStatus ([string]$Name) { (Get-Service -Name $Name -ErrorAction SilentlyContinue).Status }
|
|
|
|
|
|
|
|
|
|
Function Stop-RunningService ([string]$Name) {
|
|
|
|
|
If ( $(Get-ServiceStatus -Name $Name) -eq "Running" ) { LogMsg " Stopping : ${Name} service" ; Stop-Service -Name $Name -Force }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Remove-StoppedService ([string]$Name) {
|
|
|
|
|
$s = (Get-ServiceStatus -Name $Name)
|
|
|
|
|
If ( $s ) {
|
|
|
|
|
If ( $s -eq "Stopped" ) {
|
|
|
|
|
LogMsg " Deleting : ${Name} service"
|
|
|
|
|
Start-Process "sc.exe" -ArgumentList "delete ${Name}" -Wait
|
|
|
|
|
}
|
|
|
|
|
} Else { LogMsg " Not Found: ${Name} service" }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Stop-RunningProcess ([string]$Name) {
|
|
|
|
|
$p = (Get-Process -Name $_ -ErrorAction SilentlyContinue)
|
|
|
|
|
If ( $p ) { LogMsg " Stopping : ${Name}.exe" ; $p | Stop-Process -Force }
|
|
|
|
|
Else { LogMsg " Not Found: ${Name}.exe is not running"}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Remove-Path ([string]$Path) {
|
|
|
|
|
If ( Test-Path $Path ) {
|
|
|
|
|
LogMsg " Deleting : ${Path}"
|
|
|
|
|
Remove-Item $Path -Recurse -Force
|
|
|
|
|
} Else { LogMsg " Not Found: ${Path}" }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Function Get-AllExeFiles ([string]$Path) {
|
|
|
|
|
If ( Test-Path $Path ) {
|
|
|
|
|
Get-ChildItem -Path $Path -Filter *.exe -Recurse | ForEach-Object { $ExeFiles.Add($_.BaseName) | Out-Null }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Build the path for $AGENT_INSTALLER
|
2021-02-08 16:54:08 -05:00
|
|
|
$AGENT_INSTALLER = '{0}{1}' -f (GetTempPath), $AGENT_FILENAME
|
2021-01-21 12:32:59 -05:00
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Make sure we need to install the agent
|
2021-02-08 16:36:42 -05:00
|
|
|
If ( (Test-Path "${Env:ProgramFiles}\ATERA Networks\AteraAgent\AteraAgent.exe") -or (Test-Path "${Env:ProgramFiles(x86)}\ATERA Networks\AteraAgent\AteraAgent.exe") )
|
2022-04-16 11:00:30 -04:00
|
|
|
{ $INSTALL = $false ; $PreviousInstall = $true ; LogMsg "Atera agent is already installed on this endpoint" } Else { $INSTALL = $true ; $PreviousInstall = $false }
|
2021-02-08 16:36:42 -05:00
|
|
|
|
2021-01-27 11:35:21 -05:00
|
|
|
If ( $FORCE ) { $INSTALL = $true }
|
2021-02-08 16:36:42 -05:00
|
|
|
|
2021-01-27 11:35:21 -05:00
|
|
|
If ( $INSTALL ) {
|
2021-01-21 12:32:59 -05:00
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Uninstall if $FORCE is true
|
2021-02-08 16:36:42 -05:00
|
|
|
If ( $PreviousInstall ) {
|
2022-04-15 13:26:29 -04:00
|
|
|
LogMsg "Getting information from existing installation"
|
|
|
|
|
$ACCOUNT_ID = (Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'AccountId' -ErrorAction SilentlyContinue)
|
|
|
|
|
$AGENT_ID = (Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'AgentId' -ErrorAction SilentlyContinue)
|
|
|
|
|
$CUSTOMER_ID = (Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'CompanyId' -ErrorAction SilentlyContinue)
|
|
|
|
|
$INTEGRATOR_ID = (Get-ItemPropertyValue -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'IntegratorLogin' -ErrorAction SilentlyContinue)
|
2022-04-16 11:00:30 -04:00
|
|
|
LogMsg "AccountID : ${ACCOUNT_ID}"
|
|
|
|
|
LogMsg "AgentID : ${AGENT_ID}"
|
|
|
|
|
LogMsg "CustomerID : ${CUSTOMER_ID}"
|
|
|
|
|
LogMsg "IntegratorID: ${INTEGRATOR_ID}"
|
2022-04-16 11:42:00 -04:00
|
|
|
|
|
|
|
|
LogMsg "Uninstalling Atera agent"
|
|
|
|
|
|
|
|
|
|
LogMsg " Mounting HKEY_CLASSES_ROOT registry hive"
|
|
|
|
|
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | Out-Null
|
|
|
|
|
|
|
|
|
|
LogMsg " Getting MSI package codes from the uninstall key"
|
|
|
|
|
$UninstallCodes = New-Object System.Collections.ArrayList
|
|
|
|
|
'AteraAgent' | ForEach-Object { Get-UninstallCodes -DisplayName $_ }
|
|
|
|
|
|
|
|
|
|
LogMsg " Getting product keys from the list of installed products"
|
|
|
|
|
$ProductKeys = New-Object System.Collections.ArrayList
|
|
|
|
|
'AteraAgent' | ForEach-Object { Get-ProductKeys -ProductName $_ }
|
|
|
|
|
|
|
|
|
|
LogMsg " Directories that we may need to delete"
|
|
|
|
|
$Directories = @("${Env:ProgramFiles}\ATERA Networks")
|
|
|
|
|
$Directories | ForEach-Object { LogMsg " - ${_}" }
|
|
|
|
|
|
|
|
|
|
LogMsg " Processes that we may need to terminate"
|
|
|
|
|
$ExeFiles = New-Object System.Collections.ArrayList
|
|
|
|
|
$Directories | ForEach-Object { Get-AllExeFiles -Path $_ }
|
|
|
|
|
$ExeFiles.Add('reg') | Out-Null
|
|
|
|
|
$ExeFiles | ForEach-Object { LogMsg " - ${_}.exe" }
|
|
|
|
|
|
|
|
|
|
LogMsg " Windows services that we may need to stop and/or delete"
|
|
|
|
|
$ServiceList = @('AteraAgent')
|
|
|
|
|
$ServiceList | ForEach-Object { LogMsg " - ${_}" }
|
|
|
|
|
|
|
|
|
|
LogMsg " Windows Registry keys we may need to delete"
|
|
|
|
|
$RegistryKeys = @('HKLM:SOFTWARE\ATERA Networks')
|
|
|
|
|
$RegistryKeys | ForEach-Object { LogMsg " - ${_}" }
|
|
|
|
|
|
|
|
|
|
# Uninstall each MSI package code in $UninstallCodes
|
|
|
|
|
$UninstallCodes | ForEach-Object { LogMsg " Uninstall: ${_}" ; Start-Process "msiexec.exe" -ArgumentList "/X{${_}} /qn" -Wait }
|
|
|
|
|
|
|
|
|
|
# Stop services if they're still running
|
|
|
|
|
$ServiceList | ForEach-Object { Stop-RunningService -Name $_ }
|
|
|
|
|
|
|
|
|
|
# Terminate all relevant processes that may still be running
|
|
|
|
|
$ExeFiles | ForEach-Object { Stop-RunningProcess $_ }
|
|
|
|
|
|
|
|
|
|
# Delete services if they're still present
|
|
|
|
|
$ServiceList | ForEach-Object { Remove-StoppedService -Name $_ }
|
|
|
|
|
|
|
|
|
|
# Delete products from MSI installer registry
|
|
|
|
|
$ProductKeys | ForEach-Object { Remove-Path -Path "HKCR:Installer\Products\${_}" }
|
|
|
|
|
|
|
|
|
|
LogMsg " Unmount HKEY_CLASSES_ROOT registry hive"
|
|
|
|
|
Remove-PSDrive -Name HKCR
|
|
|
|
|
|
|
|
|
|
# Delete registry keys
|
|
|
|
|
$RegistryKeys | ForEach-Object { Remove-Path -Path $_ }
|
|
|
|
|
|
|
|
|
|
# Delete remaining directories
|
|
|
|
|
$Directories | ForEach-Object { Remove-Path -Path $_ }
|
|
|
|
|
|
|
|
|
|
LogMsg "Finished uninstalling Atera Agent"
|
2021-02-08 13:39:51 -05:00
|
|
|
}
|
|
|
|
|
|
2022-04-15 13:26:29 -04:00
|
|
|
# Replace the '@' with '%40' - not sure why this is necessary, but it is
|
|
|
|
|
$INTEGRATOR_ID = $INTEGRATOR_ID.Replace('@','%40')
|
|
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Download agent installer
|
2022-03-25 12:57:55 -04:00
|
|
|
Download-File -URL "https://app.atera.com/GetAgent/Msi/?customerId=${CUSTOMER_ID}&integratorLogin=${INTEGRATOR_ID}" -File "${AGENT_INSTALLER}"
|
2021-01-21 12:32:59 -05:00
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Install the agent
|
2021-02-08 16:54:08 -05:00
|
|
|
LogMsg "Installing Atera agent"
|
2022-03-25 12:57:55 -04:00
|
|
|
Try { Start-Process "msiexec.exe" -ArgumentList "/i ""${AGENT_INSTALLER}"" /qn /norestart" -Wait }
|
2021-02-08 16:54:08 -05:00
|
|
|
Catch { LogErr $_.Exception.Message }
|
|
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Delete the agent installer
|
2021-02-08 16:54:08 -05:00
|
|
|
LogMsg "Deleting ""${AGENT_INSTALLER}"""
|
|
|
|
|
Try { Remove-Item $AGENT_INSTALLER -Force }
|
2021-02-08 13:39:51 -05:00
|
|
|
Catch { LogErr $_.Exception.Message }
|
2021-01-21 12:32:59 -05:00
|
|
|
|
2022-04-16 11:00:30 -04:00
|
|
|
If ( $PreviousInstall -and $ACCOUNT_ID -and $AGENT_ID -and $CUSTOMER_ID) {
|
|
|
|
|
LogMsg "Restoring agent information from previous install"
|
|
|
|
|
LogMsg " - Stopping AteraAgent service"
|
2022-04-15 13:26:29 -04:00
|
|
|
Stop-Service -Name 'AteraAgent' -Force
|
2022-04-16 11:00:30 -04:00
|
|
|
LogMsg " - Restoring AgentID and AccountID from previous install"
|
2022-04-15 13:26:29 -04:00
|
|
|
Set-ItemProperty -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'AccountId' -Value $ACCOUNT_ID
|
|
|
|
|
Set-ItemProperty -Path 'HKLM:SOFTWARE\ATERA Networks\AlphaAgent' -Name 'AgentId' -Value $AGENT_ID
|
2022-04-16 11:00:30 -04:00
|
|
|
LogMsg " - Starting AteraAgent service"
|
2022-04-15 13:26:29 -04:00
|
|
|
Start-Service -Name 'AteraAgent'
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-16 11:00:30 -04:00
|
|
|
}
|
2021-01-21 12:32:59 -05:00
|
|
|
|
2022-03-25 14:18:19 -04:00
|
|
|
# Delete this script
|
2021-11-18 20:14:45 -05:00
|
|
|
Remove-Item $MyInvocation.MyCommand.Path -Force
|
2021-01-21 12:32:59 -05:00
|
|
|
|