Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление 1с (http://forum.oszone.net/showthread.php?t=336569)

za1 06-09-2018 16:41 2830266

Удаление 1с
 
Доброго времени суток, уважаемые.
Нашел в инете 2 очень похожих способа удаления 1с через PS:
1) Рабочий
Код:

$app = Get-WmiObject -Class Win32_Product | Where-Object { $_.Name -match «1c»}
$app.Uninstall()

2) Выдает ошибку
Код:

(Get-WmiObject Win32_Product -Filter "Name = '1С:Предприятие 8 (8.3.8.2197)'").Uninstall()
Ошибка:
Код:

Нельзя вызвать метод для выражения со значением NULL.
строка:1 знак:89
+ (Get-WmiObject Win32_Product -Filter "Name = '1С:Предприятие 8 (8.3.8.2197)'").Uninstall <<<< ()
    + CategoryInfo          : InvalidOperation: (Uninstall:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Может кто-нибудь разъяснить, почему не работает 2 способ?

И как можно удалить программу, которая не отображается через
Код:

Get-WmiObject Win32_Product -List

Iska 06-09-2018 17:23 2830271

Цитата:

Цитата za1
Может кто-нибудь разъяснить, почему не работает 2 способ? »

Например, потому, что запрос Wbem возвращает пустой набор. То бишь, Ваш фильтр:
Цитата:

Цитата za1
Код:

… -Filter "Name = '1С:Предприятие 8 (8.3.8.2197)'" …
»

не находит ни одного подходящего экземпляра класса Win32_Product.

Впрочем, первый способ ничем не лучше, и так же чреват возможными ошибками исполнения.

Цитата:

Цитата za1
И как можно удалить программу, которая не отображается через »

Тупо перебирать в реестре машинный и пользовательские разделы Software\Microsoft\Windows\CurrentVersion\Uninstall, разбирать и отправлять на исполнение строку, содержащуюся в параметре UninstallString.

za1 06-09-2018 18:30 2830276

Цитата:

Цитата Iska
Впрочем, первый способ ничем не лучше, и так же чреват возможными ошибками исполнения. »

Так может есть какой-нибудь стандартный более простой и верный способ?
Цитата:

Цитата Iska
Тупо перебирать в реестре машинный и пользовательские разделы Software\Microsoft\Windows\CurrentVersion\Uninstall, разбирать и отправлять на исполнение строку, содержащуюся в параметре UninstallString. »

Посмотрел эти разделы, перебирать их я так понял нужно потому что некоторые программы ставятся в Programm Files, а другие в профиль пользователя? А что значит разбирать UninstallString, там ведь прописан путь к деинсталятору с параметрами, или есть нюансы?

Iska 06-09-2018 21:23 2830296

Цитата:

Цитата za1
Так может есть какой-нибудь стандартный более простой и верный способ? »

Да способ всё тот же, хоть с фильтрацией по -Filter, хоть с командлетом Where-Object. Просто надо либо проверять, что в коллекции возвращается хотя бы один объект (как это принято делать красиво и правильно — я не знаю, плохо умею работать с PowerShell), либо тупо перебирать все возвращённые объекты по ForEach-Object — из пустой коллекции до ForEach-Object просто не дойдёт ничего.

Цитата:

Цитата za1
перебирать их я так понял нужно потому что некоторые программы ставятся в Programm Files, а другие в профиль пользователя? »

Ну, тут скорее наоборот — потому что приложения могут быть установлены либо в режиме «на машину» (оно же «для всех пользователей») — и именно потому обычно располагаются в %ProgramFiles%, либо в режиме «на пользователя» (конкретного) — и потому, как правило, располагаются в профиле пользователя; причина — режим установки, а месторасположение — следствие выбранного режима установки приложения.

Цитата:

Цитата za1
А что значит разбирать UninstallString, там ведь прописан путь к деинсталятору с параметрами, или есть нюансы? »

Скажем, может просто не быть параметра UninstallString как такового ;). Тип параметра UninstallString может быть как REG_SZ, так и REG_EXPAND_SZ (и тут Вам смотреть — доверить расрытие возможных переменных окружения системе, запрашивая параметр типа REG_EXPAND_SZ как REG_SZ, либо делать это самому). Где-то уже есть кавычки:
Код:

"C:\Program Files\WinHTTrack\unins000.exe"
где-то — нет (но зато есть пробелы в пути и параметры):
Код:

C:\Program Files\Windows Firewall Control\wfc.exe -uninstall
Вот я про что.

za1 06-09-2018 22:38 2830312

Ок, спасибо!


Время: 22:14.

Время: 22:14.
© OSzone.net 2001-