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.pswp.cn/news/378758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378758.shtml
英文地址,請注明出處:http://en.pswp.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…

js刪除mysql記錄_(DELETEUPDATE)修改、刪除數據記錄_MySQL

有時&#xff0c;希望除去某些記錄或更改它們的內容。DELETE 和 UPDATE 語句令我們能做到這一點。用update修改記錄UPDATE tbl_name SET 要更改的列WHERE 要更新的記錄這里的 WHERE 子句是可選的&#xff0c;因此如果不指定的話&#xff0c;表中的每個記錄都被更新。例如&#…

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…

UIImage 壓縮

1.改變圖片大小 -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {// Create a graphics image contextUIGraphicsBeginImageContext(newSize);// Tell the old image to draw in this new context, with the desired// new size[image drawInRect:CG…

06-對圖像進行腐蝕操作

形態學中的腐蝕操作一般處理的圖像數據為二值的 cv2.erode(img,kernel,iterations 1) kernel表示拿多大的卷積核去腐蝕 iterations表示迭代次數 可以將一些帶有毛毛的圖像去毛毛化 原圖 import cv2 import numpy as npdef show_photo(name,picture):cv2.imshow(name,picture)…

Java BufferedReader skip()方法與示例

BufferedReader類skip()方法 (BufferedReader Class skip() method) skip() method is available in java.io package. skip()方法在java.io包中可用。 skip() method is used to skip the given number of bytes of characters (n_bytes_of_char) from this BufferedReader. s…

mysql gtid binlog_MySQL之-四步實現BinLog Replication升級為GTIDs Replication的代碼實例

1、將Master和Slave服務器都設置為read-onlymysql>SET global.read_onlyON;2、將Master與Slave服務器都停下來service mysql stop3、開啟GTIDs開啟GTIDs需要在master和slave服務器上都配置gtid-mode,log-bin,log-slave-updates,enforce-gtid-consistency(在MySQL 5.6.9之前是…

【記】瑣碎

1.GIF載入問題:http://www.cnblogs.com/Lewis/archive/2011/01/17/1937066.html 2.正則分段數字&#xff1a; "12345678945612456".replace(new RegExp((\\d)(?(\\d{3})$),ig),"$1,") 其中用到了正則的后則判斷? 3.給legend設定寬度 發現IE下可以 火狐下…

spring對事務的控制 AOP

我解釋一下(* com.evan.crm.service.*.*(..))中幾個通配符的含義&#xff1a; |第一個 * —— 通配 任意返回值類型| |第二個 * —— 通配 包com.evan.crm.service下的任意class| |第三個 * —— 通配 包com.evan.crm.service下的任意class的任意方法| |第四個 .. —— 通配 方…

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;腐蝕去毛…

Java LocalDate類| parse()方法與示例

LocalDate類parse()方法 (LocalDate Class parse() method) Syntax: 句法&#xff1a; public static LocalDate parse(CharSequence c_seq);public static LocalDate parse(CharSequence c_seq, DateTimeFormatter fmtr);parse() method is available in java.time package. …

Xhtml學習筆記

1. XHTML 是什么&#xff1f; XHTML 指可擴展超文本標簽語言&#xff08;EXtensible HyperText Markup Language&#xff09;。 XHTML 的目標是取代 HTML。 XHTML 與 HTML 4.01 幾乎是相同的。 XHTML 是更嚴格更純凈的 HTML 版本。 XHTML 是作為一種 XML 應用被重新定義的 HTML…

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…

Storm資料匯總

一、Storm集群安裝部署 網上關于storm集群部署都大同小異。 Storm下載地址&#xff1a;http://storm-project.net Storm項目地址&#xff1a;https://github.com/nathanmarz/storm 目前的版本不支持ZooKeeper3.4.5版本&#xff0c;而支持ZooKeeper3.3.3版本。 我當時沒注意這…

getlong_Java即時類| 帶示例的getLong()方法

getlong即時類getLong()方法 (Instant Class getLong() method) getLong() method is available in java.time package. getLong()方法在java.time包中可用。 getLong() method is used to get the value as long for the given temporal field from this Instant. getLong()方…

python作品闡述_Python網絡編程基礎的作品鑒賞-

Python網絡編程基礎的作品鑒賞Python網絡編佳入門圖書&#xff01;175個完整&#xff0c;實踐出真知&#xff0c;SocketsDNS、Web Service、FTP、Email、SMTP、POP、IMAP、SocketServe、CGI、XML、Forking、數據庫客戶端、多線程、異步通信……完整涵蓋網絡編程的方方面面“這可…

09-梯度運算

梯度運算膨脹操作-腐蝕操作&#xff0c;這里的-操作是圖像的減法&#xff0c;可不是簡單的加減乘除運算 為了更加形象生動&#xff0c;先將膨脹和腐蝕操作的結果進行合并展示&#xff0c;然后再與梯度運算進行比較 cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel) 第一個參數…