使用PowerShell远程执行指令后返回执行或错误信息

  算是对之前做的Powershell远程执行指令的一些改进优化,由于之前返回信息只能在发送的命令行后面加上 $? 来判定命令的是否执行成功,返回的只有false或者true,亦或者是返回一些奇怪的数组类型,无法正确有效的判断是指令中哪一部分出现的问题。

  现在的解决方法是通过pipeline流中的Error.Read() 方法返回执行过程中出现的错误信息。只需要将这行语句写在向PowerShell发送指令的工作流中返回即可,代码如下。

  public string InvokeSystemPS(string cmd)//提交方法,将命令传入,打开与powershell交互的工作流,提交命令,并获得返回值
        {
            string Value = "";
            try
            {
                List<string> ps = new List<string>();
                //开启计算机的安全设置,允许执行可能会用到
                //开启最高的执行权限
                //Unrestricted——允许所有的script运行
                //ps.Add("Set-ExecutionPolicy RemoteSigned");
                //ps.Add("Set-ExecutionPolicy -ExecutionPolicy Unrestricted");
                ps.Add(cmd);
                Runspace runspace = RunspaceFactory.CreateRunspace();
                runspace.Open();
                Pipeline pipeline = runspace.CreatePipeline();
                foreach (var scr in ps)
                {
                    pipeline.Commands.AddScript(scr);
                }


                var test = pipeline.Invoke();//提交指令
                //从返回工作流中获取到返回值对象test
                object ER = pipeline.Error.Read();
                string error = ER.toString();
//可通过一个字符串讲错误信息存放。
                //从工作流中返回执行错误信息,通过error.read方法返回
                //并将其存放到error字符串中返回
                string member = test[0].Members.ElementAt(3).Value.ToString();//返回保留活动标识
                AddressState = member.Substring(0, member.Length);//分隔出活动标识字符串
                foreach (var a in test)
                {
                    Value = a.ToString() + Value;//打印返回信息
                }
                runspace.Close();


            }
            catch (Exception ex)
            {
                throw ex;
            }
            return Value;
        }


  在上面代码中,执行最后返回结果是在字符串变量 error 中存放错误返回信息,可根据使用情况存放在对象中或者全局变量中。

  而Value 返回的是命令的执行成功与否,也就是 $? 需要在发送的指令后添加$? 这样就可以同时得到错误返回信息和指令执行成功失败信息


猜你喜欢

转载自blog.csdn.net/annn_kk/article/details/76985455