# #################################### # Author : Sam Nang SOK # Version : 1.0 # Role : Desintaller logiciels HP # Source : https://gist.github.com/mark05e/a79221b4245962a477a49eb281d97388#file-remove-hpbloatware-ps1 # Source : https://github.com/JoachimBerghmans/Powershell/blob/main/Autopilot/Remove-Bloatware.ps1 # #################################### function Write-LogEntry { param ( [parameter(Mandatory = $true, HelpMessage = "Ajout de la valeur du fichier log")] [ValidateNotNullOrEmpty()] [string]$Value, [parameter(Mandatory = $true, HelpMessage = "Niveau de status du fichier log. 1 Pour information, 2 Pour avertissement et 3 Pour erreur.")] [ValidateNotNullOrEmpty()] [ValidateSet("1", "2", "3")] [string]$Severity, [parameter(Mandatory = $false, HelpMessage = "Nom du fichier log")] [ValidateNotNullOrEmpty()] [string]$FileName = "Remove-HP-Bloatware.log" ) # Emplacment du fichier log $LogFilePath = Join-Path -Path (Join-Path -Path $env:windir -ChildPath "Install") -ChildPath $FileName # Construire HH:mm:ss horloge pour le fichier de log $Time = -join @((Get-Date -Format "HH:mm:ss.fff"), "+", (Get-WmiObject -Class Win32_TimeZone | Select-Object -ExpandProperty Bias)) # Date de contruction du fichier log $Date = (Get-Date -Format "MM-dd-yyyy") # Construction contexte fichier log $Context = $([System.Security.Principal.WindowsIdentity]::GetCurrent().Name) # Construction final du fichier log $LogText = "" # Ajout des valeurs dans les logs try { Out-File -InputObject $LogText -Append -NoClobber -Encoding Default -FilePath $LogFilePath -ErrorAction Stop } catch [System.Exception] { Write-Warning -Message "Impossible d'ajouter le fichier log Remove-HP-Bloatware.log Message erreur sur la ligne $($_.InvocationInfo.ScriptLineNumber): $($_.Exception.Message)" } } #Supprimer HP Documentation if (Test-Path "C:\Program Files\HP\Documentation\Doc_uninstall.cmd" -PathType Leaf){ Try { Invoke-Item "C:\Program Files\HP\Documentation\Doc_uninstall.cmd" Write-LogEntry -Value "Package supprime avec succes: HP Documentation" -Severity 1 } Catch { Write-LogEntry -Value "Erreur de suppression HP Documentation $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "HP Documentation est pas installe" -Severity 1 } #Supprimer HP Support Assistant en mode silencieux $HPSAuninstall = "C:\Program Files (x86)\HP\HP Support Framework\UninstallHPSA.exe" if (Test-Path -Path "HKLM:\Software\WOW6432Node\Hewlett-Packard\HPActiveSupport") { Try { Remove-Item -Path "HKLM:\Software\WOW6432Node\Hewlett-Packard\HPActiveSupport" Write-LogEntry -Value "HP Support Assistant regkey supprime $($_.Exception.Message)" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la recuperation de la cle de registre pour HP Support Assistant: $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "HP Support Assistant regkey non trouve" -Severity 1 } if (Test-Path $HPSAuninstall -PathType Leaf) { Try { & $HPSAuninstall /s /v/qn UninstallKeepPreferences=FALSE Write-LogEntry -Value "Package supprime avec succes: HP Support Assistant en mode silencieux" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la desinstallation de HP Support Assistant: $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "Programme de desinstallation de HP Support Assistant introuvable" -Severity 1 } #Suppression HP Connection Optimizer $HPCOuninstall = "C:\Program Files (x86)\InstallShield Installation Information\{6468C4A5-E47E-405F-B675-A70A70983EA6}\setup.exe" #Copie du fichier desinstallation xcopy /y .\uninstallHPCO.iss C:\Windows\install\ Write-LogEntry -Value "Fichier copie avec succes uninstallHPCO.iss to C:\Windows\install " -Severity 1 if (Test-Path $HPCOuninstall -PathType Leaf){ Try { & $HPCOuninstall -runfromtemp -l0x0413 -removeonly -s -f1C:\Windows\install\uninstallHPCO.iss Write-LogEntry -Value "Suppression reussie pour HP Connection Optimizer" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la desinstallation pour HP Connection Optimizer: $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "HP Connection Optimizer non trouve" -Severity 1 } #Liste des packages integres pour la suppression #Commande : Get-AppxPackage -AllUsers | where-object {$_.Publisher -notlike "*Microsoft*"} | where-object {$_.Publisher -notlike "*Skype*"} | Format-Table $UninstallPackages = @( "AD2F1837.HPJumpStarts" "AD2F1837.HPPCHardwareDiagnosticsWindows" "AD2F1837.HPPowerManager" "AD2F1837.HPPrivacySettings" "AD2F1837.HPSupportAssistant" "AD2F1837.HPSureShieldAI" "AD2F1837.HPSystemInformation" "AD2F1837.HPQuickDrop" "AD2F1837.HPWorkWell" "AD2F1837.myHP" "AD2F1837.HPDesktopSupportUtilities" "AD2F1837.HPEasyClean" "AD2F1837.HPSystemInformation" ) #Liste des programmes pour la desinstallation #Commande : Get-WmiObject -Class Win32_Product | Where-Object{$_.Name -like "HP*"} $UninstallPrograms = @( "HP Connection Optimizer" "HP Documentation" "HP MAC Address Manager" "HP Notifications" "HP Security Update Service" "HP System Default Settings" "HP Sure Click" "HP Sure Run" "HP Sure Recover" "HP Sure Sense" "HP Sure Sense Installer" "HP Wolf Security Application Support for Sure Sense" "HP Wolf Security Application Support for Windows" "HP Client Security Manager" "HP Wolf Security" ) #Obtenir une liste des packages installes correspondant a notre liste $InstalledPackages = Get-AppxPackage -AllUsers | Where-Object {($UninstallPackages -contains $_.Name)} #Obtenez une liste des packages provisionnes correspondant a notre liste $ProvisionedPackages = Get-AppxProvisionedPackage -Online | Where-Object {($UninstallPackages -contains $_.DisplayName)} #Obtenir une liste des programmes installes correspondant a notre liste $InstalledPrograms = Get-Package | Where-Object {$UninstallPrograms -contains $_.Name} #Supprimer d'abord les packages provisionnes ForEach ($ProvPackage in $ProvisionedPackages) { Write-LogEntry -Value "Tentative de suppression du package provisionne: [$($ProvPackage.DisplayName)]" -Severity 1 Try { $Null = Remove-AppxProvisionedPackage -PackageName $ProvPackage.PackageName -Online -ErrorAction Stop Write-LogEntry -Value "Package provisionne supprime avec succes: [$($ProvPackage.DisplayName)]" -Severity 1 } Catch { Write-LogEntry -Value "echec de la suppression du package provisionne: [$($ProvPackage.DisplayName)] Erreur message: $($_.Exception.Message)" -Severity 3 } } #Supression des appx packages ForEach ($AppxPackage in $InstalledPackages) { Write-LogEntry -Value "Tentative de suppression du package Appx: [$($AppxPackage.Name)] " -Severity 1 Try { $Null = Remove-AppxPackage -Package $AppxPackage.PackageFullName -AllUsers -ErrorAction Stop Write-LogEntry -Value "Package Appx supprime avec succes: [$($AppxPackage.Name)]" -Severity 1 } Catch { Write-LogEntry -Value "echec de la suppression du package Appx: [$($AppxPackage.Name)] Erreur message: $($_.Exception.Message)" -Severity 3 } } #Supprimer les programmes installes $InstalledPrograms | ForEach-Object { Write-LogEntry -Value "Tentative de desinstallation: [$($_.Name)]" -Severity 1 Try { $Null = $_ | Uninstall-Package -AllVersions -Force -ErrorAction Stop Write-LogEntry -Value "Desinstallation reussie: [$($_.Name)]" -Severity 1 } Catch { Write-LogEntry -Value "Erreur de desinstallation: [$($_.Name)] Erreur message: $($_.Exception.Message)" -Severity 3 } } #Tentative de secours 1 pour supprimer HP Wolf Security a l'aide de msiexec Try { MsiExec /x "{0E2E04B0-9EDD-11EB-B38C-10604B96B11E}" /qn /norestart Write-LogEntry -Value "Lancement de la desinstallation de MSI pour HP Wolf Security" -Severity 1 } Catch { Write-LogEntry -Value "Erreur de desinstallation HP Wolf Security using MSI - Erreur message: $($_.Exception.Message)" -Severity 3 } #Tentative de secours 2 pour supprimer HP Wolf Security a l'aide de msiexec Try { MsiExec /x "{4DA839F0-72CF-11EC-B247-3863BB3CB5A8}" /qn /norestart Write-LogEntry -Value "Lancement de la desinstallation de MSI pour HP Wolf 2 Security" -Severity 1 } Catch { Write-LogEntry -Value "Erreur de desinstallation HP Wolf Security 2 using MSI - Error message: $($_.Exception.Message)" -Severity 3 } #Supprimer les raccourcis $pathTCO = "C:\ProgramData\HP\TCO" $pathTCOc = "C:\Users\Public\Desktop\TCO Certified.lnk" $pathOS = "C:\Program Files (x86)\Online Services" $pathFT = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Free Trials.lnk" if (Test-Path $pathTCO) { Try { Remove-Item -LiteralPath $pathTCO -Force -Recurse Write-LogEntry -Value "Raccourci pour $pathTCO supprime" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la suppression $pathTCO $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "Dossier $pathTCO pas trouve" -Severity 1 } if (Test-Path $pathTCOc -PathType Leaf) { Try { Remove-Item -Path $pathTCOc -Force -Recurse Write-LogEntry -Value "Raccourci pour $pathTCOc supprime" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la suppression $pathTCOc $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "Fichier $pathTCOc pas trouve" -Severity 1 } if (Test-Path $pathOS) { Try { Remove-Item -LiteralPath $pathOS -Force -Recurse Write-LogEntry -Value "Raccourci pour $pathOS supprime" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la suppression $pathOS $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "Dossier $pathOS pas trouve" -Severity 1 } if (Test-Path $pathFT -PathType Leaf) { Try { Remove-Item -Path $pathFT -Force -Recurse Write-LogEntry -Value "Raccourci pour $pathFT supprime" -Severity 1 } Catch { Write-LogEntry -Value "Erreur lors de la suppression $pathFT $($_.Exception.Message)" -Severity 3 } } Else { Write-LogEntry -Value "Fichier $pathFT pas trouve" -Severity 1 } #Nettoyer le fichier de desinstallation pour HP Connection Optimizer Remove-Item -Path C:\Windows\install\uninstallHPCO.iss -Force Write-LogEntry -Value "Fichier supprime avec succes C:\Windows\install\uninstallHPCO.iss " -Severity 1