Удаление программ в Windows с помощью PowerShell

 В этой статье мы рассмотрим, как в Windows удалить установленные программы на локальном и удаленном компьютере с помощью PowerShell. Довольно часто в скриптах и сценариях автоматизации приходится использовать различные блоки кода для удаления установленных программ Windows. Для удаления программ из командной строки или скриптами PowerShell можно использовать несколько подходов.

Удаление установленных программ с помощью WMI

Чаще всего для удаления установленных программ в Windows используют команды, обращающиеся к пространству имен WMI. Например, с помощью утилиты wmic можно вывести список установленных программ:

wmic product get name,version


Для тихого удаления программы из этого списка можно использовать такую команду:

wmic product where name="VMware vCenter Converter Standalone" call uninstall /nointeractive

Команда вызовет WMI метод удаления программы через 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 команды для вывода и удаления программ через 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()

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


Также не выводятся UWP программы из Microsoft Store, установленные модули PowerShell (через PowerShellGet) и т.д.

Удалить программу на удаленном компьютере с помощью PowerShell модуля Package Manager

В современных версиях Windows 10/11 и Windows Server 2022/2019/2016 для установки и удаления программ можно использовать командлеты из модуля PowerShell Package Management. Изначально модуль использовался для установки/удаления PowerShell модулей. Однако вы можете использовать его и для удаления Win32 программ, MSU обновлений, программ установленных помощью MSI установщиков.

Чтобы вывести полный список установленных программ на локальном компьютере, выполните команду:

Get-Package

get-package

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

Get-PackageProvider

  • Programs
  • Msi
  • Msu
  • PowerShellGet
  • NuGet

  • список package provider

Чтобы вывести список программ, установленных с помощью определенного провайдера, выполните:

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}

Данный модуль можно использовать только для удаления программ Win32 и модулей. Для удаления UWP программ Microsoft Store нужно использовать PowerShell командлеты Remove-AppxPackage и Remove-AppxProvisionedPackage (см. Пример в статье).

Используем менеджер пакетов WinGet для удаления установленных программ

Для установки и удаления программ в Windows можно использовать новый менеджер пакетов winget (встроен в современные версии Windows 10 и 11). Чтобы вывести список программ на компьютере, выполните:

Winget list

Команда вернет список программ, в том числе установленных не через winget, а также список UWP приложений.

winget удаление программ

Для удаления программ, установленной через WinGet нужно выполнить команду:

winget uninstall --name 7zip.7zip

Для удаление MSI приложения Windows нужно указать его GUID:

winget uninstall --id "{332C1E78-1D2F-4A64-B718-68095DC6254B}"

Для удаления UWP приложения:

winget uninstall --id "Microsoft.ZuneVideo_8wekyb3d8bbwe"


Однако, winget не позволяет удалить программы на удаленном компьютере. Для запуска команд winget на удаленном компьютере нужно использовать возможности PowerShell Remoting (командлеты Invoke-Command и Enter-PSSession). Например:

Invoke-Command -ComputerName pc2122sd1 -ScriptBlock {winget uninstall --name 7zip.7zip}

Вы можете использовать рассмотренные здесь PowerShell скрипты для удаленного удаления программ, или в сценариях запуска команд на компьютерах в сети через SCCM или logon скрипты GPO.