回答
而不是尝试自动执行telnet可执行文件,只需创建套接字并发出命令,读回它们,然后根据这些命令做出决定。下面是一个简化的示例连接到我的本地Web服务器:
function test() {
$msg = [System.Text.Encoding]::ASCII.GetBytes("GET/HTTP/1.0`r`nHost: localhost`r`n`r`n")
$c = New-Object System.Net.Sockets.TcpClient("localhost", 80)
$str = $c.GetStream()
$str.Write($msg, 0, $msg.Length)
$buf = New-Object System.Byte[] 4096
$count = $str.Read($buf, 0, 4096)
[System.Text.Encoding]::ASCII.GetString($buf, 0, $count)
$str.Close()
$c.Close()
}
显然,你需要将它从80端口的变化,并通过用户名/密码,而不是一个Web请求头......不过这已经足够了让你开始。
感谢您的示例。我对PowerShell非常陌生。我尝试了一些基于上述代码的东西,但事情并不奏效,但我必须错过一些东西。在这里我想要做的。 telnet
等待,您正尝试远程登录到远程计算机以捕获引导顺序?!告诉我我错了... – x0n 2010-04-14 22:15:26
不,telnet通过远程机器上的串口捕获开发板的输出。我将anthor telnet会话导入远程机器,将命令发送到开发板。所以我们的想法是捕获第一个telnet会话的输出,找出开发板的状态,通过第二个telnet窗口向开发板发送更多命令。 – 2010-04-15 16:16:51
我不会在这里用套接字做任何事情,因为你将需要实现至少部分的telnet规范。如果我记得,那个规范有点有趣。但是这里列出了一些.NET远程登录实现:C# Telnet Library,您可能可以直接从PowerShell调整或使用,就像Goyuix在他的答案中使用套接字代码一样。
确定这是不是最优雅的解决方案,而且它依赖于不寒而栗 VBscript的,但这里有云......
创建一个VBScript实际加快telnet会话,这是一个例子
set oShell = CreateObject("WScript.Shell")
oShell.run("Telnet")
WScript.Sleep 1000
oShell.SendKeys("Open 127.0.0.1 23")
WScript.Sleep 1000
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys("n")
WScript.Sleep 1000
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys"MyName"
WScript.Sleep 1000
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys("MyPassword")
WScript.Sleep 1000
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
oShell.SendKeys("MyCommand")
WScript.Sleep 1000
oShell.SendKeys("{Enter}")
WScript.Sleep 1000
然后使用PowerShell来调用脚本,并通过它,你希望在执行命令,在下面的例子中,这些命令存储在一个名为CommandList.txt
文件function Connect-MyTelnet{
Param(
[string] $IPAddress,
[string] $Port,
[string] $UserName,
[string] $Password,
[string] $cmdlistPath
)
## - Setting default values:
if($port -eq $null){ $Port = "23"; };
if($cmdlistPath -eq $null) { $CmdlistPath = 'c:\temp\cmdlist.txt'; };
## create vbscript file: MyTelnetSession.vbs
## - For Microsoft Telnet:
$MyVBScript = @"
set oShell = CreateObject("WScript.Shell")`r`n
oShell.run("Telnet")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("Open $IPAddress $Port")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("{Enter}")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("n")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("{Enter}")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("$UserName")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("{Enter}")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("$Password")`r`n
WScript.Sleep 1000`r`n
oShell.SendKeys("{Enter}")`r`n
WScript.Sleep 1000`r`n
"@;
## - Get file with telnet commands:
[array] $Cmdlist = Get-Content $cmdlistPath;
## loop through and build each telnet command line:
foreach($cmd in $cmdlist)
{
## - Build VBscript lines:
$MyVBScript += 'oShell.SendKeys("'+$cmd+'")'+"`r`n";
$MyVBScript += "WScript.Sleep 1000`r`n";
$MyVBScript += 'oShell.SendKeys("{Enter}")'+"`r`n";
$MyVBScript += 'WScript.Sleep 1000'+"`r`n";
}
## - Close Telnet Session:
$MyVBScript += 'oShell.SendKeys(" QUIT")'+"`r`n";
$MyVBScript += "WScript.Sleep 1000`r`n";
$MyVBScript += 'oShell.SendKeys("{Enter}")'+"`r`n";
$MyVBScript += 'WScript.Sleep 1000'+"`r`n";
## - Save and execute generated VBscript:
$MYVBScript | Out-File -FilePath c:\temp\MyTelnet.vbs -Encoding ASCII;
& c:\temp\MyTelnet.vbs
}; Set-Alias ct Connect-MyTelnet;
这应该做你的要求......
注意:不是我的解决方案,从this blog post发现我已经使用它一次或两次。
- 1. 使用PowerShell自动化vmrun
- 2. 在java中使用robotframework telnet api自动化telnet会话
- 3. Telnet自动化/脚本
- 4. 使用PowerShell自动化Virtual PC 2007?
- 5. 使用Windows PowerShell的IE自动化
- 6. 使用PowerShell自动化Cygwin配置
- 7. Powershell和自动化
- 8. telnet自动化脚本有时失败
- 9. 使用bash脚本自动化telnet会话
- 10. ec2中的PowerShell自动化
- 11. Powershell自动化服务
- 12. PowerShell FTP自动化问题
- 13. 如何在Powershell中自动执行Telnet端口检查?
- 14. 自动脚本telnet或portqry
- 15. 使用powershell自动化MSACCESS应用程序
- 16. 如何在不使用SendKeys的情况下自动化Telnet会话
- 17. 使用Powershell自动化Visual Studio 2012,做错了吗?
- 18. 通过Linux的PowerShell使用私钥ssh登录自动化?
- 19. 使用Azure自动化部署Azure云服务Powershell DSC
- 20. 使用PowerShell自动化Azure发布设置检索
- 21. 使用PowerShell脚本自动化网站验证测试?
- 22. 使用powershell web gui自动化获取TD表格元素
- 23. 使用TFS Release Management通过PowerShell执行TestComplete自动化脚本
- 24. powershell IE自动化href问题
- 25. 通过PowerShell进行Facebook自动化?
- 26. 在PowerShell自动化期间RPC_E_SERVERCALL_RETRYLATER
- 27. Powershell 1.0 Excel自动化 - 问题与“Font.ColorIndex”
- 28. PowerShell展望自动化名称空间
- 29. Powershell和Excel工作表自动化
- 30. VMware的PowerShell脚本 - 自动化的Gmail
服务器端是什么? UNIX? OSX?窗户+ TELNETD? powershell v1或v2?你可以在远程端安装东西吗?客户端? – x0n 2010-04-14 01:20:41
写什么脚本? – 2010-04-14 01:27:02
@Romain - 标题说明了一切:powershell。 – x0n 2010-04-14 01:49:17