上次我们说到了,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

如上图所示,我们查看了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                                    
----                           ---------- ----------                                    
Clone                          Method     System.Object Clone()                         
Equals                         Method     bool Equals(System.Object obj), bool Equals(...
FindInterfaces              Method     type[] FindInterfaces(System.Reflection.Type...

可以发现,这个通过get-member获取的类型是:system.runtimetype;与原来的类型不一致,这是为什么呢? 前面说过了,静态类与其他的类在行为和

方式上不同。在使用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

可以发现这里对象的类型变成了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
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"

如图所示,我们利用commandline获取了PS的安装路径。还可以通过OsVersion属性获取系统的版本信息

Exp:

PS C:\Users\vol_20120330> [system.environment]::osversion

Platform ServicePack            Version               VersionString       
              -------- -----------            -------               -------------       
               Win32NT Service Pack 1         6.1.7601.65536        Microsoft Windows ...

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....
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

我们还可以根据对象的属性进行筛选。例如我们要查看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
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

如果我们需要同时获取“正在运行”而且是启动模式为“手动启动”的驱动程序我们怎么办呢?方法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
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中还提供了一套逻辑运算的机制,使用逻辑运算机制就可以使前面的命令变短.

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中的逻辑运算符有:   -and、 -or、-not 、!; 分别是与、或、非(其中 ! 也是表示非)。

三、小结

在PS中通过使用这些特性,就可以编写复杂的管理程序了。

第一次用LiveWrite,感觉与网页的方式区别挺大的,首先是Tab键没有很好的支持,再次就是贴代码不是很方便,需要改进。

  而且排好的格式,传上来后有点不一致。

PowerShell_零基础自学课程_9_高级主题:静态类和类的操作的更多相关文章

  1. PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件

    本系列文章从最初的初识开始,基本上可以完成一些简单的系统管理了,为了更方便的管理系统,同时为了更好的发掘系统的性能,就需要用到系统提供 的一些高级特性,在Windows Server系列的OS中,如果 ...

  2. PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念

    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念 据我个人所知,windows下的cmd shell除了能够通过修改系统参数来对其中的环境变量 ...

  3. PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输

    前些文章陆续的说了一些关于这些主题,但是讨论的都不够深入,今天我们深入的了解一下获取帮助信息.管道以及格式化输出的内容. 一.获取帮助信息 在PS中获取帮助信息,最常用的有: -? .get-comm ...

  4. PowerShell_零基础自学课程_1_初识PowerShell

    欢迎转载本系列文章:转载请注明出处:www.cnblogs.com/volcanol 自从微软推出.Net以来,微软旗下的windows体系就发生了很大的变化,首先是操作系统的界面的变化,例如vist ...

  5. PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本

    微软在推出PS的同时,没有忘记其一贯的作风,什么东东都弄一个IDE环境,这不微软没有忘记给PS也来一个IDE的环境, 通过这个IDE环境,可以建立psl文件,可以调试psl文件. 1.IDE界面 我们 ...

  6. PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell

    上篇文章我说道,windows为了改变用户对其console界面的诟病,于是就从windows   vista开始,计划要改变这种局面,于是就有 了Powershell的出现. 1.兼容shell命令 ...

  7. 月薪12k的零基础自学前端必备手册

    随着互联网的深入发展,前端开发工程师一跃成为市场上非常抢手的人才.很多同学,包括以前做UI的.Java的.或者对于IT完全零基础的同学都想学习前端.下图是网上流传甚广的一张前端学习思维导图,很多初学者 ...

  8. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  9. java零基础自学网站分享

    俗话说工欲善其事,必先利其器,今天给大家分享一个java自学网站:how2j,这是一个有十年淘宝工作经验大牛的制作的网站,距离现在已经有三四年了,这个网站包含的知识非常的多,从基础的环境变量配置一直到 ...

随机推荐

  1. LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别

    LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径 ...

  2. Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法

    抛错: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document ...

  3. 关于bootstrap--表单(水平表单)

    在Bootstrap框架中要实现水平表单效果,必须满足以下两个条件:1.在<form>元素是使用类名“form-horizontal”.2.配合Bootstrap框架的网格系统.(网格布局 ...

  4. php字符串常用处理函数(数组的拆分、查找替换)

    //字符串常用函数    $a = "hello";    echo strlen($a); //输出字符串的长度        $b = "Hello";   ...

  5. APP常用模块

    2016年上半年 APICloud合作云服务商提供了各种类型模块多达45个 其中最新发布的重要模块有 美洽客服模块 亲加视频直播相关模块 保利威视视频播放器模块 苹果银联支付模块 贝宝支付模块 谷歌分 ...

  6. vmplayer中的fedora20无法进入图形界面

    新装了台fedora20的虚拟机,安装升级了一些东西后.启动时过了fedora的logo画面后就是黑屏. 也没提示不论什么错误,好在shell还能进去.查看/var/log/anaconda/sysl ...

  7. 字典树-百度之星-Xor Sum

    Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ...

  8. sql获取每门课程成绩最好的学生信息

    1.相关数据表 Score表 [User]表 SQL语句例如以下: --查询出各科成绩最好的学生信息 --自连接 --SELECT TOP 1 * FROM Score B WHERE B.Score ...

  9. 可失败构造器(Failable Initializers)

    Xcode6.1中Swift的最新版本是1.1,在该版本中引入了一个新的特性:可失败构造器.通过构造器初始化实际上是给class或struct的每一个存储属性(参数)提供初始值,进行对象实例化的过程. ...

  10. 为iPhone6设计自适应布局(二)

    Size Classes 自适应布局的布局约束自然是好东西,但也不是万能的,有时候我们也需要使用最基本的布局,所以使用size classes将它们两者结合起来才能碰撞出更有激情的火花. 引用我上篇译 ...