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

4 篇文章 0 订阅

  算是对之前做的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 返回的是命令的执行成功与否,也就是 $? 需要在发送的指令后添加$? 这样就可以同时得到错误返回信息和指令执行成功失败信息


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值