博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cmdlet开发与学习(六)
阅读量:4611 次
发布时间:2019-06-09

本文共 3492 字,大约阅读时间需要 11 分钟。

      之前的内容主要是关于cmdlet开发的,下面要将的内容,是关于在应用程序中集成PowerShell引擎。

      运行空间和管道

      Runspace类是PowerShell引擎API的重要组成部分,Runspace实例代表一个PowerShell执行引擎实例,其中包含自己的一系列变量,驱动器映射,函数等。这些资源统称为运行空间的“会话状态”。

      创建并调用Pipeline类的实例,我们就可以在运行空间中使用命令行。Pipeline类实例代表PowerShell命令行对象,其中包含各种命令,命令参数,入口,以及一组输入流,输出流,错误流管道。

      引用System.Management.Automation.dll      

 

      执行命令行

      RunspaceInvoke vs Runspace and Pipeline

      RunspaceInvoke实例封装了Runspace和Pipeline类对象的基本功能,简化了许多工作,比如管道创建,I/O管理等。

      RunspaceInvoke使用起来很简单,但是这样做是有代价的,即不能灵活使用Runspace和Pipeline中的API函数。如果仅仅想执行一条命令,并同步获得输出结果,那么RunspaceInvoke是一个很好的选择。否则,建议还是使用Runspace和Pipeline组合。

1     class Program 2     { 3         static void Main(string[] args) 4         { 5             Runspace runspace = RunspaceFactory.CreateRunspace(); 6             runspace.Open(); 7             Pipeline pipeline = runspace.CreatePipeline("calc"); 8             pipeline.Input.Close(); 9             pipeline.Invoke();10         }11     }

      

       管道中的输入,输出和错误

       Pipeline只能处理输入流,输出流,错误流对象。Pipeline.Invoke方法执行之后,返回值类型是Collection<PSObject>

1  class Program 2     { 3         static void Main(string[] args) 4         { 5             Runspace runspace = RunspaceFactory.CreateRunspace(); 6             runspace.Open(); 7  8             Pipeline pipeline = runspace.CreatePipeline("$input | sort-object"); 9             int[] numbers = { 3, 2, 1 };10             pipeline.Input.Write(numbers, true);11 12             Collection
results = null;13 try14 {15 results = pipeline.Invoke();16 }17 catch (RuntimeException ex)18 {19 Console.WriteLine("Exception during Invoke(): {0}, {1}",ex.GetType().Name, ex.Message);20 return;21 }22 foreach (PSObject item in results)23 {24 Console.WriteLine("Result is : {0} ",item.BaseObject);25 }26 }27 }

       

       管道对象的错误管道返回的错误都打包在一个ErrorRecord实例中,ErrorRecord对象包含了丰富的信息。

1  class Program 2     { 3         static void Main(string[] args) 4         { 5             Runspace runspace = RunspaceFactory.CreateRunspace(); 6             runspace.Open(); 7  8             Pipeline pipeline = runspace.CreatePipeline("get-childitem hklm:\\"); 9             pipeline.Invoke();10 11             while (!pipeline.Error.EndOfPipeline)12             {13                 Console.WriteLine("Error : {0}", pipeline.Error.Read());14             }15         }16     }

 

       PSObject对象

       PSObject是PowerShell脚本语言访问各种对象的接口,为.Net开发人员提供了标准的抽象。

       构造PSObject对象有三种方法:

       1.PSObject(object):公开了原对象的方法和属性

       2.PSObject():简单空对象,没什么功能。目的是允许自定义新的方法和属性(扩展型成员),并添加到PSObject中

       3.PSObejct.AsPSObject(object):这是Windows PowerShell内部最常用的创建PSObject对象的方法。首先检查object是否是PSObject对象,如果是,就返回改对象,否则调用1的构造函数。

       注意:object不能为null。

       

       ImmediateBaseObject属性和BaseObject属性

       这两个属性,对于管道输出对象的内部属性访问,起到很重要的作用。

       BaseObject:该属性返回被PSObject封装的对象。如果封装的对象也是一个PSObject对象的话,则返回该对象的基类对象,直至找到一个非PSObject的对象为止。本属性确保您可以找到被封装起来的CLR对象。

       ImmediateBaseObject:该属性返回被PSObject封装的对象,即使该封装对象是一个PSObject对象,也返回该对象。这个属性只返回继承关系上最近的对象。

 

1         static void Main(string[] args) 2         { 3             DateTime date = new DateTime(2014,5,11); 4             PSObject psObj1 = new PSObject(date); 5             PSObject psObj2 = new PSObject(psObj1); 6  7             Object obj = psObj2.ImmediateBaseObject; 8             Console.WriteLine(obj.GetType().FullName); 9 10             obj = psObj2.BaseObject;11             Console.WriteLine(obj.GetType().FullName);12         }

 

转载于:https://www.cnblogs.com/ByronsHome/p/3721822.html

你可能感兴趣的文章
关于Cocos2d-x中背景音乐和音效的添加
查看>>
checkbox和文字对齐
查看>>
%s的用法
查看>>
java中==和equals
查看>>
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>
行为型模式:中介者模式
查看>>
How to Notify Command to evaluate in mvvmlight
查看>>
33. Search in Rotated Sorted Array
查看>>
461. Hamming Distance
查看>>
Python垃圾回收机制详解
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>