在HTA中选择ProcessId意外行为

时间:2014-01-03 05:46:58

标签: vbscript

首先,感谢阅读。

我有一个HTA来集中一些重复的任务。 通过ssh登录到多个服务器并发送多个命令就是其中之一。

此代码的工作方式类似于vbs文件中的一个魅力

Option Explicit

Dim Shell, WMI, wql, process

Set Shell = CreateObject("WScript.Shell")
Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

wql = "SELECT ProcessId FROM Win32_Process WHERE Name = 'putty.exe'"
dim cmd : cmd=InputBox("Enter command")
For Each process In WMI.ExecQuery(wql)
    Shell.AppActivate process.ProcessId
    Shell.SendKeys cmd & " {ENTER}"
Next

但是这个等效的,在HTA中只发送命令到一个或两个窗口。

sub sendToPuttyWindow(cmd)
    Dim Shell, WMI, wql, process

    Set Shell = CreateObject("WScript.Shell")
    Set WMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

    wql = "SELECT ProcessId FROM Win32_Process WHERE Name = 'putty.exe'"

    For Each process In WMI.ExecQuery(wql)
        Shell.AppActivate process.ProcessId
        Shell.SendKeys cmd & " {ENTER}"
    Next
end sub

目前我正在调用hta中的vbs文件,但我希望尽可能保持HTA文件的独立性。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

使用SendKeys来自动化PuTTY。它将所有模拟的击键发送到当前前景窗口,无论可能是什么。如果需要连续运行多个命令:使用PuTTY套件中的plink。它是为了这个目的而建造的。

plink -ssh -batch -m file user@host