Практика / рабочие места
Как применять материал
Материал стоит воспринимать как короткий runbook: сначала сохранить рабочее состояние, затем проверить симптом, выполнить минимально достаточное исправление и зафиксировать результат. Так единичная проблема не превращается в бесконечную переписку.
Практический порядок
- сначала закрыть WhatsApp и сделать резервную копию важных чатов/файлов, если они нужны
- запустить скрипт в режиме WhatIf и посмотреть, какие объекты он нашел
- для реального удаления повторить запуск с WhatIfMode=false и включать удаление пользовательских данных только осознанно
- после удаления перезагрузить Windows и проверить Проводник, автозагрузку и список установленных приложений
Безопасный PowerShell-скрипт удаления WhatsApp
Сначала запустите без параметров: это dry-run. Для реального удаления используйте `-WhatIfMode $false`; пользовательские данные и реестр включайте отдельными параметрами только после резервной копии.
<#
Удаление WhatsApp Desktop с Windows.
По умолчанию работает в безопасном режиме WhatIf: показывает, что будет сделано,
но не удаляет файлы. Для реального удаления запустите с -WhatIfMode $false.
#>
[CmdletBinding()]
param(
[bool]$WhatIfMode = $true,
[bool]$RemoveUserData = $false,
[bool]$RemoveRegistryKeys = $false
)
$ErrorActionPreference = "Continue"
function Invoke-SafeRemove {
param(
[Parameter(Mandatory)][string]$Path,
[switch]$Recurse
)
if (-not (Test-Path -LiteralPath $Path)) {
Write-Host "Не найдено: $Path"
return
}
if ($WhatIfMode) {
Write-Host "[WhatIf] Будет удалено: $Path"
return
}
Remove-Item -LiteralPath $Path -Force -Recurse:$Recurse -ErrorAction Stop
Write-Host "Удалено: $Path"
}
Write-Host "Проверка запущенного WhatsApp..."
$runningProcesses = Get-Process -Name "WhatsApp" -ErrorAction SilentlyContinue
if ($WhatIfMode) {
foreach ($process in $runningProcesses) {
Write-Host "[WhatIf] Будет остановлен процесс: $($process.ProcessName) (PID $($process.Id))"
}
} else {
$runningProcesses | Stop-Process -Force -ErrorAction Continue
}
Write-Host "Удаление Store/MSIX-версии для текущего пользователя..."
$packages = Get-AppxPackage -Name "*WhatsApp*" -ErrorAction SilentlyContinue
foreach ($package in $packages) {
if ($WhatIfMode) {
Write-Host "[WhatIf] Remove-AppxPackage: $($package.PackageFullName)"
} else {
Remove-AppxPackage -Package $package.PackageFullName -ErrorAction Continue
}
}
Write-Host "Проверка классических папок установки..."
$programFilesX86 = [Environment]::GetFolderPath(
[Environment+SpecialFolder]::ProgramFilesX86
)
$machinePaths = @($env:ProgramFiles, $programFilesX86) |
Where-Object { $_ } |
ForEach-Object { Join-Path $_ "WhatsApp" } |
Select-Object -Unique
foreach ($path in $machinePaths) {
Invoke-SafeRemove -Path $path -Recurse
}
if ($RemoveUserData) {
Write-Host "Удаление пользовательских данных включено."
$userPaths = @(
(Join-Path $env:LocalAppData "WhatsApp"),
(Join-Path $env:AppData "WhatsApp"),
(Join-Path $env:LocalAppData "Packages")
)
foreach ($path in $userPaths) {
if ($path -like "*\Packages") {
Get-ChildItem -LiteralPath $path -Directory -Filter "*WhatsApp*" -ErrorAction SilentlyContinue |
ForEach-Object { Invoke-SafeRemove -Path $_.FullName -Recurse }
} else {
Invoke-SafeRemove -Path $path -Recurse
}
}
} else {
Write-Host "Пользовательские данные не удаляются. Для удаления добавьте -RemoveUserData $true."
}
if ($RemoveRegistryKeys) {
Write-Host "Удаление пользовательских ключей реестра включено."
Invoke-SafeRemove -Path "HKCU:\Software\WhatsApp" -Recurse
} else {
Write-Host "Реестр не очищается. Для очистки добавьте -RemoveRegistryKeys $true."
}
Write-Host "Готово. Если WhatIfMode=true, это был только предварительный просмотр."
Важно: перед запуском проверьте код под свою задачу, сохраните важные данные и не используйте административные скрипты из интернета без понимания каждого действия.
Что проверить перед внедрением
- режим WhatIf включен по умолчанию и ничего не удаляет без явного параметра
- пользовательские данные и реестр удаляются только отдельными флагами
- скрипт работает с конкретными путями через LiteralPath, без широких масок по диску
- если приложение установлено из Microsoft Store, используется Remove-AppxPackage для текущего пользователя
Итог: приложение удалено чисто, автозапуск и остаточные данные проверены, пользовательский профиль не хранит лишний мусор.