1

我在 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的权限,没有特别发现。

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

4

8 回答 8

2

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

于 2009-12-14T09:48:06.663 回答
2

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

“Windows 64 位 (WOW64) 上的 Windows 提供文件系统重定向。在 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

于 2011-02-25T11:11:05.473 回答
1

您好,您使用的是 Perl,所以我想知道您为什么不使用 Net::Telnet,而不是 windows 的 telnet.exe,因为 AFAIK 对编程不友好。

于 2009-12-15T01:00:02.317 回答
1

在我的计算机上,以下代码有效(Windows 7):

$telnet = $ENV{'WINDIR'} . '\system32\telnet.exe';
system("$telnet 192.168.1.1");
于 2009-12-15T11:02:08.830 回答
0

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

于 2009-12-14T09:50:07.067 回答
0

您可能想要验证 Perl 在哪个帐户下执行并检查该帐户是否有权运行诸如 telnet 之类的可执行文件。

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

希望这可以帮助!

于 2009-12-14T10:03:34.633 回答
0

阅读控制台主机

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

另请参阅SysInternals 论坛上的相关帖子

我现在无权访问任何 Windows Server 2008 机器,所以我无法对此进行测试,但你能检查一下当你在该操作系统上运行时会发生wperl -e "system('c:\windows\system32\telnet localhost')"什么Start -> Run

于 2009-12-14T22:30:20.847 回答
0

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

于 2014-12-01T14:38:06.520 回答