PowerShell_零基础自学课程_9_高级主题:静态类和类的操作
2012-05-15 23:17
573 查看
哈哈,昨天弄了个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类
如上图所示,我们查看了system.environment,类的信息,可以看出来system.environment,继承于system.object类。
这里还有一点需要注意的
那就是引用静态类的时候,要用“[]”,表示引用的是静态类。
1、2 利用get-member函数是static参数获取静态类成员
我们可以通过get-member命令来查看静态类的成员。
Exp:查看静态类的成员
可以发现,这个通过get-member获取的类型是:system.runtimetype;与原来的类型不一致,这是为什么呢?
前面说过了,静态类与其他的类在行为和
方式上不同。在使用get-member命令获取静态类的信息的时候,需要附加-static参数。
Exp:
可以发现这里对象的类型变成了system.environmet.
还可以通过指定membertype参数来分类获取静态类的属性和方法。
命令分别为:
[system.environment] | get-member -membertype property #
获取属性
[system.environment] | get-member -membertype method #
获取方法
我们试一下是否可以用new-object创建静态对象。
Exp:
可以发现,静态类没有构造函数,因此静态函数仅仅是一个库,可以使用的库,不能通过它来派生新的的类和构造类的对象。
1、3 引用静态类的成员
在PS中通过全局引用符 " :: "来引用静态类的成员。
Exp:
如图所示,我们利用commandline获取了PS的安装路径。还可以通过OsVersion属性获取系统的版本信息
Exp:
1、4 system.math 类进行数学运算
在PS中还提供了另外一个静态类, system.math. 同样可以通过get-member命令获取system的成员。
Exp:
这些方法可以实现一定的数学运算功能,上面的帮助信息已经给出了函数的定义。举个例子:
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进行筛选
我们还可以根据对象的属性进行筛选。例如我们要查看WMI中win32_systemdriver类,在系统中可能有几百个这样的系统驱动程序,而我们可能
只对其中的一部分感兴趣,这样我们就可以通过FilterScript来获取我们感兴趣的驱动类。
Exp: 利用FilterScript表达式获取win32_systemdriver中正在运行的类
我们还可以通过这样的方式,获取启动模式为手动的驱动程序:
如果我们需要同时获取“正在运行”而且是启动模式为“手动启动”的驱动程序我们怎么办呢?方法1是组合管道命令,如下所示:
这样做的话,输入的命令太长,在Ps中还提供了一套逻辑运算的机制,使用逻辑运算机制就可以使前面的命令变短.
Exp:
PS中的逻辑运算符有: -and、 -or、-not 、!; 分别是与、或、非(其中 ! 也是表示非)。
三、小结
在PS中通过使用这些特性,就可以编写复杂的管理程序了。
第一次用LiveWrite,感觉与网页的方式区别挺大的,首先是Tab键没有很好的支持,再次就是贴代码不是很方便,需要改进。
而且排好的格式,传上来后有点不一致。
待续………..
进入以后发现根本动不了,因此今天我就下载了一个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 -------- -------- ---- -------- True False 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 ---- ---------- ---------- Clone Method System.Object Clone() Equals Method bool Equals(System.Object obj), bool Equals(... FindInterfaces Method type[] FindInterfaces(System.Reflection.Type... |
前面说过了,静态类与其他的类在行为和
方式上不同。在使用get-member命令获取静态类的信息的时候,需要附加-static参数。
Exp:
PS C:\Users\vol_20120330> [system.environment] | get-member -static TypeName: System.Environment Name MemberType Definition ---- ---------- ---------- Equals Method static bool Equals(System.Object objA, System.Ob... Exit Method static System.Void Exit(int exitCode) ExpandEnvironmentVariables Method static string ExpandEnvironmentVariables(string ... FailFast Method static System.Void FailFast(string message) GetCommandLineArgs Method static string[] GetCommandLineArgs() GetEnvironmentVariable Method static string GetEnvironmentVariable(string vari... GetEnvironmentVariables Method static System.Collections.IDictionary GetEnviron... GetFolderPath Method static string GetFolderPath(System.Environment+S... GetLogicalDrives Method static string[] GetLogicalDrives() ReferenceEquals Method static bool ReferenceEquals(System.Object objA, ... SetEnvironmentVariable Method static System.Void SetEnvironmentVariable(string... CommandLine Property static System.String CommandLine {get;} CurrentDirectory Property static System.String CurrentDirectory {get;set;} ExitCode Property static System.Int32 ExitCode {get;set;} HasShutdownStarted Property static System.Boolean HasShutdownStarted {get;} MachineName Property static System.String MachineName {get;} NewLine Property static System.String NewLine {get;} OSVersion Property static System.OperatingSystem OSVersion {g |
还可以通过指定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 New-Object : 找不到构造函数。无法找到适合类型 system.environment 的构造函数。 所在位置 行:1 字符: 11 + new-object <<<< system.environment + CategoryInfo : ObjectNotFound: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.Ne wObjectCommand |
1、3 引用静态类的成员
在PS中通过全局引用符 " :: "来引用静态类的成员。
Exp:
PS C:\Users\vol_20120330> [system.environment]::commandline "C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell_ISE.exe" |
Exp:
PS C:\Users\vol_20120330> [system.environment]::osversion Platform ServicePack Version VersionString -------- ----------- ------- ------------- Win32NT Service Pack 1 6.1.7601.65536 Microsoft Windows ... |
在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.... Acos Method static double Acos(double d) Asin Method static double Asin(double d) Atan Method static double Atan(double d) Atan2 Method static double Atan2(double y, double x) BigMul Method static long BigMul(int a, int b) Ceiling Method static decimal Ceiling(decimal d), static double Ceiling(do... Cos Method static double Cos(double d) Cosh Method static double Cosh(double value) DivRem Method static int DivRem(int a, int b, System.Int32&, mscorlib, Ve... Equals Method static bool Equals(System.Object objA, System.Object objB) Exp Method static double Exp(double d) Floor Method static decimal Floor(decimal d), static double Floor(double d) IEEERemainder Method static double IEEERemainder(double x, double y) Log Method static double Log(double d), static double Log(double a, do... Log10 Method static double Log10(double d) Max Method static System.SByte Max(System.SByte val1, System.SByte val... Min Method static System.SByte Min(System.SByte val1, System.SByte val... Pow Method static double Pow(double x, double y) ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Obje... Round Method static double Round(double a), static double Round(double v... Sign Method static int Sign(System.SByte value), static int Sign(System... Sin Method static double Sin(double a) Sinh Method static double Sinh(double value) Sqrt Method static double Sqrt(double d) Tan Method static double Tan(double a) Tanh Method static double Tanh(double value) Truncate Method static decimal Truncate(decimal d), static double Truncate(... |
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} 1 2 |
只对其中的一部分感兴趣,这样我们就可以通过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 Name : ACPI State : Running Status : OK Started : True DisplayName : Ancillary Function Driver for Winsock Name : AFD State : Running Status : OK Started : True DisplayName : amdxata Name : amdxata State : Running Status : OK Started : True DisplayName : IDE 通道 Name : atapi State : Running Status : OK Started : True |
PS C:\Users\vol_20120330> get-wmiobject -class win32_systemdriver | where-object -filterscript {$_.startmode -eq "manual"} DisplayName : 1394 OHCI Compliant Host Controller Name : 1394ohci State : Stopped Status : OK Started : False DisplayName : ACPI Power Meter Driver Name : AcpiPmi State : Stopped Status : OK Started : False DisplayName : adp94xx Name : adp94xx State : Stopped Status : OK Started : False DisplayName : adpahci Name : adpahci State : Stopped Status : OK Started : False |
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 Name : 1394ohci State : Stopped Status : OK Started : False DisplayName : ACPI Power Meter Driver Name : AcpiPmi State : Stopped Status : OK Started : False DisplayName : adp94xx Name : adp94xx State : Stopped Status : OK Started : False |
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 Name : 1394ohci State : Stopped Status : OK Started : False DisplayName : ACPI Power Meter Driver Name : AcpiPmi State : Stopped Status : OK Started : False DisplayName : adp94xx Name : adp94xx State : Stopped Status : OK Started : False |
三、小结
在PS中通过使用这些特性,就可以编写复杂的管理程序了。
第一次用LiveWrite,感觉与网页的方式区别挺大的,首先是Tab键没有很好的支持,再次就是贴代码不是很方便,需要改进。
而且排好的格式,传上来后有点不一致。
待续………..
相关文章推荐
- PowerShell_零基础自学课程_9_高级主题:静态类和类的操作
- PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件
- PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件
- PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输
- PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本
- PowerShell_零基础自学课程_7_Powershell中重定向机制、目录和文件管理
- PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输
- RHCE课程-RH033Linux基础笔记七之文件的搜索及高级文件权限和用户、组操作 推荐
- PowerShell_零基础自学课程_1_初识PowerShell
- PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本
- PowerShell_零基础自学课程_1_初识PowerShell
- PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
- PowerShell_零基础自学课程_7_Powershell中重定向机制、目录和文件管理
- PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell
- PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell
- RHCE课程-RH033Linux基础笔记七之文件的搜索及高级文件权限和用户、组操作
- PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
- PowerShell_零基础自学课程_1_初识PowerShell
- PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell
- PowerShell_零基础自学课程_1_初识PowerShell