我可以使用 Powershell 静默卸载没有密码保护的应用程序。
Start-Process -Wait -FilePath $uninstall32 /SILENT
对于密码保护的应用程序(使用 Inno SetUp 创建的安装程序),它会弹出询问密码。有没有一个选项可以在不弹出窗口的情况下传递密码?
如果成功,我想远程卸载受密码保护的应用程序
没有远程密码保护的应用程序,我已经默默卸载了。
我试过了
Start-Process -Wait -FilePath $uninstall32 UNINSTALL_PASSWORD =AR /SILENT
tl;博士
将传递参数指定为单个字符串:
# Note: Parameters -FilePath and -ArgumentList are positionally implied.
Start-Process -Wait $uninstall32 'UNINSTALL_PASSWORD =AR /SILENT'
如果需要在参数字符串中嵌入变量引用或表达式,请使用
"..."
引号,即可扩展(双引号)字符串,而不是'...'
,逐字(单引号) ) 字符串 .
Start-Process
时,要传递给目标可执行文件 (-FilePath
) 的任何参数都必须通过 -ArgumentList
(-Args
) 参数指定,您必须向该参数传递一个 single 值。
-ArgumentList
技术上接受字符串值的 array,但 [1] 允许您单独指定传递参数,用 ,
分隔,不幸的是,一个长期存在的 bug 使它最好将所有参数编码在单个字符串中,因为它使得情境需要嵌入式双引号显式 - 请参阅这个答案。
位置绑定,这意味着值不需要以目标参数名称作为前缀。
你的尝试:
# !! BROKEN
Start-Process -Wait -FilePath $uninstall32 UNINSTALL_PASSWORD =AR /SILENT
相当于:
# !! BROKEN
Start-Process -Wait -FilePath $uninstall32 -ArgumentList UNINSTALL_PASSWORD =AR /SILENT
并且也相当于,对 -FilePath
和
-ArgumentList
使用位置参数绑定:
# !! BROKEN
Start-Process -Wait $uninstall32 UNINSTALL_PASSWORD =AR /SILENT
也就是说,UNINSTALL_PASSWORD
alone 绑定到
-ArgumentList
,而
=AR
和
/SILENT
是额外的位置参数,会导致语法错误,因为这两个参数都支持位置绑定 -
-FilePath
和
-ArgumentList
-已绑定。
[1] 从 PowerShell 的角度来看,即使是值数组(,
分隔值)也是一个单个参数。