[英]Intercept USB-keyboard data before Windows registers it as keystroke
[英]Powershell - Keyboard keystroke in a Hidden Windows
我正在實習,我必須編寫一個powershell腳本來自動執行telnet腳本連接。 我用cmd來做,我發送擊鍵來像這樣連接:
$cmd = 'C:\\Windows\\System32\\cmd.exe' Start-Process $cmd -Verb runAs $wshell = New-Object -ComObject wscript.shell; $wshell.AppActivate($cmd) Sleep 3 $wshell.SendKeys('telnet IP_ADDRESS')
而且效果很好! 但是我有一個問題
我必須以隱藏樣式運行cmd窗口,所以我這樣做了:
Start-Process $cmd -Verb runAs -Windowstyle hidden
$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate($cmd)
Sleep 3
$wshell.SendKeys('telnet IP_ADDRESS')
窗口以隱藏樣式啟動,可以,但是鍵盤按鍵不在隱藏的cmd窗口中
有人有解決辦法嗎?
問題是您使用的是SendKeys,它實際上只是模擬鍵盤上的按鍵。 如果沒有窗口,則沒有任何內容可以發送按鍵。
Start-Process $cmd -ArgumentList "/K telnet IP_ADDRESS" -Verb runAs -Windowstyle hidden
這只是告訴CMD在打開時運行指定的命令,應該做到這一點。
您可以將Putty用於telnet。 Plink是Putty的命令行版本,它在命令行上接受密碼。 不幸的是,telnet協議(與SSH不同)沒有用於發送密碼的標准化機制。 但是,您可以將輸入通過管道傳遞到Plink的stdin。 因此,您可以將密碼通過管道傳輸到Plink。
請注意,登錄后,還需要考慮一些其他問題。 由於您有一個隱藏的窗口,因此您必須計划編寫整個Telnet會話的腳本。 為了編寫Telnet腳本,您可能需要在主機程序需要時將輸入發送到telnet。 如果一次發送所有輸入,則主機程序/ OS可能無法正確處理。 這意味着您可能需要按照Tcl Expect
方式做一些事情,在腳本中編寫要查找的輸出,然后在出現期望的輸出時發送什么輸入。 我已經在Powershell中看到了至少一種類似的實現。
順便說一句,如果您可以使用SSH而不是Telnet,則可以避免通過管道輸入密碼。像通常使用Telnet協議那樣,輸入密碼並不安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.