Я находился в процессе удаления всех универсальных приложений из новой установки Windows 10, когда столкнулся с препятствиями.
Я делаю это не первый раз, и все идет хорошо. Однако на этот раз, когда я пишу в PowerShell
Get-AppxPackage -allusers | Remove-AppxPackage
или что-то более конкретное, как
Get-AppxPackage -allusers *windowscalculator* | Remove-AppxPackage
Я получаю следующее сообщение:
Remove-AppxPackage: Сбой развертывания с HRESULT: 0x80073CFA, Сбой удаления. Пожалуйста, свяжитесь с вашим поставщиком программного обеспечения. (Исключение из HRESULT: 0x80073CFA) ошибка 0x80070032: Операция удаления AppX Deployment над пакетом Microsoft.WindowsCalculator_10.1605.1582.0_x64__8wekyb3d8bbwe из: C:Program FilesWindowsAppsMicrosoft.WindowsCalculator_10.1605.1588bb6464weweb464 Это приложение является частью Windows и не может быть удалено для каждого пользователя. Администратор может попытаться удалить приложение с компьютера с помощью включения или выключения компонентов Windows. Тем не менее, это может быть невозможно удалить приложение. ПРИМЕЧАНИЕ. Для получения дополнительной информации найдите [ActivityId] 75c5fc31-fb20-0001-77fd-c57520fbd101 в журнале событий или используйте командную строку Get-AppxLog -ActivityID 75c5fc31-fb20-0001-77fd-c57520fbd101 В строке: 1 символ: 49 + Get-appxpackage -allusers *windowscalculator* | Remove-AppxPackage + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (Microsoft.Windo. __8wekyb3d8bbwe:String) [Remove-AppxPackage], IOException + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.RemoveAppxPackageCommand
Windows 10 — Как Удалить Встроенные Приложения? | Оптимизация и ускорение
Я получаю это сообщение для каждого отдельного приложения, которое я пытаюсь удалить, включая те, которые, как я знаю, совершенно не удаляются, такие как калькулятор или программа просмотра изображений, чего раньше никогда не было.
Powershell работает с повышенными правами, а все остальное работает и выглядит нормально.
Могу ли я что-то сделать, кроме переустановки Windows?
Источник: poweruser.guru
Как удалить приложение с помощью PowerShell?
есть ли простой способ подключиться к стандарту’установка и удаление программ’ функциональность с помощью PowerShell для удалить существующее приложение? Или проверить, установлено ли приложение?
автор: Stein Åsmul
10 ответов
$app = Get-WmiObject -Class Win32_Product | Where-Object < $_.Name -match «Software Name» >$app.Uninstall()
Edit: Роб нашел другой способ сделать это с параметром Filter:
Удаляем из Windows все лишнее! Выпилим хлам, повысим стабильность и скорость загрузки.
$app = Get-WmiObject -Class Win32_Product ` -Filter «Name = ‘Software Name'»
автор: Jeff Hillman
EDIT: за эти годы этот ответ получил довольно много upvotes. Я хотел бы добавить несколько замечаний. С тех пор я не использовал PowerShell, но помню, что наблюдал некоторые проблемы:
- если для приведенного ниже сценария больше совпадений, чем 1, он не работает, и вы должны добавить фильтр PowerShell, который ограничивает результаты 1. Я считаю, что это -First 1 но я не уверен. Не стесняйтесь редактировать.
- если приложение не установлено MSI, оно не работает. Причина он был написан, как показано ниже, потому что он изменяет MSI для удаления без вмешательства, что не всегда является случаем по умолчанию при использовании собственной строки удаления.
использование объекта WMI занимает вечность. Это очень быстро, если вы просто знаете имя программы, которую вы хотите удалить.
$uninstall32 = gci «HKLM:SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall» | foreach < gp $_.PSPath >| ? < $_ -match «SOFTWARE NAME» >| select UninstallString $uninstall64 = gci «HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall» | foreach < gp $_.PSPath >| ? < $_ -match «SOFTWARE NAME» >| select UninstallString if ($uninstall64) < $uninstall64 = $uninstall64.UninstallString -Replace «msiexec.exe»,»» -Replace «/I»,»» -Replace «/X»,»» $uninstall64 = $uninstall64.Trim() Write «Uninstalling. » start-process «msiexec.exe» -arg «/X $uninstall64 /qb» -Wait>if ($uninstall32) < $uninstall32 = $uninstall32.UninstallString -Replace «msiexec.exe»,»» -Replace «/I»,»» -Replace «/X»,»» $uninstall32 = $uninstall32.Trim() Write «Uninstalling. » start-process «msiexec.exe» -arg «/X $uninstall32 /qb» -Wait>
автор: nickdnk
чтобы исправить второй метод в сообщении Джеффа Хиллмана, вы можете либо сделать:
$app = Get-WmiObject -Query «SELECT * FROM Win32_Product WHERE Name = ‘Software Name'»
$app = Get-WmiObject -Class Win32_Product ` -Filter «Name = ‘Software Name'»
автор: Robert Wagner
чтобы добавить немного к этому сообщению, мне нужно было удалить программное обеспечение с нескольких серверов. Я использовал ответ Джеффа, чтобы привести меня к этому:
сначала я получил список серверов, я использовал AD запрос, но вы можете предоставить массив имен компьютеров, однако, вы хотите:
затем я прошелся по ним, добавив параметр-computer в запрос gwmi:
foreach($server in $computers) < $app = Get-WmiObject -Class Win32_Product -computer $server | Where-Object < $_.IdentifyingNumber -match «5A5F312145AE-0252130-432C34-9D89-1» >$app.Uninstall() >
я использовал свойство IdentifyingNumber для сопоставления вместо имени, просто чтобы убедиться, что я удаляю правильное приложение.
автор: David Stetler
я узнал, что класс Win32_Product не рекомендуется, потому что он запускает ремонт и не оптимизирован для запросов. источник
нашел этот пост из Sitaram Pamarthi со скриптом для удаления, Если вы знаете guid приложения. Он также поставляет другой скрипт для поиска приложений очень быстро здесь.
[cmdletbinding()] param ( [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)] [string]$ComputerName = $env:computername, [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)] [string]$AppGUID ) try < $returnval = ([WMICLASS]»$computerNameROOTCIMV2:win32_process»).Create(«msiexec `/x$AppGUID `/norestart `/qn») >catch < write-error «Failed to trigger the uninstallation. Review the error message» $_ exit >switch ($($returnval.returnvalue)) < 0 < «Uninstallation command triggered successfully» >2 < «You don’t have sufficient permissions to trigger the command on $Computer» >3 < «You don’t have sufficient permissions to trigger the command on $Computer» >8 < «An unknown error has occurred» >9 < «Path Not Found» >9 < «Invalid Parameter»>>
автор: Ricardo
Я сделаю свой маленький вклад. Мне нужно было удалить список пакетов с того же компьютера. Это сценарий, который я придумал.
Я надеюсь, что это окажется полезным.
обратите внимание, что я должен Дэвиду Стетлеру кредит за этот сценарий, так как он основан на его.
автор: Ben Key
вот сценарий PowerShell с использованием msiexec:
echo «Getting product code» $ProductCode = Get-WmiObject win32_product -Filter «Name=’Name of my Software in Add Remove Program Window'» | Select-Object -Expand IdentifyingNumber echo «removing Product» # Out-Null argument is just for keeping the power shell command window waiting for msiexec command to finish else it moves to execute the next echo command uninstallation finished»
на основе ответа Джеффа Хиллмана:
вот функция, которую вы можете просто добавить в свой profile.ps1 или определите в текущем сеансе PowerShell:
# Uninstall a Windows program function uninstall($programName) < $app = Get-WmiObject -Class Win32_Product -Filter («Name = ‘» + $programName + «‘») if($app -ne $null) < $app.Uninstall() >else < echo («Could not find program ‘» + $programName + «‘») >>
предположим, вы хотите удалить Блокнот++. Просто введите это в PowerShell:
просто имейте в виду, что Get-WmiObject может занять некоторое время, поэтому будьте терпеливы!
автор: Kolob Canyon
function remove-HSsoftware< [cmdletbinding()] param( [parameter(Mandatory=$true, ValuefromPipeline = $true, HelpMessage=»IdentifyingNumber can be retrieved with `»get-wmiobject -class win32_product`»»)] [ValidatePattern(‘-[a-fA-F0-9]-[a-fA-F0-9]-[a-fA-F0-9]-[a-fA-F0-9]>’)] [string[]]$ids, [parameter(Mandatory=$false, ValuefromPipeline=$true, ValueFromPipelineByPropertyName=$true, HelpMessage=»Computer name or IP adress to query via WMI»)] [Alias(‘hostname,CN,computername’)] [string[]]$computers ) begin <> process < if($computers -eq $null)< $computers = Get-ADComputer -Filter * | Select dnshostname |%> foreach($computer in $computers) < foreach($id in $ids)< write-host «Trying to uninstall sofware with ID «, «$id», «from computer «, «$computer» $app = Get-WmiObject -class Win32_Product -Computername «$computer» -Filter «IdentifyingNumber = ‘$id'» $app | Remove-WmiObject >> > end<>> remove-hssoftware -ids «»,»»,»»
он не полностью протестирован, но работает под PowerShell 4.
Я запустил файл PS1, как видно здесь. Позволяя ему получить все системы из AD и пытаюсь удалить несколько приложений на всех системах.
Я использовал IdentifyingNumber для поиска программной причины ввода David Stetlers.
- не добавлять идентификаторы к вызову функции в скрипт, вместо запуска скрипта с параметром IDs
- вызов скрипта с более чем 1 имя компьютера не автоматически извлекается из функции
- извлечение данных из трубы
- использование IP-адресов для подключения к системе
что он делает не так:
- он не дает никакой информации, если программное обеспечение действительно было найдено в любой данной системе.
- это не дает никакого информация об отказе или успехе деинсталляции.
Я не смог использовать uninstall(). Пытаясь, что я получил сообщение об ошибке, сообщающее мне, что вызов метода для выражения, имеющего значение NULL, невозможен. Вместо этого я использовал Remove-WmiObject, который, похоже, выполняет то же самое.
осторожностью: без имени компьютера он удаляет программное обеспечение из все системы в Active Directory.
автор: user3410872
для большинства моих программ скрипты в этом посте сделали свою работу. Но мне пришлось столкнуться с устаревшей программой, которую я не мог удалить с помощью msiexec.класс exe или Win32_Product. (по какой-то причине я получил выход 0, но программа все еще была там)
моим решением было использовать класс Win32_Process:
С помощью nickdnk эта команда должна получить файл exe удаления путь:
[array]$unInstallPathReg= gci «HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall» | foreach < gp $_.PSPath >| ? < $_ -match $programName >| select UninstallString
[array]$unInstallPathReg= gci «HKLM:SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall» | foreach < gp $_.PSPath >| ? < $_ -match $programName >| select UninstallString
вам придется очистить строку результата:
$uninstallPath = $unInstallPathReg[0].UninstallString $uninstallPath = $uninstallPath -Replace «msiexec.exe»,»» -Replace «/I»,»» -Replace «/X»,»» $uninstallPath = $uninstallPath .Trim()
теперь, когда у вас есть соответствующие программа удаления exe путь к файлу вы можете использовать эту команду:
$uninstallResult = (Get-WMIObject -List -Verbose | Where-Object ).InvokeMethod(«Create»,»$unInstallPath»)
$uninstallResult-будет иметь код выхода. 0-успешное выполнение
вышеуказанные команды также могут выполняться удаленно — я сделал это с помощью команды invoke, но я считаю, что добавление аргумент -имя_компьютера может работать
Источник: askdev.ru
Как удалить приложения Windows 10 по умолчанию с помощью PowerShell [Guide]
Windows 10 поставляется с гораздо большим количеством приложений, чем любая из ее предшественников. Некоторые из этих приложений просто бессмысленны; Bing Sports, Bing News и т. Д. В зависимости от того, как вы на них смотрите, они могут быть действительно полезными и инновационными, или они могут быть раздуваемым мусором, от которого вы хотели бы освободить свою систему. Вот полное руководство по удалению этих приложений из вашей системы, выборочно или полностью с помощью команд PowerShell.
Запустите PowerShell от имени администратора
Откройте PowerShell с правами администратора. Введите PowerShell в строке поиска, щелкните приложение правой кнопкой мыши и выберите «Запуск от имени администратора».
Как использовать родительский контроль в Windows 10
Найдите имя пакета приложения
Чтобы удалить приложение, вам нужно будет запустить команду, сообщающую оболочке имя пакета приложения, которое вы хотите удалить. Чтобы найти имя пакета рассматриваемого приложения, выполните следующую команду:
Get-AppxPackage -User username
где username — ваше имя пользователя.
Вы получите очень длинный список приложений с подробным описанием каждого из них. Важная для вас информация — это PackageFullName, как показано ниже. Здесь мы хотели бы вставить слово предостережения; будьте очень осторожны при удалении приложения. Мы проверили это, удалив приложение калькулятора, но, как вы можете видеть, также перечислены приложения, такие как собственная платформа .NET, и их НЕ следует удалять.
Как скачать Windows 10 S ISO
Выделите имя пакета для приложения после того, как найдете его в своем списке, щелкните строку заголовка окна PowerShell и выберите Правка> Копировать, чтобы скопировать его (или просто нажмите Enter с выбранным именем).
Удалить одно приложение для текущего пользователя
Введите следующую команду;
Remove-AppxPackage [App Package Name]
Чтобы вставить имя, щелкните строку заголовка окна PowerShell и выберите «Правка»> «Вставить». Нажмите Enter, чтобы выполнить его.
Вот и все, приложение исчезнет.
Вот команды, необходимые для удаления приложений для всех пользователей, одного пользователя или одного приложения для всех пользователей.
Удалить все приложения для пользователя;
Get-AppxPackage -User Username | Remove-AppxPackage
Замените «Username» именем пользователя, для которого вы хотите удалить приложение.
Как скопировать структуру папок в Windows 10
Удалите все приложения для всех пользователей;
Get-AppxPackage -AllUsers | Remove-AppxPackage
Удалите одно приложение для всех пользователей;
remove-AppxProvisionedPackage [App Package Name]
Где App Package Name — это имя пакета приложения.
Источник: toadmin.ru