目前,我定期拨入约20-30台计算机。我当前正在Windows XP SP3上使用超级终端来执行此操作。一旦我的计算机连接到另一台计算机,我就得到了一些信息的字符串打印输出,我手动将这些信息打印出来并输入到Excel中。
虽然它可以很好地用于手动连接,但我认为这是一个繁琐的过程,应该自动化。现在,我每周都要这样做一次,因为它非常费力(通常每次30至40分钟),但理想情况下,我希望每天将其作为计划任务运行。但是,超级终端似乎没有提供任何脚本功能。此外,我尝试使用会话日志记录功能,但它似乎无法可靠地运行。
是否有某种方式,也许使用批处理,VBS或PowerShell脚本,可以依次拨打一系列计算机,然后自动将终端输出记录到带有时间戳的文本文件中?
需要增加的警告是,我还需要能够处理异常,例如,如果计算机很忙。超级终端具有“忙时重拨”功能,有时我会使用该功能或拨打其余计算机,然后再返回该计算机。我也需要将其构建到我的脚本中。
考虑到战争拨号是可能的,尽管它不记录输出,仅记录是否有载波音,但我觉得这是可以实现的。我应该如何实施呢?
如果可能,我需要一个批处理或VBS解决方案。我不确定Windows XP上对PowerShell的支持如何,由于种种原因,我宁愿不要在计算机上安装任何其他工具(例如Python等)。
澄清:我有一个朋友,他曾经制作了一个脚本,可以使用Hayes命令将其拨出该行。那是容易的部分;困难的部分是能够从远程计算机检测打印输出并将其记录到文本文件中。
超级终端的付费版本提供了沿这些方向编写脚本的功能,但我想通过使用自定义脚本免费进行此操作,该脚本还可以处理忙碌号码。
谢谢!
电源外壳
这是我尝试的脚本:
# Create your instance of the SerialPort Class
$serialPort = new-Object System.IO.Ports.SerialPort
# Set various COM-port settings
$serialPort.PortName = "COM3"
$serialPort.BaudRate = 1200
$serialPort.WriteTimeout = 500
$serialPort.ReadTimeout = 23000
$serialPort.DtrEnable = "true"
# or in one command
# $serialPort= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
# Open the connection
$serialPort.Open()
# write to it
$serialPort.WriteLine( "at+csq" + "`r" )
$serialPort.WriteLine( "atdt1NPANXXXXXX" + "`r" )
# wait
start-sleep -m 50
# read line
$line = $serialPort.ReadLine()
Write-Host $line
# write to it
$serialPort.Close()
到目前为止最接近的解决方案:
我能够获得的最接近的方法是使用AHK,它相当挑剔,但是在足够的时间里有用。我的计划是将其挂接到批处理脚本中,并传入每个数字并进行迭代,直到成功从每台计算机上获取打印输出为止。
AutoHotkey.com可能会有所帮助。
我相信,使其可靠运行的关键技巧是使用正确的方法。简单地将击键转储到Microsoft Windows中,以使Windows将其提供给前台应用程序将不是最稳定的方法。这是我用来与PuTTY交互的一些代码。它运行良好,足以启动脚本,该脚本将启动PuTTY,但是即使PuTTY在后台,该程序仍可以与正确的PuTTY实例进行交互。
(您可能会想大幅修改此示例代码。)
sPuTTYloc:="C:\Users\\me\PuTTY\PuTTY.exe"
sSiteName:="NameOfSite"
Run, "%sPuTTYloc%" -load "%sSiteName%",,UseErrorLevel,sPuTTYPID
if %sPuTTYPID%
{
WinWait, ahk_pid %sPuTTYPID%
sleep ,5000
IfWinExist,ahk_pid %sPuTTYPID%
{
ControlSend,,{Enter},ahk_pid %sPuTTYPID%
; other stuff
else
{
MsgBox "PuTTY Window closed, spot #1"
return ; Apparently the PuTTY window closed
}
Sleep 1500
IfWinExist,ahk_pid %sPuTTYPID%
{
; do other stuff
}
else
{
MsgBox "PuTTY Window closed, spot #2"
return ; Apparently the PuTTY window closed
}
Sleep 1500
return
}
return
我仍然有事情要分解成碎片,多次调用“ IfWinExist”,这不一定有令人信服的理由。当我创建并最初调试脚本时,如果远程端终止了连接(这会导致我的PuTTY窗口关闭),我发现它对于调试很有用(或者至少感觉我对发生的事情有更好的了解)。 。
最主要的是,通过使用ControlSend使用由我的Run命令创建的PID给程序提供击键,如果发生了一些不好的情况,脚本不会继续尝试将击键发送到Windows并最终导致击键进入错误的程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句