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

Posted

技术标签:

【中文标题】Powershell:卸载提示用户输入的软件【英文标题】:Powershell: Uninstall Software that has prompts for user input 【发布时间】:2016-02-12 13:34:24 【问题描述】:

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

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

【问题讨论】:

嗨,1. 请显示一些代码 2.malwaretips.com/blogs/pdfforge-toolbar-removal 我认为使用内置“卸载程序”“卸载”这个恶意软件不会有效也不够 为什么这被否决了? 我希望我知道...感谢您的关注 :) 【参考方案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'))你可以在这里获得特定键的概要:https://msdn.microsoft.com/en-us/library/office/aa202943(v=office.10).aspx。

【讨论】:

并确保在此脚本运行时没有人接触工作站!

以上是关于Powershell:卸载提示用户输入的软件的主要内容,如果未能解决你的问题,请参考以下文章

使用Powershell实现自动化安装/卸载程序

win7怎样运行powershell脚本

NSIS 如何在卸载时检测软件是不是运行并提示用户

如何卸载软件包?

电脑卸载不了KB5009543

在卸载期间提示用户关闭应用程序(在 WiX 中)