Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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
C# 远程管理本地工作站组_C# - Fatal编程技术网

C# 远程管理本地工作站组

C# 远程管理本地工作站组,c#,C#,为了在远程工作站上实现这一点,我一直在用C#做一些尝试: net localgroup administrators "MyAdminGroup1" /add net localgroup administrators "MyAdminGroup2" /add net localgroup users "MyUserGroup" /add net localgroup users "Domain Users" /delete 考虑使用PsExec远程执行cmd.exe,并使用StreamWri

为了在远程工作站上实现这一点,我一直在用C#做一些尝试:

net localgroup administrators "MyAdminGroup1" /add
net localgroup administrators "MyAdminGroup2" /add
net localgroup users "MyUserGroup" /add
net localgroup users "Domain Users" /delete
考虑使用PsExec远程执行cmd.exe,并使用StreamWriter在循环中运行命令。我没有收到错误,但函数一直挂起。我在网上浏览了一些资源,了解到我遇到了异步读/写、缓冲区填满、PsExec无限期地等待cmd.exe等问题

我的问题是,我这样做对吗?使用Process()+PsExec+cmd.exe在远程工作站上执行“net localgroup administrators”MyAdminGroup1“/add”,还是有更好的方法来实现这一点

这是挂起在StandardOutput.ReadLine()上的循环:

foreach(listOfLocalUserGroups中的KeyValuePair组){
字符串标签=group.Key;
string命令=group.Value;
string psExecArguments=string.Format(@“-u{0}\{1}-p{2}\\{3}cmd.exe”,域、用户名、密码、主机名);
WriteLine(“{0}-{1}\n{2}\n请稍候…”,标签,命令,psExecArguments);
Process remoteProcess=新进程();
remoteProcess.StartInfo.UseShellExecute=false;
remoteProcess.StartInfo.RedirectStandardInput=true;
remoteProcess.StartInfo.RedirectStandardOutput=true;
remoteProcess.StartInfo.RedirectStandardError=true;
remoteProcess.StartInfo.FileName=“PsExec.exe”;
remoteProcess.StartInfo.Arguments=psExecArguments;
试一试{
List strOut=新列表();
List strErr=新列表();
remoteProcess.Start();
StreamWriter remoteCommand=remoteProcess.StandardInput;
remoteCommand.WriteLine(命令);
remoteCommand.Close();
while(remoteProcess.StandardOutput.Peek()>-1){
添加(remoteProcess.StandardOutput.ReadLine());
}
while(remoteProcess.StandardError.Peek()>-1){
添加(remoteProcess.StandardError.ReadLine());
}
Console.ForegroundColor=ConsoleColor.Green;
Console.WriteLine(“\n##{0}###”,label);
Console.WriteLine(“输出:”);
foreach(strOut中的字符串放样){
控制台写入线(断线);
}
Console.WriteLine(\n错误:);
foreach(strErr中的字符串stringer){
控制台写入线(stringErr);
}
控制台写入线(超级配置部分);
}
捕获(异常错误){
Console.ForegroundColor=ConsoleColor.Red;
WriteLine(“无法完成{0}”,标签);
WriteLine(“错误:{0}\n”,err.Message);
}
最后{
Console.ResetColor();
remoteProcess.Close();
}
}
foreach (KeyValuePair<string, string> group in listOfLocalUserGroups) {
            string label = group.Key;
            string command = group.Value;
            string psExecArguments = string.Format(@"-u {0}\{1} -p {2} \\{3} cmd.exe", domain, username, password, hostname);

            Console.WriteLine("{0} - {1}\n{2}\nPlease wait...", label, command, psExecArguments);
            Process remoteProcess = new Process();
            remoteProcess.StartInfo.UseShellExecute = false;
            remoteProcess.StartInfo.RedirectStandardInput = true;
            remoteProcess.StartInfo.RedirectStandardOutput = true;
            remoteProcess.StartInfo.RedirectStandardError = true;
            remoteProcess.StartInfo.FileName = "PsExec.exe";
            remoteProcess.StartInfo.Arguments = psExecArguments;

            try {
                List<string> strOut = new List<string>();
                List<string> strErr = new List<string>();

                remoteProcess.Start();
                StreamWriter remoteCommand = remoteProcess.StandardInput;
                remoteCommand.WriteLine(command);
                remoteCommand.Close();

                while (remoteProcess.StandardOutput.Peek() > -1) {
                    strOut.Add(remoteProcess.StandardOutput.ReadLine());
                }
                while (remoteProcess.StandardError.Peek() > -1) {
                    strErr.Add(remoteProcess.StandardError.ReadLine());
                }

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\n## {0} ##", label);

                Console.WriteLine("Output: ");
                foreach (string stringOut in strOut) {
                    Console.WriteLine(stringOut);
                }
                Console.WriteLine("\nError: ");
                foreach (string stringErr in strErr) {
                    Console.WriteLine(stringErr);
                }

                Console.WriteLine(SuperReconfig.SECTION);
            }
            catch (Exception err) {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Unable to complete {0}", label);
                Console.WriteLine("Error: {0}\n", err.Message);
            }
            finally {
                Console.ResetColor();
                remoteProcess.Close();
            }
        }