
目前,我定期撥打大約 20-30 台電腦。我目前正在 Windows XP SP3 上使用超級終端機來執行此操作。一旦我的計算機連接到另一台計算機,我就會得到一些資訊的字串列印輸出,我手動查看這些資訊並將其輸入 Excel 中。
雖然它對於手動連接效果很好,但這是一個乏味的過程,我認為應該自動化。我現在每週執行一次,因為它非常費力(通常每次 30-40 分鐘),但理想情況下我希望將其作為計劃任務每天運行。然而,超級終端似乎不提供任何腳本功能。此外,我嘗試使用會話日誌記錄功能,但它似乎無法正常運作。
有沒有某種方法,也許使用批次、VBS 或 PowerShell 腳本,我可以順序撥打一系列計算機,然後自動將終端輸出記錄到帶有時間戳的文本文件中?
額外的警告是我還需要能夠處理異常,例如,如果計算機繁忙。超級終端具有「忙碌時重撥」功能,有時我會使用該功能或撥打其餘計算機,然後再返回該計算機。我也需要將其建置到我的腳本中。
考慮到戰爭撥號是可能的,儘管它不記錄輸出,僅記錄載波音的缺失或存在,我覺得這是可以實現的。我該如何實施呢?
如果可能的話,我需要 Batch 或 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,它相當挑剔,但在大多數情況下都足夠有用。我的計劃是連接一個批次腳本並傳入每個數字並迭代,直到我成功地從每台電腦獲得列印輸出。
答案1
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 並最終獲得擊鍵進入錯誤的程序。
答案2
可以幫助解決您的問題的工具是 AT 命令測試儀桌面應用程式,一款商業產品(9.95 美元),提供 7 天免費試用。
該產品可以在「腳本模式」標籤下執行AT命令的腳本,可以在本機電腦上儲存和載入腳本。
它還具有命令列模式,可以透過以下方式呼叫:
atc –port portname –script filename
該工具還可以收集和保存調變解調器日誌。我還沒有嘗試過,因為我沒有調製解調器,也不知道要撥打的任何號碼,但如果日誌保存為文字文件,那麼編寫一個用於錯誤/成功的小文字搜尋腳本應該是一件簡單的事情。
如果您喜歡自己編寫,可以使用簡單的 PowerShell 腳本來完成 System.IO.Ports.SerialPort 類。
這是一個例子(未經測試且非常理論化):
# Create your instance of the SerialPort Class
$serialPort = new-Object System.IO.Ports.SerialPort
# Set various COM-port settings
$serialPort.PortName = "COM1"
$serialPort.BaudRate = 19200
$serialPort.WriteTimeout = 500
$serialPort.ReadTimeout = 3000
$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" )
# wait
start-sleep -m 50
# read line
$line = $serialPort.ReadLine()
Write-Host $line
# write to it
$serialPort.Close()
請注意,需要注意調變解調器使用的行結束符號。
這是我在 XP 虛擬機器上的會話,我在其中安裝了 .Net Framework 2.0 並 KB968930。它幾乎可以工作,只是沒有任何東西連接到 COM1,因此它掛在 ReadLine() 呼叫上,直到逾時結束。
請注意,我的腳本中存在複製貼上錯誤,現在已更正。不起作用的線路是:
$line = $port.ReadLine()
本來應該是:
$line = $serialPort.ReadLine()
答案3
控制調變解調器最基本的方法是透過序列埠發送命令。幾乎所有撥接數據機都支援海耶斯 AT 指令,例如ATD
或ATH
(通常在串行調變解調器的硬體中,有時由 USB/PCI 數據機的驅動程式模擬)。
例子:
Linux/OpenBSD/FreeBSD:所有程式和函式庫最終都使用
/dev/ttyS*
特殊檔案來存取序列埠。 (注意:在 Linux 上,USB 序列適配器被命名為 ttyUSB 或 ttyACM。)
在大多數情況下,您的程式可以像開啟常規檔案一樣開啟路徑,然後寫入/刷新命令並讀取回應。Windows:所有程式最終都會使用
\\.\COM1:
特殊檔案來存取序列埠。前四個可以簡單地打開COM1:
(快捷方式是 MS-DOS 的遺跡)。PowerShell:有一個開發部落格關於這個話題。
Python:使用py串口。
在 Windows 上,另一種方法可能是使用電話API。但是,我找不到它是否支援資料(終端)呼叫,或僅支援語音呼叫。
答案4
附註:這裡只是我用來控制調變解調器的兩個實用程式。我發送和接收大量短信,這些工具就是為此而設計的。它們支援多個調變解調器,並使用 AT 命令來初始化調變解調器。儘管所有功能都以某種方式與 SMS 配合使用,但它可以透過初始化腳本等進行高度自訂。我還沒有測試完整的周期,例如撥入另一個調製解調器並以某種方式接收數據,但也許值得研究一下:
http://smstools3.kekekasvi.com/index.php https://wammu.eu/smsd/