1. 程式人生 > >從零開始學PowerShell(9) 建立PowerShell物件

從零開始學PowerShell(9) 建立PowerShell物件

我們之前有一篇文章寫過如何獲取物件的資訊,但是從沒有說過如何建立一個PowerShell物件。正巧也看到很多剛學PowerShell的朋友問起這個問題,今天就來說一說如何建立PowerShell物件。

從抽象層面來說,在PowerShell裡哪怕我們定義一個普通變數也已經是建立了一個物件。那麼確切的說我們現在是想建立一個例項物件和COM物件。

在PowerShell裡建立物件可以使用New-Object cmdlet來建立一個初始物件,要知道怎麼用,還記得我們從零開始學PowerShell 系列開篇提到的嗎?不知道怎麼用就用Get-Help看看。
這裡寫圖片描述
可以從給出的使用語法看出,New-Object大致可以建立兩種方式的物件,一種是基於.NET Framework的例項類物件,另一種則是基於COM物件的。所以,我們就分別來看看如何建立這兩種物件。

.NET Framework我想不必多說,微軟自家的大基石Windows類框架庫,我們的PowerShell底層就是構建於此。所以PowerShell自然也能做到呼叫.NET Framework中的類庫,而因為.NET提供了龐大的資料類庫,所以我們就可以使用PowerShell去做到一些PowerShell目前還沒有提供的功能。

比如我們想建立一個日期類庫怎麼做呢?可以像下面這樣去新建一個日期例項物件。
這裡寫圖片描述
這裡我們配合了使用了兩個引數TypeNameArgumentListTypeName是用於指定你基於哪個.NET Framework來建立例項物件,而ArgumentList

可以未必每次都指定,這取決於我們的類函式是否每次生成例項物件時對有必要傳引數。

有人可能要問,你怎麼知道要傳哪些引數呢?那是因為我去微軟的MSDN查DateTime Structure類的資訊,DateTime的建構函式提供了好幾種引數構造方法,於是我選擇了新建例項物件時,順便初始化,年月日時分秒資料物件。
這裡寫圖片描述
最後$DateTime就是所建立的物件了,我們輸出這個物件可以看到我們之前傳遞的日期資訊。
這裡寫圖片描述
不過,你是否還記得我們之前有篇文章提到如何獲取物件裡的資訊嗎?沒錯,就是使用Get-Membercmdlet來檢視物件含有哪些資料資訊。
這裡寫圖片描述
我們在這裡發現有一個AddDays方法挺有意思,我們直接使用,並傳入一個引數10看看。它可以很方便的讓我們知道之前的日期往後推10天是什麼日期。
這裡寫圖片描述


接下來要說的是以建立COM元件的方式建立一個物件,可能有人不是很清楚什麼是COM元件,簡單的說在早期各種產品,軟體裡有許許多多元件,但是很多功能元件安裝解除安裝變的麻煩。為此就出現了COM元件,就像樂高積木一樣,人們就可以開發COM元件像介面一樣與各種元件按照需要組合成一個功能完善的軟體。

下面我摘了一段百度百科給需要了解的人:

COM component(COM元件)是微軟公司為了計算機工業的軟體生產更加符合人類的行為方式開發的一種新的軟體開發技術。在COM構架下,人們可以開發出各種各樣的功能專一的元件,然後將它們按照需要組合起來,構成複雜的應用系統。由此帶來的好處是多方面的:可以將系統中的元件用新的替換掉,以便隨時進行系統的升級和定製;可以在多個應用系統中重複利用同一個元件;可以方便的將應用系統擴充套件到網路環境下;COM與語言,平臺無關的特性使所有的程式設計師均可充分發揮自己的才智與專長編寫元件模組

建立COM例項物件和之前建立基於.NET Framework的方式基本差不多,我們來快速用基於COM元件的方式建立一個例項物件,這裡我們只需要配合 COMObject引數指定專門的COM 物件(注:在我們建立新物件的時候TypeName引數是不能和COMObject同時混用的)。
這裡寫圖片描述

我們用Get-Member檢視物件資訊後打算使用IsServiceRunning方法,這個方法是用來檢視當前要檢視的某個服務是否還在執行中。
這裡寫圖片描述
PowerShell的強大也正是因為構建於背後強大的型別模型框架,因此我們可以藉助.NET Framework或者COM元件物件來完成PowerShell暫時還無法完成的功能。