Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Powershell-隐藏窗口中的键盘按键_Windows_Powershell_Cmd - Fatal编程技术网

Windows Powershell-隐藏窗口中的键盘按键

Windows Powershell-隐藏窗口中的键盘按键,windows,powershell,cmd,Windows,Powershell,Cmd,我正在实习,我必须编写一个powershell脚本来自动化telnet脚本连接。 我使用cmd执行此操作,我发送按键以如下方式连接: $cmd='C:\Windows\System32\cmd.exe' 启动进程$cmd-动词运行方式 $wshell=新对象-ComObject wscript.shell; $wshell.AppActivate($cmd) 睡眠3 $wshell.SendKeys('telnet IP_地址') 而且效果很好!但是我有个问题 我必须以隐藏样式运行cmd窗口,因

我正在实习,我必须编写一个powershell脚本来自动化telnet脚本连接。 我使用cmd执行此操作,我发送按键以如下方式连接:

$cmd='C:\Windows\System32\cmd.exe'
启动进程$cmd-动词运行方式
$wshell=新对象-ComObject wscript.shell;
$wshell.AppActivate($cmd)
睡眠3
$wshell.SendKeys('telnet IP_地址')

而且效果很好!但是我有个问题

我必须以隐藏样式运行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。如果一次发送所有输入,主机程序/操作系统可能无法正确处理。这意味着您可能需要按照
Tcl Expect
的思路做一些事情,在这里,您可以编写要查找的输出脚本,然后在预期输出出现时发送什么输入。我在Powershell中看到过至少一个类似的实现


顺便说一句,如果您可以使用SSH而不是Telnet,那么就不需要通过管道输入密码。像Telnet协议一般一样,输入密码是不安全的。

谢谢你的帮助,我会在我的脚本中尝试,如果成功的话,你将是我的上帝很长一段时间了,哈哈。