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

时间:2015-11-11 12:50:35

标签: powershell toolbar uninstaller

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

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

1 个答案:

答案 0 :(得分:1)

PowerShell不会与提示互动...您只能告诉它点击"下一步"在可执行文件中,因为它无法看到它。

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

因此,首先,通过设置包含数组的变量来获取进程ID,该数据的数据由进程名称定义。让我们说你的流程被调用,"卸载"并且过程正在运行:

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

启动COM:

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

将带有此进程ID的卸载程序带到前面,以便我们可以发送键击:

$wshell.AppActivate($a.id)

给它几秒钟的时间来推进那个窗口。我选择了5,但如果你的机器没有受到压力,那么2就足够了:

Start-Sleep 5

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

$wshell.SendKeys('~',5)

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

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

字母是字母,数字是数字。大多数非命令只是分配给它们的键(意思是如果你想键入" K"你的命令只是$wshell.SendKeys('K'))你可以在这里得到特定键的纲要:{{3 }}