加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

在Windows远程服务器中运行命令,并在C#.NET中获取控制台输出

发布时间:2020-12-14 01:53:21 所属栏目:Windows 来源:网络整理
导读:我有一个远程服务器名称( Windows),用户名和密码. 使用C#.Net,我想在远程服务器上运行命令并返回控制台输出 有没有办法在C#中做到这一点? 我能够使用WMI使用以下代码(部分)运行命令,但没有获得控制台输出的运气.我只能取回进程ID. ObjectGetOptions objectG
我有一个远程服务器名称( Windows),用户名和密码.

使用C#.Net,我想在远程服务器上运行命令并返回控制台输出

有没有办法在C#中做到这一点?

我能够使用WMI使用以下代码(部分)运行命令,但没有获得控制台输出的运气.我只能取回进程ID.

ObjectGetOptions objectGetOptions = new ObjectGetOptions();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass(scope,managementPath,objectGetOptions);

ManagementBaSEObject inParams = processClass.GetMethodParameters("Create");

inParams["CommandLine"] = "cmd.exe /c "+ mycommand;
ManagementBaSEObject outParams = processClass.InvokeMethod("Create",inParams,null);

有任何想法吗?

解决方法

这个功能是我在经过一些研究后得出的.希望它可以帮助别人.

public string executeCommand(string serverName,string username,string password,string domain=null,string command)
{
    try
    {
        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        startInfo.FileName = "cmd.exe";
        if (null != username)
        {
            if (null != domain)
            {
                startInfo.Arguments = "/C "psexec.exe \" + serverName + " -u " + domain+""+username + " -p " + password + " " + command + """;
            }
            else
            {
                startInfo.Arguments = "/C "psexec.exe \" + serverName + " -u " + username + " -p " + password + " " + command + """;
            }
        }
        else
        {
            startInfo.Arguments = "/C "utilspsexec.exe "+serverName+" "+ command + """;
        }
        process.StartInfo = startInfo;
        process.Start();
        process.WaitForExit();

        if (process.ExitCode == 0 && null != process && process.HasExited)
        {
           return process.StandardOutput.ReadToEnd();
        }
        else
        {
            return "Error running the command : "+command;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读