c# - 从 C# 中的 Process.Start 启动 cmd.exe 时,Telnet 无法识别命令

标签 c# cmd telnet

我已经在控制面板 - 程序/功能上打开了 telnet 选项。 虽然 telnet 手动工作正常,但是当我从 C# 库运行下面时,我收到此错误:

"'telnet' is not recognized as an internal or external command, operable program or batch file."

这是我用来启动 Telnet 的代码:

Process.Start("cmd", "/k telnet")

这与手动从命令提示符运行它有什么区别?如何克服这种差异?

最佳答案

Telnet 是一个程序,始终安装在系统文件夹中。这也意味着,它总是在路上。您不需要需要启动cmd.exe来启动telnet.exe。只需使用

Process.Start("telnet.exe");

使用arguments参数将参数传递给telnet本身,例如主机、日志文件等:

Process.Start("telnet.exe","localhost 80 -f mylog.txt");

还有其他可能更好的选择。

使用 Telnet 库

您可以使用 Telnet 库并直接连接到服务器,例如使用 Telnet NuGet package :

using (Client client = new Client("localhost",80, new System.Threading.CancellationToken()))
{
    await client.WriteLine("abcd");
    string response = await client.ReadAsync();
    Console.WriteLine(response);
}

使用 PowerShell

Telnet 通常用于测试与 Web 服务器的连接,而不是实际发送命令。在这种情况下,您可以使用 PowerShell 的 Test-NetConnection接收有关连接的诊断信息:

using System.Management.Automation;

var ps = PowerShell.Create()
                    .AddCommand("test-netconnection")
                    .AddArgument("localhost")
                    .AddParameter("CommonTCPPort", "HTTP");
var results = cmd.Invoke();
foreach (dynamic result in results)
{
    Console.WriteLine($"{result.TcpTestSucceeded} {result.SourceAddress}");
}

确保添加正确的 Powershell NuGet 包 Microsoft.PowerShell.5.ReferenceAssemblies ,而不是不受支持和废弃的 System.Management.Automation

PowerShell 的优势在于,您只需添加更多 AddComandAddScript 调用即可将命令和脚本链接在一起。每个命令都会收到前一个命令的输出。您可以使用Import-CSV从文件中读取服务器和端口列表,并将输出通过管道传输到Test-NetConnection

关于c# - 从 C# 中的 Process.Start 启动 cmd.exe 时,Telnet 无法识别命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942704/

相关文章:

c# - LiveSDK : C# how to get file size before downloading

java - 为什么.bat中编写的命令在java中无限运行?

C++ WinSock 向 telnet 服务器发送命令

linux - 即时修改数据流

python ,预计: sendline() adding unexpected whitespace in sending text

c# - 如何比较HH :MM in C#

c# - 什么是逐字字符串?

c# - 在 ASP.NET Core Identity 中删除登录用户的策略

cmd - 在命令提示符窗口中突出显示文本是否会停止脚本执行或只是阻止输出?

CMD 的图形内存信息