【发布时间】:2019-09-17 16:21:19
【问题描述】:
我有一个.hta 应用程序,它接受两个命令行参数。通过命令行在远程机器上执行应用程序的工作方式如下
(命令行 - cmd)示例:
C:\Users\<user>\Desktop>MSI-BUILDER.hta "MSI_APP" "D:\APP\15.9.98"
但是当使用我的桌面尝试通过 PSEXEC 在远程计算机上执行相同的命令时,我看到应用程序在任务管理器中运行,但没有任何反应。
第一步是将命令行参数分配给 PowerShell 中的变量:
$arg1 = "MSI_APP"
$arg2 = "D:\APP\15.9.98"
在 PowerShell 中执行此命令失败(没有错误,只是挂起):
.\psexec -s -i \\Srv2012 cmd /c "start /i "MSI-BUILDER" "C:\Users\<user>\Desktop\MSI-BUILDER.hta" $arg1 $arg2"
应用程序仅在任务管理器中启动,我假设在后台,但我没有看到任何更改,所以它可能只是挂起......
我不是 100% 确定我在这件事上的语法对于通过带有命令行参数的 powershell 启动 HTA 是否正确。
还有一种方法或开关可以让我真正看到应用程序启动并在远程执行代码后执行它的操作,以进行测试?
【问题讨论】:
-
“有没有一种方法或开关,我可以在远程执行代码后实际看到应用程序启动并执行它的操作” - 不。远程执行的应用程序对交互式用户的 GUI 不可见一台远程机器。这是出于安全原因而设计的。
-
@Bill_Stewart:
psexec可以在本地登录用户的桌面会话中以可见方式远程启动应用程序,即通过-i选项 - 请参阅the docs。 -
打开命令提示符窗口并输入
start /?和cmd /?以了解这些特定命令的工作原理。你会注意到start命令需要一个标题,一个空的就可以了,start "" ...,你还会在cmd /?下看到一个部分,它解释了它如何使用/C处理双引号。但是,您根本不需要通过cmd.exe运行 HTML 应用程序或使用其内部的start命令。 -
@mklement0 感谢您的通知。它可以这样做是因为它在远程机器上安装了一项服务,然后在控制台(或指定的)会话中调用可执行文件。
标签: powershell cmd hta psexec