PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作

哈哈,昨天弄了个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                      
-------- -------- ----                                     --------                      
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键没有很好的支持,再次就是贴代码不是很方便,需要改进。

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

 

待续………..

转载于:https://www.cnblogs.com/TNSSTAR/archive/2013/03/13/2957381.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05-图像的平滑处理(不同的滤波操作)

对图像进行平滑处理实则就是对图像进行滤波操作罢了 每张图片都有若干个像素点所构成&#xff0c;滤波操作上就是将照片上的某些部分像素点进行修改从而达到平滑的效果 先展示一下原图 import cv2 img cv2.imread(E:\Jupyter_workspace\study\data/test1.png)cv2.imshow(te…

C++设计模式之Abstract Factory模式

一、功能   提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 二、结构图类厂最基本的结构示意图如下&#xff1a; 在实际应用中&#xff0c;类厂模式可以扩充到很复杂的情况&#xff0c;如下图所示&#xff1a; 三、优缺点 优点&#xff1…

数字图像处理小练习存档1

小练习的题目&#xff1a; 1、读取一张图&#xff0c;分解RGB三个通道 /************练习1**********************/ int main() {Mat img1 imread("D:\\opencv_picture_test\\miku2.jpg",2|4); //灰度图if (img1.empty()){printf("Could not find the imag…

06-对图像进行腐蚀操作

形态学中的腐蚀操作一般处理的图像数据为二值的 cv2.erode(img,kernel,iterations 1) kernel表示拿多大的卷积核去腐蚀 iterations表示迭代次数 可以将一些带有毛毛的图像去毛毛化 原图 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)…

Opencv实现利用滑动条来调整阈值

#include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std; #define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏 //*--------------------------【练习】利用滑动条来调整阈值-----------------------------…

07-对图像进行膨胀操作

形态学中的膨胀操作即让照片变得更大&#xff0c;与腐蚀操作互为逆运算 cv2.dilate(erosion,kernel,iterations 1) 第一个参数&#xff1a;图像对象名称 第二个参数&#xff1a;卷积核的大小 第三个参数&#xff1a;迭代次数 此时就可与腐蚀操作进行相结合&#xff0c;腐蚀去毛…

08-开运算和闭运算

开运算和闭运算实则就是将腐蚀操作和膨胀操作结合而已&#xff0c;也就是个先后循序罢了 开运算&#xff1a;先腐蚀再膨胀 闭运算&#xff1a;先膨胀再腐蚀 cv2.morphologyEx(img_open,cv2.MORPH_OPEN,kernel) cv2.morphologyEx(img_close,cv2.MORPH_CLOSE,kernel) 第一个参数…

连通域标记——实现硬币自动计件

前言 在自动计算图像中有几枚硬币的任务中&#xff0c;分离出前景和背景后是否就可以马上实现自动计件&#xff0c;如果可以&#xff0c;如何实现&#xff1f;如果不可以&#xff0c;为什么&#xff1f; 答案是否定的。二值化之后我们的得到的只是前景总像素的多少&#xff0c…

09-梯度运算

梯度运算膨胀操作-腐蚀操作&#xff0c;这里的-操作是图像的减法&#xff0c;可不是简单的加减乘除运算 为了更加形象生动&#xff0c;先将膨胀和腐蚀操作的结果进行合并展示&#xff0c;然后再与梯度运算进行比较 cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel) 第一个参数…

Unity-Shader-渲染队列

Unity-Shader-渲染队列 渲染简介Unity中的几种渲染队列Background (1000)最早被渲染的物体的队列。Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染&#xff0c;也就是Unity Shader中默认的渲染队列。AlphaTest (2450) 有透明通道&#xff0c;需要进…

形态学操作——腐蚀与膨胀

预备知识 结构元&#xff08;SE&#xff09; 1、结构元的中心一般来说是放在其重心位置处&#xff0c;但原则上原点的选择是依赖于你要解决的问题的。 2、对图像操作时&#xff0c;我们要求结构元是矩形阵列。&#xff08;在结构元的基础上添加较少的背景元素实现&#xff09…

10-礼帽与黑帽操作

cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) 第一个参数&#xff1a;图像对象名称 第二个参数&#xff1a;运算类型TOPHAT为礼帽运算 第三个参数&#xff1a;卷积核的大小 礼帽运算&#xff1a;原始的输入-开运算&#xff08;先腐蚀再膨胀&#xff09; 原始带刺儿&#xff…

形态学操作——开闭运算、顶帽底(黑)帽变换

膨胀和腐蚀运算的问题&#xff1a; 边缘形状发生了变化&#xff0c;膨胀发生了扩张&#xff0c;腐蚀发生了收缩 目标物体变形&#xff0c;对识别时的特征提取会造成影响 解决方法&#xff1a; 开操作: B对A的开操作就是先B对A腐蚀&#xff0c;紧接着用B对结果进行膨胀 先腐…

11-图像梯度-Sobel算子

图像梯度是指图像某像素在x和y两个方向上的变化率&#xff08;与相邻像素比较&#xff09;&#xff0c;是一个二维向量&#xff0c;由2个分量组成&#xff0c;X轴的变化、Y轴的变化 。 其中X轴的变化是指当前像素右侧&#xff08;X加1&#xff09;的像素值减去当前像素左侧&…

形态学操作——击中击不中变换

操作目的 HitMiss变换是形态检测的一个工具&#xff0c;通过定义形状模板可以在图像中获取同一形状物体的位置坐标。 算法讲解 1、用击中结构去腐蚀原始图像得到击中结果X&#xff08;这个过程可以理解为在原始图像中寻找和击中结构完全匹配的模块&#xff0c;匹配上了之后&…

12-图像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一个参数&#xff1a;当前的图像对象名称 第二个参数&#xff1a;当前图像的深度&#xff0c;通常情况下指定为-1&#xff0c;表示输出和输入的深度是一样的&#xff1b;cv2.CV_64F可以存6字节的大小&#xff0c;为了方便后面的取…

Opencv——图像金字塔与图像尺寸缩放

主要讲解 1、resize()函数调用 函数定义&#xff1a; 调用方式&#xff1a; resize(srcImage, dstImage, Size(64, 128)); //对图片进行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6个参数的含义&#xff1a; INTER_NEAREST:最邻近插值 (放大好用) INTER_ARE…

13-Canny边缘检测

Canny边缘检测主要思路步骤如下&#xff1a; 1&#xff0c;使用高斯滤波器&#xff0c;以平滑图像&#xff0c;滤除噪声 2&#xff0c;计算图像中每个像素点的梯度强度和方向 3&#xff0c;应用非极大值抑制&#xff0c;以消除边缘检测带来的杂散响应 4&#xff0c;应用双阈值检…

微机原理——移位指令

例题 思路 选择移位语句&#xff0c;右移&#xff0c;将AL移出的送入DX左端&#xff0c;将BL移出的送入DX左端。循环八次 MOV AL,01100101B; MOV BL,11011010B; XOR DX,DX;两个值相同&#xff0c;异或结果为0。等效&#xff1a;MOV DX,0 MOV CX,8;count L1: SHR AL,1;逻辑右…

14-图像金字塔

由第一个图可知&#xff0c;图像金字塔这无非就是对图像进行放大和缩小罢了 1&#xff0c;高斯金字塔 向下采样方法(缩小)&#xff0c;越采样越小&#xff0c;即从金字塔底部向上采样 cv2.pyrDown(img) 向上采样方法(放大)&#xff0c;越采样越大&#xff0c;即从金字塔顶…