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

Как удалить программы в командной строке или Windows PowerShell

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

Естественно, что этого недостаточно для выполнения многих видов деятельности на компьютере. Чтобы решить эту проблему, на ПК устанавливается дополнительное программное обеспечение.

Новые программы позволяют выполнять необходимые операции, делают работу более комфортной и продуктивной. Постепенно на компьютере оказывается установленными больное количество разных программ.

Часть приложений регулярно используется, другой софт задействован время от времени, а остальными программами не пользуются по разным причинам. Ненужные программы необходимо деинсталлировать с ПК, чтобы они не занимали место на дисковом пространстве или не влияли на производительность устройства.

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

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

Большей части пользователей удобнее использовать графический интерфейс средства удаления программ Windows или программы-деинсталлятора. Но, есть и другой метод решить эту задачу: удалить программу из PowerShell или из командной строки.

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

В этих случаях, можно воспользоваться консолью или более мощным инструментом — Windows PowerShell. Удаление программ через командную строку Windows выполняется одинаково в разных версиях операционной системы: Windows 10, Windows 8.1 (Windows 8), Windows 7.

Необходимо учитывать, что в окнах консоли отображаются не все установленные программы, а только те, которые для инсталляции на ПК использовали установщик Windows (установочные пакеты «.msi» приложений Win32).

Сначала мы посмотрим, как удалить программу с помощью командной строки, а затем сделаем тоже самое в Windows PowerShell.

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

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

wmic product get name,version

удаление программ с помощью wmic через WMI

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

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

Команда вызовет WMI метод удаления программы через Windows Installer.

Если удаление программы выполнено успешно, она вернет:

Аналогичные 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. В списке нет большинства пользовательских программ (например, браузеров).

список установленных программ в панели управления и в WMI namespace

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

Сведения из реестра Windows

Зато все нормальные программы при установке должны записывать сведения в реестр, откуда их извлекает элемент панели управления appwiz.cpl. Конкретный раздел реестра хорошо известен и давно задокументирован в статье KB314481 (ее я всегда нагугливаю запросом uninstall registry).

1 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall

У каждого приложения там свой подраздел, именем которого по воле разработчика является название или идентификатор программы. Команда для удаления записана в параметре UninstallString – именно она вызывается из панели управления.

Заметьте, что команда открывает графический интерфейс деинсталлятора, но не удаляет программу автоматически, как в случае со способом WMI. Поэтому нужно еще выяснить ключ тихой установки/удаления, зависящий от типа установщика. Зачастую, это /s или /silent, и тогда команда для автоматического удаления выглядит примерно так:

1 «C:Program FilesVideoLANVLCuninstall.exe» /s

Но и у этого способа есть нюанс – в обсуждаемом разделе реестра могут отображаться не все программы. Например, я не нашел там установленный uTorrent (проверьте у себя).

Откуда панель управления о нем знает? К ответу можно прийти поиском по реестру или просто догадаться, но лучше сразу взять простой и удобный инструмент — Process Monitor.

WSH Remote Scripting

Да, как ни странно у Windows Script Host тоже есть возможность запуска сценариев на других компьютерах. Правда эта функция не получила большой популярности, и скорее всего из-за того что требует слишком много подготовительных мероприятий, а взамен предоставляет совсем немного возможностей. Но я все равно расскажу об этом методе, так как и он может пригодиться.

Итак, для запуска сценария на другом компьютере с помощью WSH нам понадобится сделать следующее:

Права администратора на удалённом компьютере. Это само собой разумеется, и требуется почти для всех остальных методов запуска перечисленных в этой статье.

Разрешить WSH Remote Scripting создав в системном реестре строковой параметр Remote равный «1» в ключе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows Script HostSettings

Из за ошибки описанной в статье базы знаний Microsoft с номером 311269, на системах с Windows XP может понадобиться выполнить команду wscript –regserver

Если на компьютерах используется брандмауэр, то в нём необходимо разрешить обращения к DCOM. Причем сделать это надо не только на управляемом компьютере, но и на том с которого вы хотите запускать сценарий.

В системах Windows XP с пакетом обновлений 2 и выше, необходимо изменить параметры безопасности DCOM. Это можно сделать с помощью групповой политики. В узле Computer Configuration Windows Settings Security Settings Local Policies Security Options следует установить разрешения следующим образом:

DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax
Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access

DCOM: Machine Launch Restrictions in Security Descriptor Definition Language (SDDL) syntax
Выдать группе Administrators разрешения Allow Local Launch, Allow Remote Launch, Allow Local Activation, Allow Remote Activation
Группе Everyone – Allow Local Launch, Allow Local Activation

Ну и после всех этих процедур, можно попробовать запустить свой сценарий на другом компьютере.

Пример сценария, который использует эту технологию:

Через реестр

Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:

В зависимости от ветки реестра, процесс будет выполняться или под пользователем, выполнившим вход в систему, или под аккаунтом SYSTEM.

Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd, но эти методы уже из серии «можно, но не нужно».

Теперь перейдем к новым инструментам.

Выполнение блока сценария в фоновом режиме

Среда PowerShell 2.0 дает возможность выполнять фоновые задания, то есть оператор может запускать команду в фоновом режиме. Такая возможность полезна при запуске команд, выполнение которых требует много времени.

Чтобы запустить фоновое задание на локальном компьютере, можно воспользоваться командой Start-Job. Но надо сказать, что данная команда не имеет параметра -ComputerName, а это значит, что ее нельзя использовать для выполнения фонового задания на удаленной машине. Вместо этого вам нужно будет выполнить команду Invoke-Command с параметром -AsJob. Так, верхняя команда на экране 2 инициирует выполнение блока сценария в виде фонового задания на удаленном компьютере titan. После того как я ввел эту команду, на экране сразу же появилось приглашение: оболочка PowerShell отправила блок сценария для выполнения на удаленный компьютер и после этого вернула мне управление. В предупреждении говорится, что выполненная команда не уместилась в окне консоли и потому не была включена в выходные данные. Если бы окно консоли у меня было шире, средство форматирования оболочки PowerShell включило бы команду в перечень выходных данных. В столбцах Id и Name указывается задание (его идентификатор и понятное имя соответственно), а в столбце State указывается, в каком состоянии находится задание: выполняется, приостановлено или завершено. В столбце HasMoreData содержится информация, свидетельствующая о том, что извлечены все данные, касающиеся того или иного задания, или что задание содержит больший объем сведений, которые следует извлечь.

Экран 2. Выполнение блока сценария в фоновом режиме на удаленном компьютере

Чтобы установить, завершено ли выполнение фонового задания, вы можете выполнить команду Get-Job, как показывает вторая команда на экране 2. Если при этом вы не используете каких-либо параметров, Get-Job проверяет состояние всех заданий, запущенных в ходе текущего сеанса. Если у вас выполняется несколько заданий одновременно, можете использовать такие параметры, как -Id или -Name, для указания на то, какое именно задание вы хотите проверить. Когда выполнение фонового задания завершится, столбец State выходных данных будет иметь значение Completed.

Для считывания результатов выполнения фонового задания можно использовать команду Receive-Job. Эта команда, как и команда Get-Job, возвращает выходные данные всех заданий, запущенных в ходе текущего сеанса, если вы не использовали параметр для указания на то, какое именно задание вас интересует. Так, последняя команда на экране 2 включает в себя параметр -Id, который указывает на то, что необходимо получить выходные данные о задании с идентификатором 9. Я опустил имя параметра -Id, поскольку его указывать необязательно. На экране 3 отображены последние строки выходных данных, касающихся выполнения рассматриваемого дистанционного фонового задания.

Экран 3. Образец результатов выполнения фонового задания на удаленном компьютере

Удаленное администрирование. Установка и удаление программ

Иногда удаленному выполнению команд может препятствовать антивирус или встроенный брандмауэр, в зависимости от настроек безопасности вашей сети. При необходимости отключаем их.

Отключить антивирус удаленно на примере KAV

psexec ComputerName «C:Program Files (x86)Kaspersky LabKaspersky Endpoint Security 10 for Windows SP2avp.com» exit / login = KLAdmin / password = < Pass >

Отключение встроенного брандмауэра для всех профилей (только локально)

Для удаленного отключения брандмауэра должен быть доступен Сервер RPC. Доступ к которому блокирует включенный брандмауэр Такая рекурсия.

Поэтому, как всегда, пойдем обходным путем:

Команда на включение брандмауэра, соответственно, будет state on

Удаление программы

Установка программы

Тихая установка с предварительным копированием программы на удаленный хост

Установка с сетевого ресурса

Административные шары, такие как «C$»,
для подобной команды не функционируют.
Необходимо создать сетевую папку вручную

Так же возможна установка по списку компьютеров используя «@», как показано в основной заметке по Psexec.

Получить список программ

Получать список установленных в системе программ лучше из реестра, нежели средствами WMI. Этот метод работает намного быстрее, чем при использовании
Get-WmiObject -Class Win32_Product

Get — ItemProperty HKLM : Software Microsoft Windows CurrentVersion Uninstall * | Select DisplayName | Sort DisplayName

Get — ItemProperty HKLM : SOFTWARE WOW6432Node Microsoft Windows CurrentVersion Uninstall * | Select DisplayName | Sort DisplayName

Из-за того что в системе могут быть установлены как 64, так и 32 битные приложения, необходимо получать значения обеих веток. Можно поместить весь список в одну переменную.

Так же читайте как в тихом режиме деинсталлировать любую программу по ее GUID

Неявное удаленное управление

Еще один, довольно нестандартный способ удаленного управления — неявное удаленное управление (Implicit remoting). Используя его можно, не создавая удаленной сессии, локально выполнять командлеты, находящиеся на удаленном компьютере.

Для примера берем обычную рабочую станцию, без установленных средств удаленного администрирования. Создаем удаленную сессию с контроллером домена SRV4 и импортируем в эту сессию модуль Active Directory:

$session = New-PSSession -ComputerName SRV4
Invoke-Command -Session $session

Затем экспортируем из удаленной сессии командлеты Active Directory и помещаем их в локальный модуль RemoteAD:

Export-PSSession -Session $session -CommandName *-AD* -OutputModule RemoteAD`
-AllowClobber

Эта команда создаст в папке WindowsPowerShellModulesRemoteAD новый модуль PowerShell. Загружены будут только командлеты с именами, соответствующими шаблону *-AD*. При этом сами командлеты не копируются на локальный компьютер. Локальный модуль служит своего рода ярлыком, а сами команды будут выполняться на удаленном контроллере домена.

После создания модуля удаленную сессию можно закрыть, она больше не понадобится.

импорт удаленного модуля PowerShell

Импортируем новый модуль в текущий сеанс (в PS 3.0 можно этот шаг пропустить):

А теперь внимание — мы не открываем удаленную сессию с контроллером домена, где расположены командлеты. Не нужно явно запускать этот сеанс — это можно сделать неявно, попытавшись выполнить удаленные командлеты:

New-ADUser -Name BillGates -Company Microsoft
Get-ADUser BillGates

При этом будет восстановлено удаленное подключение к контроллеру домена, после чего команда будет передана на контроллер домена и там выполнена. Результат выполнения будет сериализован в XML и передан по сети на локальный компьютер, где будет выполнена десериализация в объекты, с которыми может работать PowerShell.

Удаленный сеанс будет активным до тех пор, пока вы не закроете консоль или не удалите модуль RemoteAD.

неявное удаленное управление в PowerShell

Неявное удаленное управление позволяет работать с командлетами на удаленном компьютере практически так же, как если бы они были установлены на локальной машине. При этом все необходимые командлеты всегда под рукой, что довольно удобно.

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

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector