-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Update edgeremoval.ps1 * Update edgeremoval.ps1 * Update edgeremoval.ps1
- Loading branch information
1 parent
1c9cef0
commit de8a79d
Showing
1 changed file
with
127 additions
and
217 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,253 +1,163 @@ | ||
# Script Metadata | ||
# Created by AveYo, source: https://raw.githubusercontent.com/AveYo/fox/main/Edge_Removal.bat | ||
# Powershell Conversion and Refactor done by Chris Titus Tech | ||
# Powershell Conversion and Refactor by Chris Titus Tech | ||
# Updated By Taylor Christian Nesome 8/6/2024 | ||
|
||
# Initial Configuration | ||
$host.ui.RawUI.WindowTitle = 'Edge Removal - Chris Titus Tech 2023.05.10' | ||
$remove_win32 = @("Microsoft Edge", "Microsoft Edge Update") | ||
$remove_appx = @("MicrosoftEdge") | ||
$skip = @() # Optional: @("DevTools") | ||
|
||
$also_remove_webview = 0 | ||
if ($also_remove_webview -eq 1) { | ||
$remove_win32 += "Microsoft EdgeWebView" | ||
$remove_appx += "WebExperience", "Win32WebViewHost" | ||
} | ||
|
||
# Administrative Privileges Check | ||
$privileges = @( | ||
'SeSecurityPrivilege', | ||
'SeTakeOwnershipPrivilege', | ||
'SeBackupPrivilege', | ||
'SeRestorePrivilege' | ||
) | ||
|
||
foreach ($privilege in $privileges) { | ||
[System.Diagnostics.Process]::SetPrivilege($privilege, 2) | ||
} | ||
|
||
# Edge Removal Procedures | ||
$processesToShutdown = @( | ||
'explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge', | ||
'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp' | ||
) | ||
|
||
Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue | ||
$processesToShutdown | ForEach-Object { | ||
Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue | ||
} | ||
|
||
$MS = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe' | ||
|
||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue | ||
|
||
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue | ||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue | ||
|
||
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue | ||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$MS`" --single-argument %%1" -Force -ErrorAction SilentlyContinue | ||
# Define constants and initial configuration | ||
<# | ||
.SYNOPSIS | ||
This script removes Microsoft Edge and related components from the system. | ||
.DESCRIPTION | ||
This script performs the following tasks: | ||
- Terminates Edge-related processes. | ||
- Removes registry entries associated with Microsoft Edge. | ||
- Uninstalls Edge-related AppX packages. | ||
- Cleans up shortcut files. | ||
- Configures Edge policy settings to prevent reinstallation. | ||
.NOTES | ||
Updated by Taylor Christian Newsome | ||
Version: 2024.08.06 | ||
#> | ||
|
||
$registryPaths = @('HKLM:\SOFTWARE\Policies', 'HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\WOW6432Node') | ||
$edgeProperties = @('InstallDefault', 'Install{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}', 'Install{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}') | ||
foreach ($path in $registryPaths) { | ||
foreach ($prop in $edgeProperties) { | ||
Remove-ItemProperty -Path "$path\Microsoft\EdgeUpdate" -Name $prop -Force -ErrorAction SilentlyContinue | ||
} | ||
# Define constants and initial configuration | ||
$ScriptVersion = "2024.08.06" | ||
$EdgeProcessesToShutdown = @('explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge', 'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp') | ||
$EdgeRemovalOptions = @{ | ||
RemoveWin32 = @("Microsoft Edge", "Microsoft Edge Update") | ||
RemoveAppx = @("MicrosoftEdge") | ||
Skip = @() # Optional: @("DevTools") | ||
AlsoRemoveWebView = $false | ||
} | ||
|
||
$edgeupdate = 'Microsoft\EdgeUpdate\Clients\{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}' | ||
$webvupdate = 'Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}' | ||
$on_actions = @('on-os-upgrade', 'on-logon', 'on-logon-autolaunch', 'on-logon-startup-boost') | ||
$registryBases = @('HKLM:\SOFTWARE', 'HKLM:\SOFTWARE\Wow6432Node') | ||
foreach ($base in $registryBases) { | ||
foreach ($launch in $on_actions) { | ||
Remove-Item -Path "$base\$edgeupdate\Commands\$launch" -Force -ErrorAction SilentlyContinue | ||
Remove-Item -Path "$base\$webvupdate\Commands\$launch" -Force -ErrorAction SilentlyContinue | ||
# Function to check if the script is running with administrative privileges | ||
function Test-Admin { | ||
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { | ||
Write-Error "The script must be run as an Administrator." | ||
exit 1 | ||
} | ||
} | ||
|
||
$registryPaths = @('HKCU:', 'HKLM:') | ||
$nodes = @('', '\Wow6432Node') | ||
foreach ($regPath in $registryPaths) { | ||
foreach ($node in $nodes) { | ||
foreach ($i in $remove_win32) { | ||
Remove-ItemProperty -Path "$regPath\SOFTWARE${node}\Microsoft\Windows\CurrentVersion\Uninstall\$i" -Name 'NoRemove' -Force -ErrorAction SilentlyContinue | ||
New-Item -Path "$regPath\SOFTWARE${node}\Microsoft\EdgeUpdateDev" -Force | Out-Null | ||
Set-ItemProperty -Path "$regPath\SOFTWARE${node}\Microsoft\EdgeUpdateDev" -Name 'AllowUninstall' -Value 1 -Type Dword -Force | ||
# Function to stop Edge-related processes | ||
function Stop-EdgeProcesses { | ||
param([string[]]$ProcessesToStop) | ||
foreach ($process in $ProcessesToStop) { | ||
try { | ||
Stop-Process -Name $process -Force -ErrorAction Stop | ||
Write-Output "Successfully stopped process: $process" | ||
} catch { | ||
Write-Error "Failed to stop process: $process. $_" | ||
} | ||
} | ||
} | ||
|
||
$foldersToSearch = @('LocalApplicationData', 'ProgramFilesX86', 'ProgramFiles') | ForEach-Object { | ||
[Environment]::GetFolderPath($_) | ||
} | ||
|
||
$edges = @() | ||
$bhoFiles = @() | ||
|
||
foreach ($folder in $foldersToSearch) { | ||
$bhoFiles += Get-ChildItem -Path "$folder\Microsoft\Edge*\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue | ||
|
||
$edges += Get-ChildItem -Path "$folder\Microsoft\Edge*\setup.exe" -Recurse -ErrorAction SilentlyContinue | | ||
Where-Object { $_.FullName -notlike '*EdgeWebView*' } | ||
} | ||
|
||
$destinationDir = "$env:SystemDrive\Scripts" | ||
New-Item -Path $destinationDir -ItemType Directory -ErrorAction SilentlyContinue | Out-Null | ||
|
||
foreach ($bhoFile in $bhoFiles) { | ||
if (Test-Path $bhoFile) { | ||
# Function to remove registry entries related to Microsoft Edge | ||
function Remove-EdgeRegistryEntries { | ||
param([string[]]$RegistryPaths) | ||
foreach ($path in $RegistryPaths) { | ||
try { | ||
Copy-Item -Path $bhoFile -Destination "$destinationDir\ie_to_edge_stub.exe" -Force | ||
} catch { } | ||
} | ||
} | ||
|
||
## Work on Appx Removals | ||
$provisioned = Get-AppxProvisionedPackage -Online | ||
$appxpackage = Get-AppxPackage -AllUsers | ||
$eol = @() | ||
|
||
$store = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store' | ||
$storeP = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Store\InstalledApplications' | ||
foreach ($app in $appxpackage) { | ||
$name = $app.Name | ||
if ($app.Name -eq "Microsoft.Edge") { | ||
$eol += $name | ||
} elseif ($app.Name -eq "Microsoft.EdgeBeta" -or $app.Name -eq "Microsoft.EdgeDev" -or $app.Name -eq "Microsoft.EdgeCanary" -or $app.Name -eq "Microsoft.MicrosoftEdge") { | ||
$eol += $name | ||
Remove-Item -Path $path -Recurse -Force -ErrorAction Stop | ||
Write-Output "Successfully removed registry path: $path" | ||
} catch { | ||
Write-Error "Failed to remove registry path: $path. $_" | ||
} | ||
} | ||
} | ||
|
||
$eolApps = $provisioned | Where-Object { $eol -contains $_.DisplayName } | ||
|
||
foreach ($edge in $eolApps) { | ||
$edgeName = $edge.DisplayName | ||
if (-not ($skip -contains $edgeName)) { | ||
# Function to remove Microsoft Edge AppX packages | ||
function Remove-EdgeAppxPackages { | ||
param([string[]]$AppxPackagesToRemove) | ||
$provisionedPackages = Get-AppxProvisionedPackage -Online | ||
foreach ($package in $AppxPackagesToRemove) { | ||
try { | ||
Remove-AppxProvisionedPackage -Online -PackageName $edgeName -ErrorAction SilentlyContinue | ||
} catch { } | ||
$packagesToRemove = $provisionedPackages | Where-Object { $_.DisplayName -like "*$package*" } | ||
foreach ($pkg in $packagesToRemove) { | ||
Remove-AppxProvisionedPackage -Online -PackageName $pkg.PackageName -ErrorAction Stop | ||
Write-Output "Successfully removed provisioned package: $pkg.DisplayName" | ||
} | ||
|
||
$installedPackages = Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like "*$package*" } | ||
foreach ($pkg in $installedPackages) { | ||
Remove-AppxPackage -Package $pkg.PackageFullName -AllUsers -ErrorAction Stop | ||
Write-Output "Successfully removed installed package: $pkg.PackageFullName" | ||
} | ||
} catch { | ||
Write-Error "Failed to remove AppX package: $package. $_" | ||
} | ||
} | ||
} | ||
|
||
foreach ($edge in $appxpackage) { | ||
$edgeName = $edge.Name | ||
if ($eol -contains $edgeName) { | ||
if (-not ($skip -contains $edgeName)) { | ||
# Function to remove shortcuts related to Microsoft Edge | ||
function Remove-EdgeShortcuts { | ||
param([string[]]$ShortcutPaths) | ||
foreach ($path in $ShortcutPaths) { | ||
if (Test-Path $path) { | ||
try { | ||
Remove-AppxPackage -Package $edgeName -AllUsers -ErrorAction SilentlyContinue | ||
} catch { } | ||
Remove-Item -Path $path -Force -ErrorAction Stop | ||
Write-Output "Successfully removed shortcut: $path" | ||
} catch { | ||
Write-Error "Failed to remove shortcut: $path. $_" | ||
} | ||
} | ||
} | ||
} | ||
|
||
## Redirect shortcuts | ||
$shortcut_path = "$env:Public\Desktop" | ||
$shortcut_file = 'Microsoft Edge.lnk' | ||
$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file | ||
|
||
if (Test-Path $full_path) { | ||
Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue | ||
} | ||
|
||
$shortcut_path = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs" | ||
$shortcut_file = 'Microsoft Edge.lnk' | ||
$full_path = Join-Path -Path $shortcut_path -ChildPath $shortcut_file | ||
|
||
if (Test-Path $full_path) { | ||
Remove-Item -Path $full_path -Force -ErrorAction SilentlyContinue | ||
} | ||
|
||
$edgePolicy = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' | ||
if (-not (Test-Path $edgePolicy)) { | ||
New-Item -Path $edgePolicy -Force | Out-Null | ||
} | ||
|
||
$edgePrefs = @{ | ||
'Dword' = @{ | ||
'BrowserReplacementEnabled' = 1 | ||
'HideFirstRunExperience' = 1 | ||
'HideImportEdgeFavoritesPrompt' = 1 | ||
'HideSyncSetupExperience' = 1 | ||
'FavoritesBarVisibility' = 1 | ||
} | ||
'String' = @{ | ||
'AutoplayAllowed' = 'AllowOnce' | ||
# Function to configure Edge policy settings | ||
function Configure-EdgePolicy { | ||
param([hashtable]$PolicySettings) | ||
$edgePolicyPath = 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' | ||
if (-not (Test-Path $edgePolicyPath)) { | ||
try { | ||
New-Item -Path $edgePolicyPath -Force | Out-Null | ||
Write-Output "Created Edge policy registry path: $edgePolicyPath" | ||
} catch { | ||
Write-Error "Failed to create Edge policy registry path: $edgePolicyPath. $_" | ||
} | ||
} | ||
} | ||
|
||
foreach ($entryType in $edgePrefs.Keys) { | ||
foreach ($prefName in $edgePrefs[$entryType].Keys) { | ||
Set-ItemProperty -Path $edgePolicy -Name $prefName -Value $edgePrefs[$entryType][$prefName] -Type $entryType -Force | ||
foreach ($entryType in $PolicySettings.Keys) { | ||
foreach ($prefName in $PolicySettings[$entryType].Keys) { | ||
try { | ||
Set-ItemProperty -Path $edgePolicyPath -Name $prefName -Value $PolicySettings[$entryType][$prefName] -Type $entryType -Force | ||
Write-Output "Successfully set Edge policy: $prefName = $($PolicySettings[$entryType][$prefName])" | ||
} catch { | ||
Write-Error "Failed to set Edge policy: $prefName. $_" | ||
} | ||
} | ||
} | ||
} | ||
|
||
# Output Results | ||
Write-Host "Edge Removal Complete" -ForegroundColor Green | ||
|
||
# Define constants and initial configuration | ||
$ScriptVersion = "2023.05.10" | ||
$EdgeProcessesToShutdown = @('explorer', 'Widgets', 'widgetservice', 'msedgewebview2', 'MicrosoftEdge*', 'chredge', 'msedge', 'edge', 'msteams', 'msfamily', 'WebViewHost', 'Clipchamp') | ||
$EdgeRemovalOptions = @{ | ||
RemoveWin32 = @("Microsoft Edge", "Microsoft Edge Update") | ||
RemoveAppx = @("MicrosoftEdge") | ||
Skip = @() # Optional: @("DevTools") | ||
AlsoRemoveWebView = $false | ||
} | ||
|
||
# Define main function to remove Microsoft Edge components | ||
function Remove-MicrosoftEdge { | ||
[CmdletBinding()] | ||
param() | ||
|
||
# Function to shutdown processes related to Microsoft Edge | ||
function Stop-EdgeProcesses { | ||
$EdgeProcessesToShutdown | ForEach-Object { | ||
Stop-Process -Name $_ -Force -ErrorAction SilentlyContinue | ||
# Main execution | ||
try { | ||
Test-Admin | ||
Stop-EdgeProcesses -ProcessesToStop $EdgeProcessesToShutdown | ||
Remove-EdgeRegistryEntries -RegistryPaths @( | ||
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe", | ||
"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe", | ||
"Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge", | ||
"Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM" | ||
) | ||
Remove-EdgeAppxPackages -AppxPackagesToRemove $EdgeRemovalOptions.RemoveAppx | ||
Remove-EdgeShortcuts -ShortcutPaths @( | ||
"$env:Public\Desktop\Microsoft Edge.lnk", | ||
"$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk" | ||
) | ||
Configure-EdgePolicy -PolicySettings @{ | ||
'Dword' = @{ | ||
'BrowserReplacementEnabled' = 1 | ||
'HideFirstRunExperience' = 1 | ||
'HideImportEdgeFavoritesPrompt' = 1 | ||
'HideSyncSetupExperience' = 1 | ||
'FavoritesBarVisibility' = 1 | ||
} | ||
} | ||
|
||
# Function to remove registry entries related to Microsoft Edge | ||
function Remove-EdgeRegistryEntries { | ||
# Clean up certain registry entries | ||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\msedge.exe" -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ie_to_edge_stub.exe" -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\microsoft-edge' -Recurse -ErrorAction SilentlyContinue | ||
Remove-Item -Path 'Registry::HKEY_Users\S-1-5-21*\Software\Classes\MSEdgeHTM' -Recurse -ErrorAction SilentlyContinue | ||
|
||
# Create new registry entries | ||
$EdgeExecutablePath = ($env:ProgramFiles, ${env:ProgramFiles(x86)})[[Environment]::Is64BitOperatingSystem] + '\Microsoft\Edge\Application\msedge.exe' | ||
New-Item -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Force -ErrorAction SilentlyContinue | ||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\microsoft-edge\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue | ||
|
||
New-Item -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Force -ErrorAction SilentlyContinue | ||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Classes\MSEdgeHTM\shell\open\command" -Name '(Default)' -Value "`"$EdgeExecutablePath`" --single-argument %%1" -Force -ErrorAction SilentlyContinue | ||
} | ||
|
||
# Function to remove Microsoft Edge AppX packages | ||
function Remove-EdgeAppxPackages { | ||
$EdgeRemovalOptions.RemoveAppx | ForEach-Object { | ||
# Remove provisioned packages | ||
Get-AppxProvisionedPackage -Online | Where-Object { $_.PackageName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageName } | Remove-AppxProvisionedPackage -Online -AllUsers -ErrorAction SilentlyContinue | ||
|
||
# Remove installed packages | ||
Get-AppxPackage -AllUsers | Where-Object { $_.PackageFullName -like "*$_*" -and $EdgeRemovalOptions.Skip -notcontains $_.PackageFullName } | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue | ||
'String' = @{ | ||
'AutoplayAllowed' = 'AllowOnce' | ||
} | ||
} | ||
|
||
# Function to remove Microsoft Edge processes, registry entries, and AppX packages | ||
try { | ||
Stop-EdgeProcesses | ||
Remove-EdgeRegistryEntries | ||
Remove-EdgeAppxPackages | ||
Write-Output "Microsoft Edge components have been successfully removed." | ||
} catch { | ||
Write-Error "Failed to remove Microsoft Edge components: $_" | ||
} | ||
Write-Output "Microsoft Edge components have been successfully removed." | ||
} catch { | ||
Write-Error "An error occurred during execution: $_" | ||
} | ||
|
||
# Execute the main function | ||
Remove-MicrosoftEdge | ||
Remove-MicrosoftEdge |