购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

在PowerShell中, 一切皆对象 。用技术术语来说, 对象 是某个模板的单个实例。这个模板称为 ,指明了对象包含的东西。对象所属的类决定其有哪些 方法 可用,即在对象上可以执行什么操作。换句话说,方法就是对象可以做的事情。例如,列表对象可能会有一个 sort() 方法,调用该方法可对列表进行排序。同时,对象所属的类还决定了对象的 属性 ,即对象的变量。可以将属性理解为与对象有关的全部数据。对列表对象来说,可能会有 length 属性,以存储列表中的元素数量。有时类会为对象的属性提供默认值,但更多时候需要自己动手为对象的属性提供值。

前面一段话十分抽象,接下来以汽车为例进行说明。在设计阶段,汽车只是一个计划。这个计划(或称模板)定义了汽车的外观、使用何种发动机、使用何种底盘,等等。这个计划还列出了汽车可以做哪些事,比如前进、后退,以及开关天窗。可以将这个计划理解为汽车所属的类。

我们根据这个类来制造汽车,为汽车配备全部属性,并添加各种方法。同一个型号的汽车可以是蓝色的,也可以是红色的,还可以使用不同的变速器。这些都是具体某一辆汽车的属性。同样,每辆汽车都可以前进、后退,而且开关天窗的方法都一样。这些操作是汽车的方法。

基本了解对象后,我们在PowerShell的语境下来使用和处理对象。

首先,为了一探究竟,了解PowerShell对象的方方面面,需要创建一个简单的对象。代码清单2-17创建了一个简单的字符串对象 $color

代码清单2-17 创建字符串对象

PS> $color = 'red'
PS> $color
red

注意,调用 $color 得到的只是该变量的值。但变量是对象,除了值以外,还有更多信息。变量也有属性。

如果想查看对象的属性,可以使用 Select-Object 命令,指定 Property 参数。将 Property 参数的值设为一个星号,让PowerShell返回找到的全部属性,如代码清单2-18所示。

代码清单2-18 查看对象的属性

PS> Select-Object -InputObject $color -Property *

Length
------
     3

可以看到, $color 字符串只有一个名为 Length 的属性。

可以使用 点记法 直接引用 Length 属性:先输入对象的名称,后跟一个点号,然后输入想访问的属性名称,如代码清单2-19所示。

代码清单2-19 使用点记法查看对象的属性

PS> $color.Length
3

一段时间后你便会习惯这种引用对象属性的方式。

通过 Select-Object ,我们发现 $color 字符串只有一个属性。但别忘了,有些对象可能还有方法。如果想查看这个字符串对象的所有方法和属性,可以使用 Get-Member cmdlet,如代码清单2-20所示。在很长一段时间内,我们将经常使用这个cmdlet。使用它可以快速列出某个对象的属性和方法,二者合称对象的 成员

代码清单2-20 Get-Member 查看对象的属性和方法

PS> Get-Member -InputObject $color

    TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------
Clone            Method                System.Object Clone(), System.Object ICloneable.Clone()
CompareTo        Method                int CompareTo(System.Object value),
                                       int CompareTo(string strB), int IComparab...
Contains         Method                bool Contains(string value)
CopyTo           Method                void CopyTo(int sourceIndex, char[] destination,
                                       int destinationIndex, int co...
EndsWith         Method                bool EndsWith(string value),
                                       bool EndsWith(string value, System.StringCompari...
Equals           Method                bool Equals(System.Object obj),
                                       bool Equals(string value), bool Equals(string...
--snip--
Length           Property              int Length {get;}

真不敢想象,一个简单的字符串对象竟然有这么多方法。字符串的成员有很多,这里只展示了其中一部分。一个对象有多少方法和属性取决于该对象所属的类。

也可以用点记法来引用方法。然而,与属性不同,方法名称后面始终有一对圆括号,并可以接受一个或多个参数。

假如想从 $color 变量中删除一个字符。你可以使用 Remove() 方法从字符串中删除字符。下面用代码清单2-21中的代码单独提取出 $color Remove() 方法。

代码清单2-21 查看字符串的 Remove() 方法

PS> Get-Member -InputObject $color -Name Remove
Name   MemberType Definition
----   ---------- ----------
Remove Method     string Remove(int startIndex, int count), string Remove(int startIndex)

可以看到,该方法有两个定义。这意味着该方法有两种用法:同时提供 startIndex 参数和 count 参数,或者只提供 startIndex 参数。

如果想删除 $color 中的第二个字符,则需要指定从哪个位置开始,我们称之为 索引 。索引从0开始,因此第一个字母的索引是0,第二个字母的索引是1,以此类推。除了索引,还可以提供想删除的字符数量,两个参数之间用逗号隔开,如代码清单2-22所示。

代码清单2-22 调用方法

PS> $color.Remove(1,1)
Rd
PS> $color
red

这里索引是1,即让PowerShell从字符串中的第二个字符开始删除字符。第二个参数告诉PowerShell,只删除一个字符。因此,得到的结果为 Rd 。但注意, Remove() 方法不会改变字符串变量的值。如果想保留修改结果,那么需要将 Remove() 方法的输出赋值给变量,如代码清单2-23所示。

代码清单2-23 捕获字符串上调用 Remove() 方法得到的输出

PS> $newColor = $color.Remove(1,1)
PS> $newColor
Rd

注意 如果想知道一个方法是返回一个对象(像 Remove() 方法那样)还是修改现有对象,可以查看方法的说明。从代码清单2-21可以看出, Remove() 方法的定义前面有个 string ,这表明该方法会返回一个新字符串。如果前面是 void ,则通常表示修改现有对象,详见第6章。

这几个示例使用的都是最简单的对象类型,即字符串。下一节将介绍几个较复杂的对象。 KJq9wyyS2/2n87fP4P4aOo6+rwaV9gVr/UZp/dVnFUF0dQ/3HRgtHfr0gZ6Q+vP4

点击中间区域
呼出菜单
上一章
目录
下一章
×