是否有人知道如果提示用户输入是否可以通过PowerShell卸载软件?我有多个脚本可以卸载几乎任何东西,除了我需要卸载的一个软件。我特意尝试卸载下载PDFCreator时安装的PDFForge工具栏。
我编写的脚本都没有失败,它们只是在运行时挂起,我相信因为卸载过程要求用户输入继续。
答案 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 }}