Как удалить приложение с помощью PowerShell?
есть ли простой способ подключиться к стандарту’установка и удаление программ’ функциональность с помощью PowerShell для удалить существующее приложение? Или проверить, установлено ли приложение?
автор: Stein Åsmul
10 ответов
$app = Get-WmiObject -Class Win32_Product | Where-Object < $_.Name -match «Software Name» >$app.Uninstall()
Edit: Роб нашел другой способ сделать это с параметром Filter:
$app = Get-WmiObject -Class Win32_Product ` -Filter «Name = ‘Software Name'»
автор: Jeff Hillman
EDIT: за эти годы этот ответ получил довольно много upvotes. Я хотел бы добавить несколько замечаний. С тех пор я не использовал PowerShell, но помню, что наблюдал некоторые проблемы:
- если для приведенного ниже сценария больше совпадений, чем 1, он не работает, и вы должны добавить фильтр PowerShell, который ограничивает результаты 1. Я считаю, что это -First 1 но я не уверен. Не стесняйтесь редактировать.
- если приложение не установлено MSI, оно не работает. Причина он был написан, как показано ниже, потому что он изменяет MSI для удаления без вмешательства, что не всегда является случаем по умолчанию при использовании собственной строки удаления.
использование объекта WMI занимает вечность. Это очень быстро, если вы просто знаете имя программы, которую вы хотите удалить.
Windows Powershell: Что это и как использовать? Основные команды ️⚙️
$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
Можно ли каким-либо образом удалить PowerShell из Vista?
Причина, по которой мне нужно удалить его, заключается в том, что программа установки Windows Vista требует, чтобы я удалил PowerShell, прежде чем смогу выполнить восстановительную установку Windows.
(Нажмите на картинку для увеличения.)
Что я сделал до сих пор
Деинсталляция KB968930, также известная как Management Framework Core, также называемая PowerShell
Очевидно, я попытался удалить его из окна «Программы и компоненты» на панели управления. Но на самом деле он доступен только как обновление из окна «Установленное обновление».
- Панель управления
- Программы (или «Удалить программу»)
- Программы и особенности
- Нажмите на ссылку «Просмотр установленных обновлений» слева.
- Введите «KB968930» в поле поиска.
- Выберите «Windows Management Framework Core (KB968930)» из результатов поиска.
- Нажмите кнопку Удалить.
- «Вы уверены, что хотите удалить это обновление?«Нажмите Да.
- Msgstr «Пожалуйста, подождите, пока обновления удаляются. Это может занять несколько минут.»
- «Произошла ошибка. Не все обновления были успешно удалены. «
Это не решило проблему.
Изменение реестра, вступление во владение и переименование папки
Затем я попытался изменить следующий раздел реестра.
FROM THIS: Key: HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1 Value: Install Type: Reg_Dword Data: 0 TO THIS: Key: HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1 Value: Install Type: Reg_Dword Data: 1
Затем я запустил командную строку с повышенными правами и использовал ее, чтобы стать владельцем каталога PowerShell.
C:Windowssystem32>takeown /f %windir%system32windowspowershell SUCCESS: The file (or folder): «C:Windowssystem32windowspowershell» now owned by user «computernameusername». C:Windowssystem32>cacls %windir%system32windowspowershell /G administrators: F No mapping between account names and security IDs was done. C:Windowssystem32>icacls %windir%system32windowspowershell /G administrators :F Invalid parameter «/G» C:Windowssystem32>cacls %windir%system32windowspowershell /G administrators: F No mapping between account names and security IDs was done.
C:Windowssystem32>icacls %windir%system32windowspowershell /grant administra tors:F administrators: No mapping between account names and security IDs was done. Successfully processed 0 files; Failed processing 1 files C:Windowssystem32>
Я не был уверен, должен ли я использовать команду cacls или icacls и я не был уверен в синтаксисе (какой-либо вход по этому поводу?). Но в любом случае! Теперь я был владельцем каталога и смог переименовать его.
- Win+R
- C:WindowsSystem32
- Переименован в «WindowsPowerShell» в «WindowsPowerShellOld»
Итак, путь теперь C:WindowsSystem32WindowsPowerShellOld. PowerShell теперь «несколько» отключен, т.е. ярлыки в меню «Пуск» теперь не работают, и при запуске powershell.exe непосредственно из C:WindowsSystem32WindowsPowerShellOldv1.0 отображается командная строка, похожая на cmd, с черным фоном и несколькими красными ошибочными строками что сказать «файл не найден».
Но главная проблема до сих пор не решена. Я все еще не могу сделать ремонтную установку Windows. Программа установки по-прежнему сообщает, что PowerShell установлен.
Так . какие-нибудь умные идеи? Что еще я могу сделать?
Единственное, что остается сейчас, — это сделать чистую установку Windows.
Источник: poweruser.guru
Как удалить PowerShell Windows 10?
Как и другие программы, PowerShell можно легко удалить. Введите PowerShell в поле поиска меню «Пуск». Он покажет все версии PowerShell, то есть PowerShell (x86), PowerShell, PowerShell 7 и другие. Щелкните правой кнопкой мыши любой из них и выберите Удалить.
Что будет если удалить PowerShell?
Прежде чем удалить Windows PowerShell с компьютера необходимо его отключить, а для этого нужно открыть Панель управления — Программы — Включение и отключение компонентов Windows. . Если удалить PowerShell в Windows 10 то запуск его будет невозможен.
Как избавиться от PowerShell?
Чтобы изменить на командную строку, Вам нужно открыть Пуск-Параметры-Персонализация-Панель Задач: заменить командную строку оболочкой PowerShell- выключите эту опцию. PowerShell можно отключить в системе в Панель управления-Программы и компоненты-Включение или отключение компонентов windows.
Для чего нужна программа Windows PowerShell?
PowerShell — это кроссплатформенное решение для автоматизации задач, которое включает оболочку командной строки, скриптовый язык и платформу управления конфигурацией. PowerShell поддерживается в Windows, Linux и macOS.
Как убрать PowerShell из автозапуск?
Деактивировать устаревшую версию консоли можно также с помощью апплета управления компонентами Windows. Запустите его командой optionalfeatures, найдите в списке компонентов пункт Windows PowerShell 2.0, снимите с него птичку и нажмите «OK». Изменения вступят в силу сразу, перезагружать компьютер нет необходимости.
Как заменить PowerShell на командную строку?
Зайдите в “Персонализация”. 3. В левой колонке выберите “Панель задач”, с правой стороны возле “Заменить командную строку оболочкой Windows PowerShell в меню, которое появляется при щелчке правой кнопкой мыши по кнопке “Пуск” или при нажатии клавиш Windows+X” нажмите на переключатель.
Где находится Power Shell?
Если вы хотите вызвать PowerShell из командной строки, помните, что соответствующий исполняемый файл (powershell.exe) находится в папке %SystemRoot%System32WindowsPowerShellВерсия, где Версия – номер установленной версии PowerShell, например, v. 1.0 или v. 1.1.
Где находится приложение PowerShell?
PowerShell .exe, любой системный администратор сможет без труда сказать вам, находится в C:WindowsSystem32WindowsPowerShellv1.
Как включить Повершелл?
- Нажмите кнопку Пуск , введите Интегрированная среда сценариев и выберите Интегрированная среда сценариев Windows PowerShell.
- В меню Пуск выберите Пуск , Все программы , Стандартные , откройте папку Windows PowerShell и щелкните Интегрированная среда сценариев Windows PowerShell.
Источник: kamin159.ru
Что такое » powershell.exe » ?
В нашей базе содержится 85 разных файлов с именем powershell.exe . You can also check most distributed file variants with name powershell.exe. Чаще всего эти файлы принадлежат продукту Microsoft® Windows® Operating System. Наиболее частый разработчик — компания Microsoft Corporation. Самое частое описание этих файлов — Windows PowerShell. Совокупная оценка — 5( 5 ) (комментариев: 1 ). Это исполняемый файл.
Вы можете найти его выполняющимся в диспетчере задач как процесс powershell.exe.
Подробности о наиболее часто используемом файле с именем «powershell.exe»
Продукт: Microsoft® Windows® Operating System Компания: Microsoft Corporation Описание: Windows PowerShell Версия: 6.1.7600.16385 MD5: 852d67a27e454bd389fa7f02a8cbe23f SHA1: 5330fedad485e0e4c23b2abe1075a1f984fde9fc SHA256: a8fdba9df15e41b6f5c69c79f66a26a9d48e174f9e7018a371600b866867dab8 Размер: 473600 Папка: C:WindowsSystem32windowspowershellv1.0 ОС: Windows 7 Частота: Высокая
Проверьте свой ПК с помощью нашей бесплатной программы
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем.
Процесс «powershell.exe» безопасный или опасный?
Загрузка диаграммы
100% файлов помечены как безопасные .
Последний новый вариант файла «powershell.exe» был обнаружен 3634 дн. назад. В нашей базе содержится 9 шт. вариантов файла «powershell.exe» с окончательной оценкой Безопасный и ноль вариантов с окончательной оценкой Опасный . Окончательные оценки основаны на комментариях, дате обнаружения, частоте инцидентов и результатах антивирусных проверок.
Комментарии пользователей для «powershell.exe»
Текущим параметрам фильтрации удовлетворяют несколько файлов. Будут показаны комментарии ко всем файлам.
БЕЗОПАСНЫЙ оценка пользователя C_Denninger для файла C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe
Добавить комментарий для «powershell.exe»
Для добавления комментария требуется дополнительная информация об этом файле. Если вам известны размер, контрольные суммы md5/sha1/sha256 или другие атрибуты файла, который вы хотите прокомментировать, то вы можете воспользоваться расширенным поиском на главной странице .
Если подробности о файле вам неизвестны, вы можете быстро проверить этот файл с помощью нашей бесплатной утилиты. Загрузить System Explorer.
Проверьте свой ПК с помощью нашей бесплатной программы
System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем. Программа действительно бесплатная, без рекламы и дополнительных включений, она доступна в виде установщика и как переносное приложение. Её рекомендуют много пользователей.
Источник: systemexplorer.net
Как я могу удалить приложение с помощью PowerShell?
Есть ли простой способ подключиться к стандарту?Установка и удаление программ’функциональность с помощью PowerShell для удалить существующее приложение? Или проверить, установлено ли приложение?
задан 22 сен ’08, 05:09
Rob Paterson
12 ответы
$app = Get-WmiObject -Class Win32_Product | Where-Object < $_.Name -match «Software Name» >$app.Uninstall()
Редактировать: Роб нашел другой способ сделать это с помощью параметра Filter:
$app = Get-WmiObject -Class Win32_Product ` -Filter «Name = ‘Software Name'»
ответ дан 18 авг.
Это почти все, я бы сказал, что может быть лучше использовать IdentifyingNumber, а не имя, на всякий случай. — Баки
После небольшого исследования вы также можете использовать предложение -filter Get-WmiObject: $ app = Get-WmiObject -Class Win32_Product -filter «select * from Win32_Product WHERE name = ‘Software Name'» — Роб Патерсон
Обратите внимание, что просмотр WMI будет работать только для продуктов, которые были установлены через MSI. — EBЗеленый
Для перечисления этого класса WMI требуется НАВСЕГДА. Я предлагаю Джеффу обновить свой код, включив в него совет Роба. — halr9000
(gwmi Win32_Product | ? Name -eq «Software»).uninstall() Немного кода для гольфа. — круглый
- Если для приведенного ниже сценария больше 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>
ответ дан 13 дек ’16, 13:12
Спасибо за это! Я пытаюсь использовать это с -like «appNam*» так как версия указана в названии и она меняется, но, похоже, не находит программу. Любые идеи? — Северный Юг
Найдите функцию -like для powershell, узнайте, какой фильтр использовать, и как заставить его правильно соответствовать вашей строке. Просто используйте оболочку для тестирования, и как только у вас все получится, замените -match 🙂 — никднк
Это золото. Лично я удаляю букву «b» из «/ qb», чтобы вам не приходилось видеть какие-либо диалоги. — БелыйГорячийЛюбовьТигр
Я превратил это в сценарий .ps1 с подсказкой и информацией «что я собираюсь удалить». gist.github.com/chrisfcarroll/e38b9ffcc52fa9d4eb9ab73b13915f5a — Крис Ф. Кэрролл
Чтобы исправить второй метод в сообщении Джеффа Хиллмана, вы можете сделать следующее:
$app = Get-WmiObject -Query «SELECT * FROM Win32_Product WHERE Name = ‘Software Name'»
$app = Get-WmiObject -Class Win32_Product ` -Filter «Name = ‘Software Name'»
ответ дан 18 авг.
Просто предупреждаю . Я обнаружил, что использование «-Query» вместо «-Filter» не возвращает WmiObject, поэтому у него нет метода «удаления». — Дуг Дж. Хурас
Это решение не может получить установленные программы через exe, но через msi. Из-за этого он работает только с программами, установленными через установщик Microsoft (msi) — Хусейн
Я обнаружил, что класс Win32_Product не рекомендуется, потому что он запускает ремонт и не оптимизирован для запросов. Источник
Я нашел это сообщение от Ситарама Памарти со сценарием для удаления, если вы знаете руководство приложения. Он также предоставляет еще один скрипт для очень быстрого поиска приложений. здесь.
Используйте так:. Uninstall.ps1 -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»>>
ответ дан 22 авг.
Чтобы добавить немного к этому посту, мне нужно было удалить программное обеспечение с нескольких серверов. Я использовал ответ Джеффа, чтобы привести меня к этому:
Сначала я получил список серверов, я использовал 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 для сопоставления вместо имени, чтобы убедиться, что удаляю правильное приложение.
ответ дан 19 дек ’16, 19:12
Просто прелесть это решение — Рафаэу
function Uninstall-App < Write-Output «Uninstalling $($args[0])» foreach($obj in Get-ChildItem «HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall») < $dname = $obj.GetValue(«DisplayName») if ($dname -contains $args[0]) < $uninstString = $obj.GetValue(«UninstallString») foreach ($line in $uninstString) < $found = $line -match ‘(<.+>).*’ If ($found) < $appid = $matches[1] Write-Output $appid start-process «msiexec.exe» -arg «/X $appid /qb» -Wait >> > > >
Назовите это так:
Uninstall-App «Autodesk Revit DB Link 2019»
ответ дан 11 окт ’18, 00:10
Одна строка кода:
get-package *notepad* |%
Я внесу свой небольшой вклад. Мне нужно было удалить список пакетов с того же компьютера. Это сценарий, который я придумал.
Я надеюсь, что это окажется полезным.
Обратите внимание, что за этот сценарий я обязан Дэвиду Стетлеру, поскольку он основан на нем.
ответ дан 18 авг.
Вот сценарий 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»
Создан 13 июля ’17, 13:07
Я совместил этот подход с следующие флаги, по какой-то причине для меня это работает лучше, чем другие подходы. — Дэвид Роджерс
На основе ответа Джеффа Хиллмана:
Вот функцию, которую вы можете просто добавить в свой 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 + «‘») >>
Допустим, вы хотели удалить Notepad ++. Просто введите это в PowerShell:
Просто имейте в виду, что Get-WmiObject может занять некоторое время, так что наберитесь терпения!
ответ дан 19 дек ’16, 19:12
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 для поиска Программной причины ввода Дэвида Стетлерса.
- Не добавлять идентификаторы к вызову функции в скрипте, вместо этого запускать скрипт с идентификаторами параметров
- Вызов скрипта с более чем 1 именем компьютера не автоматически извлекается из функции
- Получение данных из трубы
- Использование IP-адресов для подключения к системе
Чего он не делает:
- Он не дает никакой информации о том, действительно ли программное обеспечение было обнаружено в какой-либо данной системе.
- Он не дает никакой информации о сбое или успешном удалении.
Мне не удалось использовать uninstall (). Попытавшись это сделать, я получил сообщение об ошибке, сообщающее мне, что вызвать метод для выражения, имеющего значение NULL, невозможно. Вместо этого я использовал Remove-WmiObject, который, кажется, делает то же самое.
ВНИМАНИЕ!: Без имени компьютера удаляет программное обеспечение из BCE системы в Active Directory.
ответ дан 19 дек ’16, 19:12
Источник: stackovergo.com