Powershell: удаление программного обеспечения с запросами на ввод данных пользователем

Кто-нибудь знает, возможно ли удалить программное обеспечение через PowerShell, если оно запрашивает ввод данных пользователем? У меня есть несколько сценариев, которые могут удалить практически все, кроме одного программного обеспечения, которое мне нужно для удаления. Я специально пытаюсь удалить панель инструментов PDFForge, которая устанавливается при загрузке PDFCreator.

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

1 ответ

Решение

PowerShell не будет взаимодействовать с подсказками... вы не можете просто сказать ему нажать "Далее" в исполняемом файле, потому что он его не видит.

Вы можете отправить ключи к нему, хотя. Вы действительно просто используете COM-объекты.

Итак, во-первых, получите свой идентификатор процесса, установив переменную, которая содержит массив, данные для которого определяются именем вашего процесса. Допустим, ваш процесс называется "Удалить", и процесс уже запущен:

$a = Get-Process | ?{$_.Name -eq "Uninstall"}

Запустите COM:

$wshell = New-Object -ComObject wscript.shell;

Перенесите программу удаления с этим идентификатором процесса на передний план, чтобы мы могли отправить ее нажатием клавиш:

$wshell.AppActivate($a.id)

Дайте несколько секунд, чтобы вывести это окно вперед. Я выбрал 5, но если на вашей машине нет стресса, возможно, достаточно 2:

Start-Sleep 5

Теперь начните рассказывать, какие ключи вы хотите отправить. Синтаксис здесь такой: все, что находится в () - это то, что будет отправлено. Позиция в одинарной кавычке - это клавиша, которую нужно отправить, после запятой указывается, сколько времени вы хотите, чтобы она ждала, прежде чем продолжить. Предполагая, что первый экран - "Далее", вы можете отправить свою первую команду, сказав PowerShell отправить ключ ENTER и подождать 5 секунд:

$wshell.SendKeys('~',5)

Функция ожидания не обязательна, но для ваших целей она вам обязательно понадобится. (Если не хочешь $wshell.SendKeys('~') отправит клавишу ВВОДА и сразу перейдет к следующей команде.)

Пройдите процедуру удаления вручную вручную, используя все нажатия клавиш, и при любом отправленном вами нажатии клавиши обратите внимание на время, необходимое для загрузки следующей части деинсталляции, и подождите дольше, чем это с вашим сценарием (например, если он обрабатывает вашу клавишу ENTER) мгновенно я должен подождать 3 или 5 секунд, прежде чем отправит следующую команду. Если загрузка займет 5 секунд, я бы попросил его подождать 10 секунд перед отправкой следующей команды).

Буквы - это буквы, а цифры - это цифры. Большинство некомандных команд просто назначены их клавишам (то есть, если вы хотите ввести "K", ваша команда будет просто $wshell.SendKeys('K')) Вы можете получить краткое описание конкретных ключей здесь: https://msdn.microsoft.com/en-us/library/office/aa202943(v=office.10).aspx.

Другие вопросы по тегам