• 用C# 调用PowerShell 3.0


           最近,随着System Center Virtual Machine Management 2012 SP1 的发布,越来越多的人,加入到私有云的开发中来,特别是,开发测试云,但国内的技术文档及资料相当匮乏。前几天,一个外地的同事在问 “怎么用C# 调用PowerShell并且取得返回值”的问题。

    解决方案如下:

    1. 调用系统的PowerShell,可以用: 
     /// <summary>
            /// invoke system powershell
            /// </summary>
            /// <param name="cmd"></param>
            public static void InvokeSystemPS(string cmd)
            {
                List<string> ps = new List<string>();
                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);
                }
                pipeline.Invoke();//Execute the ps script
                runspace.Close();
            }

      2.调用VMM产品,这里以“Get-VM -Name vm001” 为例:

     /// <summary>
            /// Invoke VMM Poershell
            /// </summary>
            public static void InvokeVMMPS()
            {
                RunspaceConfiguration rconfig = RunspaceConfiguration.Create();
                PSSnapInException Pwarn = new PSSnapInException(); 
              
                Runspace runspace = RunspaceFactory.CreateRunspace(); 
                string test = "Import-Module VirtualMachineManager\r\n";
                runspace = RunspaceFactory.CreateRunspace(rconfig); runspace.Open();
                Pipeline pipeline = runspace.CreatePipeline(); 
                pipeline.Commands.AddScript(test); 
                try { 
                    var results = pipeline.Invoke();
    
                    using (Pipeline pipe = runspace.CreatePipeline())
                    {
                        //Get-VM -Name vm001
                        Command cmd = new Command("Get-VM");
                        cmd.Parameters.Add("Name", "vm001");
                        pipe.Commands.Add(cmd);
                        var result = pipe.Invoke();
                    }
                }
                catch (Exception ex) 
                {
                    throw ex;
                }
            }

    Firstly,  you need to add reference "System.Management.Automation".  Then, add two name space:

    using System.Management.Automation.Runspaces;

    using System.Management.Automation;

  • 相关阅读:
    二进制包安装MySQL数据库
    前端0:js,css基础
    前端2:工作涉及的问题及总结
    前端1:易混肴的前端知识,常用的方法或questions,及一点想法。
    微信小程序-上传多张图片加进度,持续修正中……
    JS 函数式编程
    敏捷开发总结
    数据绑定
    收藏
    transform,translate,transition 的区别
  • 原文地址:https://www.cnblogs.com/tomin/p/PowerShell.html
Copyright © 2020-2023  润新知