Merge pull request #598 from AndrewDemski-ad-gmail-com/patch-11
Update _Mods-Functions.ps1pull/574/head
commit
8ee9e21dde
|
@ -53,50 +53,94 @@ function Uninstall-WingetID ($WingetIDUninst) {
|
|||
Return
|
||||
}
|
||||
|
||||
function Uninstall-ModsApp ($AppUninst, $AllVersions) {
|
||||
foreach ($app in $AppUninst) {
|
||||
$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
|
||||
foreach ($obj in $InstalledSoftware) {
|
||||
if ($obj.GetValue('DisplayName') -like $App) {
|
||||
function Uninstall-ModsApp ($AppUninst, $AllVersions)
|
||||
{
|
||||
foreach ($app in $AppUninst)
|
||||
{
|
||||
# we start from scanning the x64 node in registry, if something was found, then we set x64=TRUE
|
||||
[bool]$app_was_x64 = Process-installedSoftware -app $app -x64 $true;
|
||||
|
||||
# if nothing was found in x64 node, then we repeat that action in x86 node
|
||||
if (!$app_was_x64)
|
||||
{
|
||||
Process-installedSoftware -app $app | Out-Null;
|
||||
}
|
||||
}
|
||||
Return
|
||||
}
|
||||
|
||||
Function Process-installedSoftware()
|
||||
{
|
||||
[OutputType([Bool])]
|
||||
Param(
|
||||
[parameter(Mandatory=$true)] [string]$app,
|
||||
[parameter(Mandatory=$false)][bool] $x64 = $false
|
||||
)
|
||||
if($true -eq $x64)
|
||||
{
|
||||
[string]$path = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall";
|
||||
}
|
||||
else
|
||||
{
|
||||
[string]$path = "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
|
||||
}
|
||||
|
||||
[bool]$app_was_found = $false;
|
||||
[Microsoft.Win32.RegistryKey[]]$InstalledSoftware = Get-ChildItem $path;
|
||||
foreach ($obj in $InstalledSoftware)
|
||||
{
|
||||
if ($obj.GetValue('DisplayName') -like $App)
|
||||
{
|
||||
$UninstallString = $obj.GetValue('UninstallString')
|
||||
$CleanedUninstallString = $UninstallString.Trim([char]0x0022)
|
||||
if ($UninstallString -like "MsiExec.exe*") {
|
||||
if ($UninstallString -like "MsiExec.exe*")
|
||||
{
|
||||
$ProductCode = Select-String "{.*}" -inputobject $UninstallString
|
||||
$ProductCode = $ProductCode.matches.groups[0].value
|
||||
#MSI x64 Installer
|
||||
$Exec = Start-Process "C:\Windows\System32\msiexec.exe" -ArgumentList "/x$ProductCode REBOOT=R /qn" -PassThru -Wait
|
||||
#Stop Hard Reboot (if bad MSI!)
|
||||
if ($Exec.ExitCode -eq 1641) {
|
||||
if ($Exec.ExitCode -eq 1641)
|
||||
{
|
||||
Start-Process "C:\Windows\System32\shutdown.exe" -ArgumentList "/a"
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
$QuietUninstallString = $obj.GetValue('QuietUninstallString')
|
||||
if ($QuietUninstallString) {
|
||||
if ($QuietUninstallString)
|
||||
{
|
||||
$QuietUninstallString = Select-String "(\x22.*\x22) +(.*)" -inputobject $QuietUninstallString
|
||||
$Command = $QuietUninstallString.matches.groups[1].value
|
||||
$Parameter = $QuietUninstallString.matches.groups[2].value
|
||||
#All EXE x64 Installers (already defined silent uninstall)
|
||||
Start-Process $Command -ArgumentList $Parameter -Wait
|
||||
}
|
||||
else {
|
||||
if ((Test-Path $CleanedUninstallString)) {
|
||||
else
|
||||
{
|
||||
if ((Test-Path $CleanedUninstallString))
|
||||
{
|
||||
$NullSoft = Select-String -Path $CleanedUninstallString -Pattern "Nullsoft"
|
||||
}
|
||||
if ($NullSoft) {
|
||||
if ($NullSoft)
|
||||
{
|
||||
#NSIS x64 Installer
|
||||
Start-Process $UninstallString -ArgumentList "/S" -Wait
|
||||
}
|
||||
else {
|
||||
if ((Test-Path $CleanedUninstallString)) {
|
||||
else
|
||||
{
|
||||
if ((Test-Path $CleanedUninstallString))
|
||||
{
|
||||
$Inno = Select-String -Path $CleanedUninstallString -Pattern "Inno Setup"
|
||||
}
|
||||
if ($Inno) {
|
||||
if ($Inno)
|
||||
{
|
||||
#Inno x64 Installer
|
||||
Start-Process $UninstallString -ArgumentList "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" -Wait
|
||||
}
|
||||
else {
|
||||
Write-Host "x64 Uninstaller unknown, trying the UninstallString from registry..."
|
||||
else
|
||||
{
|
||||
Write-Host "$(if($true -eq $x64) {'x64'} else {'x86'}) Uninstaller unknown, trying the UninstallString from registry..."
|
||||
$NativeUninstallString = Select-String "(\x22.*\x22) +(.*)" -inputobject $UninstallString
|
||||
$Command = $NativeUninstallString.matches.groups[1].value
|
||||
$Parameter = $NativeUninstallString.matches.groups[2].value
|
||||
|
@ -106,73 +150,16 @@ function Uninstall-ModsApp ($AppUninst, $AllVersions) {
|
|||
}
|
||||
}
|
||||
}
|
||||
$x64 = $true
|
||||
if (!$AllVersions) {
|
||||
$app_was_found = $true
|
||||
if (!$AllVersions)
|
||||
{
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$x64) {
|
||||
$InstalledSoftware = Get-ChildItem "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
|
||||
foreach ($obj in $InstalledSoftware) {
|
||||
if ($obj.GetValue('DisplayName') -like $App) {
|
||||
$UninstallString = $obj.GetValue('UninstallString')
|
||||
$CleanedUninstallString = $UninstallString.Trim([char]0x0022)
|
||||
if ($UninstallString -like "MsiExec.exe*") {
|
||||
$ProductCode = Select-String "{.*}" -inputobject $UninstallString
|
||||
$ProductCode = $ProductCode.matches.groups[0].value
|
||||
#MSI x86 Installer
|
||||
$Exec = Start-Process "C:\Windows\System32\msiexec.exe" -ArgumentList "/x$ProductCode REBOOT=R /qn" -PassThru -Wait
|
||||
#Stop Hard Reboot (if bad MSI!)
|
||||
if ($Exec.ExitCode -eq 1641) {
|
||||
Start-Process "C:\Windows\System32\shutdown.exe" -ArgumentList "/a"
|
||||
}
|
||||
}
|
||||
else {
|
||||
$QuietUninstallString = $obj.GetValue('QuietUninstallString')
|
||||
if ($QuietUninstallString) {
|
||||
$QuietUninstallString = Select-String "(\x22.*\x22) +(.*)" -inputobject $QuietUninstallString
|
||||
$Command = $QuietUninstallString.matches.groups[1].value
|
||||
$Parameter = $QuietUninstallString.matches.groups[2].value
|
||||
#All EXE x86 Installers (already defined silent uninstall)
|
||||
Start-Process $Command -ArgumentList $Parameter -Wait
|
||||
}
|
||||
else {
|
||||
if ((Test-Path $CleanedUninstallString)) {
|
||||
$NullSoft = Select-String -Path $CleanedUninstallString -Pattern "Nullsoft"
|
||||
}
|
||||
if ($NullSoft) {
|
||||
#NSIS x86 Installer
|
||||
Start-Process $UninstallString -ArgumentList "/S" -Wait
|
||||
}
|
||||
else {
|
||||
if ((Test-Path $CleanedUninstallString)) {
|
||||
$Inno = Select-String -Path $CleanedUninstallString -Pattern "Inno Setup"
|
||||
}
|
||||
if ($Inno) {
|
||||
#Inno x86 Installer
|
||||
Start-Process $UninstallString -ArgumentList "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-" -Wait
|
||||
}
|
||||
else {
|
||||
Write-Host "x86 Uninstaller unknown, trying the UninstallString from registry..."
|
||||
$NativeUninstallString = Select-String "(\x22.*\x22) +(.*)" -inputobject $UninstallString
|
||||
$Command = $NativeUninstallString.matches.groups[1].value
|
||||
$Parameter = $NativeUninstallString.matches.groups[2].value
|
||||
#All EXE x86 Installers (native defined uninstall)
|
||||
Start-Process $Command -ArgumentList $Parameter -Wait
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$AllVersions) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Return
|
||||
return $app_was_found;
|
||||
}
|
||||
|
||||
function Remove-ModsLnk ($Lnk) {
|
||||
foreach ($link in $Lnk) {
|
||||
Remove-Item -Path "${env:Public}\Desktop\$link.lnk" -Force -ErrorAction SilentlyContinue | Out-Null
|
||||
|
|
Loading…
Reference in New Issue