Время на прочтение
5 мин
Количество просмотров 26K
Пришло время выложить из закромов очередной скрипт для системных администраторов. Заготовки для работы с пакетами обновлений и компонентами системы выкладывались в предыдущих статьях. Сегодня Я поделюсь готовым решением, которое можно без доработок применять в работе. Как известно, компания Microsoft решила последовать примеру Google и открыла свой маркет приложений, под названием Магазин Windows. В дистрибутивах ОС начиная c Windows 8 появились приложения нового типа (формат файлов распространения — AppX), которые являются универсальными и должны запускаться на всех устройствах под Windows. Среди предустановленных универсальных приложений лично Я не нашел ничего полезного, поэтому и написал скрипт, который удаляет их все.
Представленное здесь решение предназначено для обслуживания образов Windows 8, 8.1, 10. Может применяться как к автономным файлам образов в формате *.wim, так и к развёрнутой (установленной) системе. Как и в предыдущих моих скриптах использую средства системы DISM. Однако в ходе разработки выяснилось, что с помощью команды dism нет возможности удалить универсальные приложения из установленной системы (обслуживание онлайн) — только средствами PowerShell. Пришлось делать выбор: либо писать скрипт полностью на PS, либо использую возможности командного интерпретатора (CMD), осуществить вызов отдельных операций из PS. Я выбрал второй вариант, в связи с чем, представленное решение состоит из двух файлов: основного скрипта (сохранить с любым именем *.cmd) и дополнительного (сохранить с именем RemoveAppxes.ps1).
Основной скрипт
@echo off
title Deleting Appxes in Windows image
set _file=install.wim
set _img=Online
set _mnt=mount
dism /English /LogLevel:1 /Get-Help | find "Version: 6.1" > nul && exit
:pre_menu
cls
if not exist %_file% goto :version
dism /English /LogLevel:1 /Get-ImageInfo /ImageFile:%_file%
echo -------------------------------------------------------------------------------
if %ERRORLEVEL% NEQ 0 pause & exit
set /p _ind=Input index or press [Enter] for quit: || exit
if %_ind% EQU 0 goto :version
if %_ind% GTR 0 if %_ind% LEQ 24 goto :ind_menu
goto :pre_menu
:ind_menu
cls
dism /English /LogLevel:1 /Get-ImageInfo /ImageFile:%_file% /Index:%_ind%
echo -------------------------------------------------------------------------------
if %ERRORLEVEL% NEQ 0 pause & goto :pre_menu
choice /c abcdefghijklmnopqrstuvwxyz /n /m "Mount selected image? [m] "
if %ERRORLEVEL% EQU 13 goto :mount
goto :pre_menu
:version
dism /%_img% /English /LogLevel:1 /Get-Help | find "Image Version: 6.1" > nul && goto :unmount
goto :remove
:remove
cls
echo Getting list of Appxes. Please wait...
dism /%_img% /English /LogLevel:1 /Get-ProvisionedAppxPackages > %TEMP%\appxes.txt
echo -------------------------------------------------------------------------------
set _num=1
for /f "skip=8 tokens=3" %%a in (%TEMP%\appxes.txt) do call :filter %%a
del %TEMP%\appxes.txt
echo Removes default application associations
dism /%_img% /English /LogLevel:1 /Remove-DefaultAppAssociations
echo -------------------------------------------------------------------------------
if %_img%==Online (
echo Remove current Appxes for AllUsers
powershell -Command Start-Process powershell -ArgumentList '-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File RemoveAppxes.ps1' -Verb RunAs
)
if not exist %_file% exit
goto :unmount
:filter
echo %1 | findstr /ric:"Microsoft.*" > nul
if %ERRORLEVEL% EQU 0 call :action %1
exit /b
:action
echo %1 | findstr /ric:"Microsoft.*_" > nul
if %ERRORLEVEL% NEQ 0 (
set /a _num+=1
echo %_num% Remove: %1
) else (
dism /%_img% /English /LogLevel:1 /Remove-ProvisionedAppxPackage /PackageName:%1
echo -------------------------------------------------------------------------------
)
exit /b
:mount
cls
md %_mnt%
dism /English /LogLevel:1 /Mount-Image /ImageFile:%_file% /Index:%_ind% /MountDir:%_mnt%
if %ERRORLEVEL% NEQ 0 rd %_mnt% & pause & exit
set _img=Image:%_mnt%
goto :version
:unmount
cls
if not %_img%==Online (
dism /English /LogLevel:1 /Unmount-Image /MountDir:%_mnt% /Commit
rd %_mnt%
)
set _img=Online
goto :pre_menu
Дополнительный скрипт
Get-AppxPackage -AllUsers | Remove-AppxPackage
Использование
Два файла должны размещаться в одной папке. Если в папке запуска отсутствует файл образа — install.wim, то скрипты выполняют работу в полностью автоматическом режиме. Если в папке запуска присутствует файл образа — install.wim, то скрипт выполняет считывание из него информацию об имеющихся «индексах» и предлагает ввести номер. После этого отображается расширенная информация о выбранном «индексе» выдаётся запрос на монтирование. Нажатие любой клавиши приводит к возврату, а нажатие клавиши [m] запускает следующую цепочку действий: монтирование образа, проверка версии ОС, удаление дистрибутивов приложений (по циклу), удаление всех ассоциаций, деинсталляция установленных приложений (при запуске онлайн), размонтирование образа, возврат в меню выбора «индекса». После чего можно выбрать другой «индекс» образа для удаления приложений. Выбор «индекса» под номером 0 запускает обслуживание онлайн.
Разбор кода
Вначале командой set происходит установка переменных. Можно изменить предполагаемое имя файла образа install.wim (например, на install.esd). Можно изменить имя папки монтирования (по-умолчанию mount) или задать путь, если папка монтирования должна находится за пределами папки запуска.
:pre_menu
Предварительное меню. Получение основной информации о wim-файле с контролем ошибок. Если отсутствует файл образа, то запуск в режиме Online.
:ind_menu
Индексное меню. Получение расширенной информации о выбранном «индексе» в wim-файле с контролем ошибок. Предложение смонтировать «индекс».
:version
Проверка версии целевой системы. Если оказывается, что скрипт пытаются применить к образу Windows 7, то происходит размонтирование. Иначе, выполняется переход к следующей метке.
:remove (:filter, :action)
Основной блок выполнения скрипта. Вначале запрашивается список интегрированных универсальных приложений с сохранением во временный файл appxes.txt. Затем в цикле for из полученного списка последовательно выбираются строки и передаются в псевдофункцию :filter. Строки фильтруются поиском по регулярному выражению «Microsoft.*» — если найдена, то передаются в следующую псевдофункцию :action. Здесь по регулярному выражению «Microsoft.*_» отфильтровываются названия универсальных приложений, передаваемые в дальнейшем утилите dism для удаления. Чтобы лучше понять логику работы нужно взглянуть на содержимое файла appxes.txt. Так как файл удаляется по завершению работы цикла, то чтобы с ним ознакомиться нужно предварительно вручную его получить и сохранить.
Одной командой происходит удаление всех ассоциаций открытия отдельных файлов универсальными приложениями. Для распространённых типов файлов остаются ассоциации со стандартными классическими приложениями Windows.
Удаление (деинсталляция) универсальных приложений на установленной системе происходит вызовом составной команды на языке скриптов PowerShell. Файл дополнительного скрипта RemoveAppxes.ps1 вначале выполняет запрос списка всех универсальных приложений для всех пользователей, а затем «по конвейеру» передаёт их команде на удаление. Вроде бы ничего сложного, однако, чтобы выполнить эту операцию скрипт PS должен быть запущен с повышенными правами, причём работать от имени Администратора не достаточно. Для успешного запуска нужно вставить тот сложный код в команде powershell чтобы получить повышение прав. Защита которая легко обходится! Вот за этот «идиотизм» мне и не приглянулся PowerShell.
:mount
Монтирование образа. Предварительно создаётся папка монтирования. Контроль ошибок. Изменяется переменная определяющая спецификацию образа, теперь указывает на путь к автономному образу.
:unmount
Размонтирование образа. Если выполнялось интерактивное обслуживание (/Online), то размонтировать не нужно. Возвращение переменных к исходным значениям.
Заключение
Я показал простой и быстрый способ удаления приложений Магазина Windows. Считаю, что одно и тоже приложение не может быть одинаково удобным для использования на мобильном устройстве и на ПК. Прежде всего у названных платформ разное функциональное назначение, а значит и требуемые пользователям приложения должные предоставлять разный функционал. После отработки скрипта несколько универсальных приложений всё же остаются, прежде всего это сам Магазин Windows, с помощью которого можно установить то, что было удалено или что-то ещё.
В этой статье мы рассмотрим, как в Windows удалить установленные программы на локальном и удаленном компьютере с помощью PowerShell. Довольно часто в скриптах и сценариях автоматизации приходится использовать различные блоки кода для удаления установленных программ Windows. Для удаления программ из командной строки или скриптами PowerShell можно использовать несколько подходов.
Содержание:
- Удаление установленных программ с помощью WMI
- Удалить программу на удаленном компьютере с помощью PowerShell модуля Package Manager
- Используем менеджер пакетов WinGet для удаления установленных программ
Удаление установленных программ с помощью WMI
Чаще всего для удаления установленных программ в Windows используют команды, обращающиеся к пространству имен WMI. Например, с помощью утилиты 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 команды для вывода и удаления программ через 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
Команда вернет несколько классов программ, установленных через разные провайдеры (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}
WinRM PowerShell Remoting можно включить на компьютерах с помощью GPO (ссылка).
Данный модуль можно использовать только для удаления программ Win32 и модулей. Для удаления UWP программ Microsoft Store нужно использовать PowerShell командлеты
Remove-AppxPackage
и
Remove-AppxProvisionedPackage
(см. Пример в статье).
Используем менеджер пакетов WinGet для удаления установленных программ
Для установки и удаления программ в Windows можно использовать новый менеджер пакетов winget (встроен в современные версии Windows 10 и 11). Чтобы вывести список программ на компьютере, выполните:
Winget list
Команда вернет список программ, в том числе установленных не через winget, а также список UWP приложений.
Для удаления программ, установленной через 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.
Работу компьютера невозможно представить без установки вспомогательного ПО. Программы позволяют решать разные задачи, но в то же время от некоторых приложений приходится избавляться. Для этого пользователи обращаются к «Параметрам», которые предусматривают функцию деинсталляции. Одновременно с этим допускается удаление приложений на Windows 10 через консоль PowerShell, что выглядит более предпочтительным вариантом во многих сценариях.
Преимущества использования оболочки PowerShell
Удобство «Параметров» при деинсталляции программ неоспоримо. Перед пользователем открывается проработанный интерфейс, где необходимо перейти в раздел «Приложения», выбрать лишнюю программу и нажать на кнопку «Удалить». Зачем в таком случае использовать оболочку PowerShell, внешний вид которой отталкивает большое количество владельцев ПК?
Во-первых, при удалении через «Параметры» или «Панель управления» может произойти зависание. PowerShell в таком случае решает проблему, выполняя операцию в принудительном порядке. Но главное преимущество консоли – удаление стандартных приложений, установленных на Windows 10 изначально. Другими средствами избавиться от подобных программ не получится, и только специальная консоль готова прийти на помощь.
Что касается особенностей самой консоли, то она представляет собой интерфейс для обработки пользовательских запросов. Владелец компьютера вводит команду определенного формата, а затем приводит ее в действие нажатием на клавишу «Enter». Конечно, среднестатистический пользователь вряд ли знает, какой запрос необходим для выполнения той или иной операции. Однако далее мы расскажем все о командах, которые позволяют избавиться от ненужных программ и не сделать ничего лишнего.
Как удалить программу, используя PowerShell
Стандартные приложения Windows 10 можно удалить как все сразу, так и по отдельности. Выбирая конкретный способ деинсталляции, проанализируйте, какие предустановленные программы являются для вас важными, а какие – нет.
Удаление всех стандартных приложений
Чаще всего пользователи решают сразу все встроенные программы. Их можно понять, ведь в таком случае освобождается внушительное количество места на внутреннем накопителе. Но прибегать к этому способу рекомендуется только тем, кто полностью уверен в своих действиях:
- Щелкните ПКМ по значку «Пуск».
- Запустите PowerShell от имени администратора.
- Введите запрос «Get-AppxPackage -AllUsers | Remove-AppxPackage».
- Нажмите на клавишу «Enter».
Важно. Несмотря на полную деинсталляцию приложений, они будут установлены заново при создании еще одной учетной записи Windows.
Не исключено, что, кликнув ПКМ по значку «Пуск», вы не увидите в контекстном меню опцию запуска PowerShell. Вместо нее здесь будет отображаться командная строка. Для замены одного интерфейса на другой сделайте следующее:
- Откройте «Параметры» через меню «Пуск».
- Перейдите в раздел «Персонализация», а затем – «Панель задач».
- Активируйте ползунок под пунктом «Заменить командную строку».
Теперь новая консоль будет отображаться во всплывающем окне «Пуск», которое вызывается кликом ПКМ по одноименному значку, а также комбинацией клавиш «Win» + «X». Обратите внимание, что в таком случае командная строка исчезнет из указанного окна. Для ее запуска придется использовать альтернативный метод. Например, через поисковую строку Windows. Но вы всегда можете отменить изменения, вновь обратившись к инструкции, представленной выше.
Удаление отдельного ПО
Как бы то ни было, от ненужных программ следует избавляться с умом, не удаляя все приложения сразу. Конечно, в дальнейшем вы сможете установить недостающий софт при помощи официального магазина Microsoft, но все это – лишняя трата времени. Так что рациональнее будет сразу удалить только те программы, в которых нет необходимости:
- Откройте консоль PowerShell любым удобным для вас способом.
- Обработайте запрос «Get-AppxPackage -AllUsers | ft Name, PackageFullName -AutoSize», чтобы ознакомиться со списком всех приложений.
- В левой части интерфейса под заголовком «Name» отобразится имя программы. Скопируйте название лишней программы и подставьте его в команду формата «Get-AppxPackage *имя* | Remove-AppxPackage», после ввода которой необходимо нажать на клавишу «Enter».
Аналогичным способом вы можете поступить не только со стандартными приложениями, но и со сторонним софтом. Правда, для программ от других производителей намного более удобным вариантом выглядит обращение к «Параметрам», позволяющее получить полное представление о каждом ПО (размер, дата установки и так далее). Но, опять же, встроенные приложения удаляются только через PowerShell, так что рассмотренный способ, так или иначе, окажется для вас полезным.
Выход новой операционной системы Windows 10 все ждали давно и с нетерпением: было интересно как изменится операционка визуально, какие нововведения появятся, особый интерес вызывали новые возможности и встроенные инструменты. Входящие в состав сборки Windows 10 приложения, по задумке Microsoft, должны облегчить работу пользователя на ПК, сделать ее более комфортной и продуктивной. Однако по прошествии более чем месяца с официального релиза (29 июля 2015 года) Windows 10 многие пользователи даже не догадываются, что за утилиты присутствуют в их новой «оси». А ведь встроенные приложения занимают место на диске, каждый байт которого может использоваться более рационально.
В этой статье мы расскажем о том, как избавиться от предустановленных приложений в Windows 10 тем пользователям, которые считают их бесполезными.
Итак, Windows 10 поставляется с такими утилитами как 3D Builder, Будильники и часы, Калькулятор, Камера, Улучшить Office, Загрузить Skype, Начало работы, Музыка Groove, Карты, пасьянс Solitaire, Деньги, Кино и ТВ, Новости, OneNote, Люди, Телефон, Фотографии, Магазин Windows, Спорт, Запись голоса, Погода, Xbox и др. Некоторые из этих программ можно удалить из стартового меню: откройте «Пуск«, найдите ненужное приложения, кликните правой кнопкой по его иконке и выберите пункт «Удалить».
Однако не все утилиты удаляются таким способом: часть инструментов «спрятаны» внутри системы, и чтобы избавиться от них придется поковыряться в командной строке. Для этого в Windows 10 предусмотрен специальный инструмент PowerShell. Кликните на меню «Пуск» и в поисковой строке введите PowerShell.
В результатах поиска выберите «Windows PowerShell (классическое приложение)» и запустите его от имени администратора — откроется знакомое окошко командной строки.
Чтобы увидеть все установленные приложения от Microsoft, введите такую запись:
- Get-AppxPackage -AllUsers
Ну а для удаления ненужных программ пропишите специальную команду:
- 3D Builder: Get-AppxPackage *3d* | Remove-AppxPackage
- Xbox: Get-AppxPackage *xbox* | Remove-AppxPackage
- Будильник: Get-AppxPackage *alarms* | Remove-AppxPackage
- Деньги, Спорт, Новости: Get-AppxPackage *bing* | Remove-AppxPackage
- Запись голоса: Get-AppxPackage *soundrec* | Remove-AppxPackage
- Камера: Get-AppxPackage *camera* | Remove-AppxPackage
- Карты: Get-AppxPackage *maps* | Remove-AppxPackage
- Музыка Groove: Get-AppxPackage *zune* | Remove-AppxPackage
- Пасьянсы Solitaire: Get-AppxPackage *solit* | Remove-AppxPackage
- Почта и Календарь: Get-AppxPackage *communi* | Remove-AppxPackage
- Телефон: Get-AppxPackage *phone* | Remove-AppxPackage
- Фотографии: Get-AppxPackage *photo* | Remove-AppxPackage
А вот такая команда удалит все встроенные приложения сразу:
- Get-AppxPackage | Remove-AppxPackage
Однако обратите внимание, что тогда удалится и магазин Windows Store.
Если Вы ранее не пользовались командной строкой или для Вас такой метод просто неудобен, то в настоящее время на просторах интернета уже можно найти немало приложений для более удобного удаления встроенных программ в Windows 10. Остановимся на некоторых из них.
10AppsManager. Очень простое и удобное портативное приложение, которое избавит Вас от ненужного софта Microsoft буквально в пару кликов: нажмите на иконку лишнего приложения и подтвердите удаление — через несколько секунд в общем списке программ выбранного инструмента уже не будет. Для удобства разработчики предусмотрели инструкцию для восстановления всего пакета приложений (закладка «Reinstall«).
Windows 10 Default App Remover. Эта утилита не требует установки в систему (портативная), имеет лаконичный простенький интерфейс без каких бы то ни было настроек. Все, что нужно сделать — выбрать программу для удаления и согласиться с ее деинсталляцией.
Destroy Windows 10 Spying. Основное назначение этой программы — отключение следящих за пользователем модулей и инструментов телеметрии. Однако как дополнительный функционал присутствует и удаление системных приложений Windows 10. Тут тоже все просто — отмечайте ненужные программы и избавляйтесь от них навсегда.
W10Privacy. Приложение для изменения настроек системы Windows 10 и минимизации сбора данных о пользователе. Помимо всего, содержит раздел для деинсталляции встроенных утилит от Microsoft.
Remove Windows 10 Spying. Как и предыдущие инструменты, эта программа предназначена для отключения в операционке Windows 10 модулей слежения за действиями пользователя. Однако тут есть опция удаления предустановленных приложений, которые, по Вашему мнению, совершенно не нужны.
Если в последствии возникла необходимость восстановить какую-то из удалённых утилит, то это можно сделать в магазине приложений Windows Store. А если не имеете аккаунта Microsoft, то воспользуйтесь все тем же PowerShell, используя команду, которая вернет на место сразу весь пакет предустановленных программ:
- Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register «$($_.InstallLocation)\AppXManifest.xml»}
P.S. В завершение хотелось бы отметить, что необоснованное удаление встроенных инструментов Windows 10 может нанести вред стабильной работе системы, поэтому подумайте дважды перед такой процедурой. В любом случае рекомендуется перед удалением сделать резервные копии важной информации и создать точку восстановления системы.