Powershell:卸载提示用户输入的软件

Powershell: Uninstall Software that has prompts for user input

有人知道是否可以通过提示用户输入的 PowerShell 卸载软件吗?我有多个脚本可以卸载任何东西,除了我需要它卸载的一个软件。我专门尝试卸载下载 PDFCreator 时安装的 PDFForge 工具栏。

None 我编写的脚本失败了,它们只是在 运行 时挂起,我相信是因为卸载过程要求用户输入才能继续。

PowerShell 不会与提示进行交互...您不能只告诉它在可执行文件中单击 "Next",因为它看不到它。

不过您可以将密钥发送给它。您实际上只是在使用 COM 对象。

因此,首先,通过设置一个包含数组的变量来获取您的进程 ID,该数组的数据由您的进程名称定义。假设您的进程被调用 "Uninstall" 并且进程已经 运行:

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

启动 COM:

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

将具有此进程 ID 的卸载程序放在前面,以便我们可以向其发送击键:

$wshell.AppActivate($a.id)

稍等片刻,让 window 前进。我选择了 5,但如果你的机器没有压力,2 可能就足够了:

Start-Sleep 5

现在开始告诉它您要发送哪些密钥。这里的语法是这样的:() 中的内容就是将要发送的内容。单引号中的位置是要发送的击键,逗号之后是您希望它在继续之前等待多长时间。假设第一个屏幕是 "Next",您可以通过告诉 PowerShell 发送 ENTER 键并等待 5 秒来发送您的第一个命令:

$wshell.SendKeys('~',5)

等待功能是可选的,但出于您的目的,您肯定会需要它。 (如果你不想要它 $wshell.SendKeys('~') 将发送 ENTER 键并立即移动到下一个命令。)

自己手动完成卸载,使用所有击键,对于您发送的任何击键,请注意加载卸载的下一部分之前需要多长时间,并等待比您的脚本更长的时间(例如,如果它会立即处理您的 ENTER 键,我会让它在发送下一个命令之前等待 3 或 5 秒。如果加载需要 5 秒,我会告诉它在发送下一个命令之前等待 10 秒)。

字母是字母,数字是数字。大多数非命令只是分配给它们的键(这意味着如果你想键入 "K",你的命令将只是 $wshell.SendKeys('K'))。你可以在此处获取特定键的概要:https://msdn.microsoft.com/en-us/library/office/aa202943(v=office.10).aspx