Часто в скриптах и сценариях автоматизации для Windows приходится использовать различные блоки кода для проверки наличия и удаления установленных программ. В Windows есть несколько принципиально разных инструментов командной строки для удаления приложений, в зависимости от версии Windows, типа приложения (MSI приложение, классическое приложение Win32 или приложение Microsoft Store), установлена ли программа для всех пользователей (
per-machine
) или только для текущего пользователя (
per-user
). В этой статье мы рассмотрим, несколько способов удаления установленных в Windows программ из командной строки или консоли PowersShell.
Удалить программу в Windows 11 и 10 через PowerShell модуль PackageManagement
В Windows 11, 10, а также и Windows Server 2025/2022/2019/2016 для установки и удаления программ можно использовать командлеты из встроенного PowerShell модуля PackageManagement. Это самый простой и одновременно универсальный способ удаления программ в современных версиях Windows, который стоит использовать в первую очередь. Он позволяет удалить как программы, установленные через службу Windows Installer (MSI пакеты), классические Win-32 программы и MSU обновления Windows Update.
Чтобы вывести полный список установленных программ на локальном компьютере, выполните команду:
Get-Package

Команда вернет несколько классов программ, установленных через разные провайдеры (ProviderName). Полный список доступных провайдеров на компьютере можно вывести так:
Get-PackageProvider
- Programs
- Msi
- Msu
- PowerShellGet
- NuGet

Чтобы вывести программы, установленные через определенного провайдера, выполните:
Get-Package -ProviderName Programs -IncludeWindowsInstaller
Для удаления программы можно использовать конвейер с командлетом Uninstall-Package (обратите внимание, что я использую знак подстановки
*
чтобы не имя программы целиком):
Get-Package -Name "Notepad++*" | Uninstall-Package
Можно удалить установленный PowerShell модуль. Например, чтобы удалить все модули VMware.PowerCLI:
Get-Package -ProviderName PowerShellGet -Name "VMware.*" | Uninstall-Package
Для удаления программы на удаленном компьютере, воспользуйтесь командлетом Invoke-Command:
Invoke-Command -ComputerName Msk-Ser01 -ScriptBlock { Get-Package -Name "Notepad++*" | Uninstall-Package}
Удаление приложений Microsoft Store (UWP) с помощью PowerShell
Для удаления приложений Microsoft Store (UWP приложений) используются PowerShell командлеты
Remove-AppxPackage
и
Remove-AppxProvisionedPackage
.
Вывести список Microsoft Store приложений, установленных для текущего пользователя:
Get-AppxPackage | select Name,NonRemovable,PackageUserInformation,PackageFullName

Удалить приложение только у текущего пользователя:
Get-AppxPackage *BingWeather* | Remove-AppPackage -verbose
Удалить приложение для всех пользователей:
Get-AppxPackage *BingWeather* -AllUsers| Remove-AppPackage –AllUsers -verbose
Используем менеджер пакетов WinGet для удаления программ
Для установки и удаления программ в Windows можно использовать встроенный менеджер пакетов WinGet (встроен в современные версии Windows 10 и 11). Чтобы вывести список программ на компьютере, выполните:
Winget list
Команда вернет список программ, в том числе установленных не через winget, а также список приложений Microsoft Store.

Для удаления программ, установленной через WinGet нужно указать его имя:
winget uninstall --name 7zip.7zip
Для удаления MSI приложения Windows нужно указать его GUID:
winget uninstall --id "{332C1E78-1D2F-4A64-B718-68095DC6254B}"
Для удаления приложения Microsoft Store, укажите его PackageFullName:
winget uninstall --id "Microsoft.ZuneVideo_8wekyb3d8bbwe"

Менеджер пакетов WinGet не позволяет удалить программы на удаленном компьютере. Для запуска команд winget на удаленном компьютере нужно использовать возможности PowerShell Remoting (командлеты Invoke-Command и Enter-PSSession). Например:
Invoke-Command -ComputerName pc2122sd1 -ScriptBlock {winget uninstall --name 7zip.7zip}
Удаление установленных программ с помощью WMI
В предыдущих версиях Windows для удаления установленных программ чаще использовались команды, которые выводят список программ и запускают команду удаления через API пространства имен WMI (
Windows Management Instrumentation
). Я не рекомендуют использовать эти способы в современных версиях Windows (и ниже объясню почему).
Например, с помощью утилиты wmic можно вывести список установленных программ:
wmic product get name,version

Для тихого удаления программы нужно скопировать ее полное имя из списка и выполнить такую команду
wmic product where name="VMware vCenter Converter Standalone" call uninstall /nointeractive
Команда вызовет WMI метод удаления программы VMware vCenter Converter Standalone через Windows Installer.
Executing (\\COMPName\ROOT\CIMV2:Win32_Product.IdentifyingNumber="{PROGRAM_GUID}",Name="VMware vCenter Converter Standalone",Version="6.2.0.8466193")->Uninstall()
Если удаление программы выполнено успешно, она вернет:
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
В PowerShell аналогом команды wmic для обращения к пространству имен WMI может быть командлет Get-WmiObject. Аналогичные PowerShell команды для вывода и удаления программ через WMI:
Get-WmiObject Win32_Product | ft name,version,vendor,packagename
(Get-WmiObject Win32_Product -Filter "Name = 'XXX'").Uninstall()
Чтобы удалить программу на удаленном компьютере, нужно добавить параметр
-ComputerName
. Например, чтобы удалить Microsoft Office на удаленном компьютере, выполните:
$apps = Get-WmiObject -Class Win32_Product -ComputerName wks-pc11s22 |where name -Like "Office 16 Click-to-Run*"
$apps.uninstall()
В новых версиях PowerShell Core команда Get-WmiObject не поддерживается и вместо нее нужно использовать командлет Get-CimInstance. Вывести список программ:
Get-CimInstance Win32_Product | ft name,version,vendor,packagename
Удалить программу:
$MyApp = CimInstance -Class Win32_Product | Where-Object{$_.Name -eq "PowerToys (Preview)"}
$MyApp.Uninstall()

Однако, такой способ удаления программы не будет универсальным. Если вы сравните список программ, который возвращается через WMI namespace и список программ в панели управления Windows (команда
>ms-settings:appsfeatures
), вы увидите, что они отличаются. Команда вывела список программ, установленных через Windows Installer. В списке нет большинства пользовательских программ (например, браузеров).

А теперь, почему не стоит использовать команды для удаления программ через WMI API:
- Этот способ позволяет удалить только программы, установленные через службу MsiInstaller (классические MSI пакеты)
- При выводе списка установленных программ через WMI класс Win32_Product, служба MsiInstaller для каждой программы инициирует проверку консистентности каждого приложения. Что потенциально может привести к внесению изменений в текущую конфигурацию MSI приложений. Можете убедиться в этом по наличию событий с Event ID 1035 от MsiInstaller в журнале Application:
Windows Installer reconfigured the product. Product Name: Zoom Workplace (64-bit). Product Version: 6.6.22255. Product Language: 1033. Manufacturer: Zoom. Reconfiguration success or error status: 0.

- Выполнение команд через WMI крайне медленное
- В современных версиях Windows 11 утилита wmic отсутствует по умолчанию
Извлекаем команды для удаления программ из реестра Windows
Как мы уже говорили, не все программы используют установщик Windows (MSI installer) для установки. Однако независимо от способа установки, корректно разработанные программы при установке обязательно прописываются в реестр. В реестре прописываете как информация о программе, так и конкретная строка (команда), которую нужно запустить для удаления ПО.
Информация о программах, установленных для всех пользователей компьютера (per-machine) хранится в ветках реестра:
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall
Программы, которые устанавливаются только в профиль текущего пользователя (
%userprofile%\AppData
), прописываются в пользовательские ветки реестра:
- HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKCU\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall
Например, я нашел в реестре ветку утилиты 7-Zip и в параметр UninstallString обнаружил корректную команду для запуска его удаления.

Так как эта программы была установлена через WMI, для ее удаления используется команда
msiexec
. Т.е. для удаления этого приложения нужно выполнить:
msiexec /x {GUID интересующего приложения внутри фигурных скобок}

Следующий PowerShell скрипт соберет информацию со всех указанных веток реестра и выведет на экран названия программы и команду для ее деинсталляции:
$Installed = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
$Installed += Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
$Installed += Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
$Installed += Get-ItemProperty HKCU:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
В данном случае я хочу вывести программы, которые не установлены через Msiexec (можно пропустить это условие с where):
$Installed| where UninstallString -notlike "*msiex*"|Select-Object -Property DisplayName, QuietUninstallString, UninstallString|fl

Для удаления программы, скопируйте команду из значения UninstallString и выполните ее в командной строке. Обратите внимание что у некоторых приложений в значении QuiteUninstallString указана команда для тихого удаления программы (без вывода графических уведомлений и подтверждений)
Рассмотренные в статье команды и PowerShell скрипты можно использовать как для локального, так и удаленного удаления программ, а также в сценариях автоматического обновления/удаления программ на пользовательских компьютера SCCM или logon скрипты GPO.


Спасибо, полезно
$apps.uinstall() — пропущена «n»
+
Не помогло. Установить программу с помощью PS оказалось проще, чем удалить.
Иногда требуется передать параметры для удаления (например пароль), это требует индивидуального подхода.
Довольно полезные знания. Спасибо.