从零开始学PowerShell(9) 创建PowerShell对象

我们之前有一篇文章写过如何获取对象的信息,但是从没有说过如何创建一个PowerShell对象。正巧也看到很多刚学PowerShell的朋友问起这个问题,今天就来说一说如何创建PowerShell对象。
从抽象层面来说,在PowerShell里哪怕我们定义一个普通变量也已经是创建了一个对象。那么确切的说我们现在是想创建一个实例对象和COM对象。
在PowerShell里创建对象可以使用New-Object cmdlet来创建一个初始对象,要知道怎么用,还记得我们从零开始学PowerShell 系列开篇提到的吗?不知道怎么用就用Get-Help看看。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

可以从给出的使用语法看出,New-Object大致可以创建两种方式的对象,一种是基于.NET Framework的实例类对象,另一种则是基于COM对象的。所以,我们就分别来看看如何创建这两种对象。
.NET Framework我想不必多说,微软自家的大基石Windows类框架库,我们的PowerShell底层就是构建于此。所以PowerShell自然也能做到调用.NET Framework中的类库,而因为.NET提供了庞大的数据类库,所以我们就可以使用PowerShell去做到一些PowerShell目前还没有提供的功能。
比如我们想创建一个日期类库怎么做呢?可以像下面这样去新建一个日期实例对象。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

这里我们配合了使用了两个参数TypeNameArgumentListTypeName是用于指定你基于哪个.NET Framework来创建实例对象,而ArgumentList可以未必每次都指定,这取决于我们的类函数是否每次生成实例对象时对有必要传参数。
有人可能要问,你怎么知道要传哪些参数呢?那是因为我去微软的MSDN查DateTime Structure类的信息,DateTime的构造函数提供了好几种参数构造方法,于是我选择了新建实例对象时,顺便初始化,年月日时分秒数据对象。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

最后$DateTime就是所创建的对象了,我们输出这个对象可以看到我们之前传递的日期信息。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

不过,你是否还记得我们之前有篇文章提到如何获取对象里的信息吗?没错,就是使用Get-Membercmdlet来查看对象含有哪些数据信息。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

我们在这里发现有一个AddDays方法挺有意思,我们直接使用,并传入一个参数10看看。它可以很方便的让我们知道之前的日期往后推10天是什么日期。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

接下来要说的是以创建COM组件的方式创建一个对象,可能有人不是很清楚什么是COM组件,简单的说在早期各种产品,软件里有许许多多组件,但是很多功能组件安装卸载变的麻烦。为此就出现了COM组件,就像乐高积木一样,人们就可以开发COM组件像接口一样与各种组件按照需要组合成一个功能完善的软件。
下面我摘了一段百度百科给需要了解的人:

COM component(COM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。
创建COM实例对象和之前创建基于.NET Framework的方式基本差不多,我们来快速用基于COM组件的方式创建一个实例对象,这里我们只需要配合 COMObject参数指定专门的COM 对象(注:在我们创建新对象的时候TypeName参数是不能和COMObject同时混用的)。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

【从零开始学PowerShell(9) 创建PowerShell对象】我们用Get-Member查看对象信息后打算使用IsServiceRunning方法,这个方法是用来查看当前要查看的某个服务是否还在运行中。
从零开始学PowerShell(9) 创建PowerShell对象
文章图片

PowerShell的强大也正是因为构建于背后强大的类型模型框架,因此我们可以借助.NET Framework或者COM组件对象来完成PowerShell暂时还无法完成的功能。

    推荐阅读