2024-04-23 11:36:37 -04:00
# Are we running in Safe Mode with Networking?
2024-04-23 22:55:57 -04:00
If ( ( Get-CimInstance -ClassName Win32_ComputerSystem ). BootupState . ToLower () -eq "fail-safe with network boot" ) { $InSafeNetMode = $true } Else { $InSafeNetMode = $false }
2024-04-23 11:36:37 -04:00
Switch ( $InSafeNetMode ) {
2024-04-22 22:27:37 -04:00
# We're in Safe Mode
$true {
# Download the ESET Uninstaller
Write-Output "Downloading ESET Uninstaller to: ${ESETUninstaller} "
2024-04-23 22:55:57 -04:00
$ESETUninstallerURL = "https://download.eset.com/com/eset/tools/installers/eset_apps_remover/latest/esetuninstaller.exe"
2024-04-22 22:27:37 -04:00
Download-File -URL $ESETUninstallerURL -File $ESETUninstaller
If ( !( Test-Path $ESETUninstaller ) ) { Write-Error "ERROR: ESET Uninstaller could not be downloaded, this script will exit" ; Return }
# Backup network interfaces and settings
$InterfacesFile = " ${Global:OutputDirectory} \interfaces.dat"
If ( Test-Path $InterfacesFile ) { Write-Output "Removing existing interface export: ${InterfacesFile} " ; Remove-Item -Path $InterfacesFile -Force }
Write-Output "Exporting interfaces to: ${InterfacesFile} "
Try { & netsh . exe -c interface dump | Out-File $InterfacesFile }
Catch { Write-Error "ERROR: Interfaces could not be exported, this script will exit" ; Return }
# Uninstall all ESET products
Write-Output "Uninstalling all ESET products"
& "cmd.exe /k "" ${ESETUninstaller} "" /mode=online /force"
# Restore network interfaces and settings
If ( Test-Path $InterfacesFile ) {
Write-Output "Restoring interfaces from export: ${InterfacesFile} "
Try { & netsh . exe exec $InterfacesFile }
Catch { Write-Error "ERROR: Interfaces could not be restored!" }
}
# Ensure safe mode is disabled
Write-Output "Disabling safe mode"
$command = " ${Env:SystemRoot} \System32\bcdedit.exe"
$params = "/deletevalue {default} safeboot" . Split ( " " )
Try { & " ${command} " $params }
Catch {
If ( $_ . Exception . Message -match "Element not found" ) { Write-Output "Safe mode is already disabled" }
Else { Write-Error "ERROR: could not disable safe mode, manual intervention may be required" }
}
# Reboot into normal mode
Write-Output "Rebooting into normal mode"
& " ${Env:SystemRoot} \System32\shutdown.exe" -r -f -t 5
}
# We're not in Safe Mode
$false {
# Schedule this script to run in Safe Mode
$key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce'
2024-04-23 22:55:57 -04:00
$encodedCommand = [ Convert ]:: ToBase64String ([ Text.Encoding ]:: Unicode . GetBytes ( '. $([Scriptblock]::Create((New-Object Net.WebClient).DownloadString("https://dev.emberkom.com/emberkom/management-scripts/raw/branch/master/Tools.ps1"))) ; Run-Script -LivePSScript Remove-AllESETProducts' ))
Try { New-ItemProperty -Path $key -Name '*Remove-AllESETProducts' -Value "powershell.exe -ExecutionPolicy Bypass -EncodedCommand ${encodedCommand} " -PropertyType String -Force }
Catch { Write-Error "ERROR: could not configure Remove-AllESETProducts script to run at next boot" ; Return }
2024-04-22 22:27:37 -04:00
# Restart the computer into Safe Mode with Networking
Run-Script -LivePSScript Fix-RebootIntoSafeMode
}
}