为什么Perl不能在Windows下启动telnet?

时间:2009-12-14 09:44:16

标签: windows perl telnet

我在Windows 2008上启用了telnet客户端功能,并尝试从Perl脚本启动它:

perl -e "system('c:\windows\system32\telnet localhost')"

然后我收到了这样的错误:

'c:\windows\system32\telnet' is not recognized as an internal or external command,
operable program or batch file.

我可以从'cmd'终端运行它,或者,如果我将telnet.exe复制到本地目录,它可以启动。我在c:\ windows \ system32下检查了telnet.exe的权限,没有特别的发现。

有人可以帮我解决这个案子吗?非常感谢!

8 个答案:

答案 0 :(得分:2)

我认为你必须指定程序的全名,即telnet.exe。但是你最好使用Net :: Telnet模块或者像Expect.pm那样以编程方式处理交互式会话。

答案 1 :(得分:2)

我最近遇到了完全相同的问题,尝试以编程方式启动telnet和rdp客户端。问题与windows“design”的一个方面有关,称为文件系统重定向:

“Windows 64位上的Windows(WOW64)提供文件系统重定向。在64位版本的Windows Server 2003或Windows XP中,%WinDir%\ System32文件夹保留用于64位应用程序。 32位应用程序尝试访问System32文件夹,访问被重定向到以下文件夹:%WinDir%\ SysWOW64。默认情况下,启用文件系统重定向。“

http://www.codeproject.com/tips/55290/Disabling-Windows-file-system-redirection-on-a-CFi.aspx

答案 2 :(得分:1)

嗨,你正在使用Perl,所以我想知道为什么你不使用Net :: Telnet,而不是Windows的telnet.exe,AFAIK对编程不友好。

答案 3 :(得分:1)

在我的计算机上运行代码(Windows 7):

$telnet = $ENV{'WINDIR'} . '\system32\telnet.exe';
system("$telnet 192.168.1.1");

答案 4 :(得分:0)

它必须是a)权限b)不正确的路径,c)你最后需要.exe或d)你需要大写“c:”

答案 5 :(得分:0)

您可能想验证Perl执行的帐户,并检查该帐户是否有权运行telnet等可执行文件。

为了验证理论,我将在一个高权限帐户(如管理员)下运行Perl来检查它是否运行telnet,然后调整它运行的帐户。

希望这有帮助!

答案 6 :(得分:0)

了解console host

  

ConHost代表了控制台应用程序I / O处理方式的永久性变化。

另请参阅related post on SysInternals forums

我现在无法访问任何Windows Server 2008计算机,因此我无法对此进行测试,但是您可以检查从开始 - >等效运行wperl -e "system('c:\windows\system32\telnet localhost')"时会发生什么。在该操作系统上运行

答案 7 :(得分:0)

答案是:使用sysnative而不是system32,因为不允许32位应用程序访问system32目录(64位应用程序)。通过使用这个别名sysnative,它将起作用。