• 用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;

  • 相关阅读:
    分享:新入职时,如何快速熟悉一个项目的代码
    Windows搭建Golang开发环境
    Web3.0应用程序架构
    重新整理汇编—————汇编的基础理论前置篇
    重新整理汇编—————寄存器的基本概念[二]
    分库分表理论基础
    MyCat应用实战
    Mycat理论基础与配置详解
    Sharding JDBC案例实战
    Bert不完全手册5. BERT推理提速?训练提速!内存压缩!Albert
  • 原文地址:https://www.cnblogs.com/tomin/p/PowerShell.html
Copyright © 2020-2023  润新知