如何通过powershell将卸载密码传递到远程系统以卸载受密码保护的应用程序

问题描述 投票:0回答:1

我可以使用 Powershell 静默卸载没有密码保护的应用程序。

Start-Process -Wait -FilePath $uninstall32 /SILENT

对于密码保护的应用程序(使用 Inno SetUp 创建的安装程序),它会弹出询问密码。有没有一个选项可以在不弹出窗口的情况下传递密码?

如果成功,我想远程卸载受密码保护的应用程序

没有远程密码保护的应用程序,我已经默默卸载了。

我试过了

Start-Process -Wait -FilePath $uninstall32 UNINSTALL_PASSWORD =AR /SILENT
powershell passwords uninstallation invoke protected
1个回答
0
投票

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 的角度来看,即使是值数组(,

分隔值)也是一个
单个参数。

© www.soinside.com 2019 - 2024. All rights reserved.