西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发C#.NET → 用C# 调用PowerShell 3.0并且取得返回值

用C# 调用PowerShell 3.0并且取得返回值

相关软件相关文章发表评论 来源:西西整理时间:2012/12/17 15:18:11字体大小:A-A+

作者:西西点击:0次评论:0次标签: PowerShell

  • 类型:文件处理大小:11.3M语言:英文 评分:5.0
  • 标签:
立即下载

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

解决方案如下:

调用系统的PowerShell,可以用: 

/// 
        /// invoke system powershell
        /// 
        /// 
        public static void InvokeSystemPS(string cmd)
        {
            List ps = new List();
            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” 为例:

 /// 
        /// Invoke VMM Poershell
        /// 
        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;

Powershell 3.0作为Windows Management Framework 3.0的一部分,集中体现了Powershell 3.0的新特性:Powershell工作流、增强会话灾难恢复、语法简洁方便、增强了cmdlet的查找和自动导入模块的功能、提供了对webservice强大支持和ISE命令加载项等。
Powershell需要用到.NET框架和cmdlets命令集。作为PowerShell的用户,可以使用系统自带的cmdlets,也可以自定义cmdlets,扩展实现更强大的功能。而且,PowerShell使用了面向对象方法,基于.Net,这是VBScript所不能提供或者支持的。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)