哈哈,昨天弄了个ubuntu 11.10在虚拟机上运行,发现11.10界面非常绚丽,但是其需要的系统资源非常多,我虚拟机设定内存为512M,1个CPU4个核心,
进入以后发现根本动不了,因此今天我就下载了一个Fedora Core 4的版本来用,发现还是Redhat的东西熟悉啊。下面上张虚拟机的图片大家看看。
上次我们说到了,wmi对象和com组件,今天我们继续来看PS中对象的相关内容。主要说一下静态对象和对象的基本操作。
一、静态对象
在PS中有一类特殊的对象,我们不能同过这些类创建新的对象,这些类是不能更改状态的方法和属性的引用库。无法创建这些类,仅可以使用它。因为
不能创建、销毁或更改这些类和方法,因此也将这些类叫做静态类。
1、1 system.environment 静态类
在PS中经常用到的静态类有system.environmet类。例如我们可以在PS中查看这些类:
Exp:在PS中查看system.environment类
PS C:\Users\vol_20120330> [system.environment]IsPublic IsSerial Name BaseType |
如上图所示,我们查看了system.environment,类的信息,可以看出来system.environment,继承于system.object类。 这里还有一点需要注意的
那就是引用静态类的时候,要用“[]”,表示引用的是静态类。
1、2 利用get-member函数是static参数获取静态类成员
我们可以通过get-member命令来查看静态类的成员。
Exp:查看静态类的成员
PS C:\Users\vol_20120330> [system.environment] | get-member TypeName: System.RuntimeType Name MemberType Definition |
可以发现,这个通过get-member获取的类型是:system.runtimetype;与原来的类型不一致,这是为什么呢? 前面说过了,静态类与其他的类在行为和
方式上不同。在使用get-member命令获取静态类的信息的时候,需要附加-static参数。
Exp:
PS C:\Users\vol_20120330> [system.environment] | get-member -static TypeName: System.Environment Name MemberType Definition |
可以发现这里对象的类型变成了system.environmet. 还可以通过指定membertype参数来分类获取静态类的属性和方法。
命令分别为:
[system.environment] | get-member -membertype property # 获取属性
[system.environment] | get-member -membertype method # 获取方法
我们试一下是否可以用new-object创建静态对象。
Exp:
PS C:\Users\vol_20120330> new-object system.environment |
可以发现,静态类没有构造函数,因此静态函数仅仅是一个库,可以使用的库,不能通过它来派生新的的类和构造类的对象。
1、3 引用静态类的成员
在PS中通过全局引用符 " :: "来引用静态类的成员。
Exp:
PS C:\Users\vol_20120330> [system.environment]::commandline |
如图所示,我们利用commandline获取了PS的安装路径。还可以通过OsVersion属性获取系统的版本信息
Exp:
PS C:\Users\vol_20120330> [system.environment]::osversion Platform ServicePack Version VersionString |
1、4 system.math 类进行数学运算
在PS中还提供了另外一个静态类, system.math. 同样可以通过get-member命令获取system的成员。
Exp:
PS C:\Users\vol_20120330> [system.math] | get-member -static -membertype method TypeName: System.Math Name MemberType Definition |
这些方法可以实现一定的数学运算功能,上面的帮助信息已经给出了函数的定义。举个例子:
Abs Method static System.SByte Abs(System.SByte value), static System....
上面的命令可以获取一个实数的绝对值,其用法如下: [system.math]::abs(x);
2、 管道对象管理
执行cmdlet时,在管道中传递的对象比我们实际需要的要多,而且有时候我们并不需要关注这么多的对象,那么我们是否可以对这些对象进行一下
筛选呢?
在PS中我们可以使用where-object命令进行筛选。
2、1 where-object命令
利用where-object命令可以逐一的测试管道中传递的对象,并将符合筛选条件的对象在管道中进行传递,而将不符合条件的对象从管道中删除;实现
这一功能需要使用where-object的FilterScript表达式特性。
FiltrScript表达式为返回值为true或者false的脚本块; 脚本块是有{} 括起来的一个或者多个PS命令,这些脚本简单而功能强大。使用这些脚本需要
使用PS提供的另外一个特性:比较运算符。
在PS中,比较运算符不区分大小写,因为在PS中 小于(<)、大于(>) 、等于(=)因为有特殊的用途,因此用字母token表示。基本的运算符有:
比较运算符 含义 实例(返回TRUE)
-eq 等于 1 –eq 1
-ne 不等于 1 –ne 2
-lt 小于 1 –lt 2
-le 小于或等于 1 –le 2
-gt 大于 2 –gt 1
-ge 大于等于 2 –ge 1
-like 类似需要用 "file.doc" -like "f*.do?"
文本通配符
-notlike 不类似 "file.doc" -notlike "p*.doc"
-contains 包含 1,2,3 -contains 1
-notcontains 不包含 1,2,3 -notcontains 4
在PS中为了遍历管道中的对象,提供了一个预置的变量: $_ ;通过这个对象可以遍历管道中传递的对象。
Exp: 利用FilterScript进行筛选
PS C:\Users\vol_20120330> 1,2,3,4,5 | where-object -filterscript {$_ -lt 3} |
我们还可以根据对象的属性进行筛选。例如我们要查看WMI中win32_systemdriver类,在系统中可能有几百个这样的系统驱动程序,而我们可能
只对其中的一部分感兴趣,这样我们就可以通过FilterScript来获取我们感兴趣的驱动类。
Exp: 利用FilterScript表达式获取win32_systemdriver中正在运行的类
PS C:\Users\vol_20120330> get-wmiobject -class win32_systemdriver | where-object -filterscript {$_.state -eq "running"} DisplayName : Microsoft ACPI Driver DisplayName : Ancillary Function Driver for Winsock DisplayName : amdxata DisplayName : IDE 通道 |
我们还可以通过这样的方式,获取启动模式为手动的驱动程序:
PS C:\Users\vol_20120330> get-wmiobject -class win32_systemdriver | where-object -filterscript {$_.startmode -eq "manual"} DisplayName : 1394 OHCI Compliant Host Controller DisplayName : ACPI Power Meter Driver DisplayName : adp94xx DisplayName : adpahci |
如果我们需要同时获取“正在运行”而且是启动模式为“手动启动”的驱动程序我们怎么办呢?方法1是组合管道命令,如下所示:
PS C:\Users\vol_20120330> get-wmiobject -class win32_systemdriver | where-object -filterscript {$_.startmode -eq "manual"} | where-object -filterscript {$_.startmode -eq "manual"} DisplayName : 1394 OHCI Compliant Host Controller DisplayName : ACPI Power Meter Driver DisplayName : adp94xx |
这样做的话,输入的命令太长,在Ps中还提供了一套逻辑运算的机制,使用逻辑运算机制就可以使前面的命令变短.
Exp:
PS C:\Users\vol_20120330> get-wmiobject -class win32_systemdriver | where-object -filterscript {$_.startmode -eq "manual" -and $_.startmode -eq "manual"} DisplayName : 1394 OHCI Compliant Host Controller DisplayName : ACPI Power Meter Driver DisplayName : adp94xx |
PS中的逻辑运算符有: -and、 -or、-not 、!; 分别是与、或、非(其中 ! 也是表示非)。
三、小结
在PS中通过使用这些特性,就可以编写复杂的管理程序了。
第一次用LiveWrite,感觉与网页的方式区别挺大的,首先是Tab键没有很好的支持,再次就是贴代码不是很方便,需要改进。
而且排好的格式,传上来后有点不一致。
待续………..