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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM