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.