PowerShell與Framework集成實現(xiàn)參數(shù)自動傳遞 |
發(fā)布時間: 2012/7/12 10:16:25 |
在實際工作中,系統(tǒng)管理員可能會遇到這種情況:前面一個命令的結(jié)果,剛好是后面一個命令的參數(shù)。這種需求在Linux等操作系統(tǒng)中可以輕松的實現(xiàn),但是在傳統(tǒng)的Windows環(huán)境中,實現(xiàn)起來卻有一定的困難。不過在Win2008中,可以將PowerShell與Framework集成,來實現(xiàn)這種需求。
一、傳統(tǒng)解決方案的弊病。 由于Windows的Shell是運行在基于文本的環(huán)境當中。為此為了自動化目標就必須要對輸出進行格式化操作。如現(xiàn)在需要將某個命令的結(jié)果傳遞到下一個命令作為參數(shù),就必須要對前面一個命令的結(jié)果的輸出進行格式化操作,以滿足于第二個命令的要求。也就是說,無法直接將第一個命令的結(jié)果傳遞到后面一個命令中去。 這種格式化的操作,從理論上說是可行的。但是,通常情況下將文本數(shù)據(jù)轉(zhuǎn)換為可用的格式中間需要大量的動作。有時候即使文本內(nèi)容一個字沒變,而只是格式不同,進行格式化操作仍然需要耗費大量的資源。所以在以前的應(yīng)用環(huán)境中,絕大部分系統(tǒng)工程師對于這個需求是望而生畏。不過在Win2008中,可以將Powershell與Frame結(jié)合,解決了這個難題。 PowerShell可以將數(shù)據(jù)不作為純文本形式進行傳送,而是以FrameWork對象的形式來檢索數(shù)據(jù)。如此的話,在不需要對結(jié)果進行格式化的情況下,后面一個命令就可以直接使用前面一個命令的結(jié)果來作為參數(shù)。為此系統(tǒng)不需要再修改文本數(shù)據(jù),而只需要通過名稱來引用所需要的數(shù)據(jù)即可。在這個過程中,系統(tǒng)管理員并不需要編寫代碼來將數(shù)據(jù)轉(zhuǎn)換為有用的格式,而只需要引用對象并按需要來操作對象即可。 二、反射機制實現(xiàn)命令之間的自動詢問過程。 反射是Framework中的一個機制。通過這個機制,可以讓系統(tǒng)檢查對象并檢索他們支持的方法、屬性、字段等等。由于PowerShell是建立在這個機制之上的,為此系統(tǒng)工程師可以通過發(fā)射機制來實現(xiàn)參數(shù)的自動傳遞。簡單的說,就是通過Get-member Cmdlet來實現(xiàn)類似的功能。此時這個Cmdlet會幫助系統(tǒng)工程師分析通過管道傳遞的對象或者對象集合。筆者這里舉一個簡單的例子。如可以通過下面的命令分析某個命令返回的對象并顯示相關(guān)的屬性和方法。 Get-process | get-member. 其實用過Linux操作系統(tǒng)的用戶,對于這個命令是非常熟悉的。在Linux中,就是通過“|”符號將前后兩個命令聯(lián)系起來的。不過這里需要注意的是,雖然在Windows操作系統(tǒng)中也可以通過這個符號實現(xiàn)類似的功能,不過其背后的實現(xiàn)機制是不同的。在Windows中,在這里是借助了Framework框架下的發(fā)射機制。有時候我們也將這個過程叫做詢問對象機制。在實際工作中,會非常的有用。 三、ETS擴展類型系統(tǒng)實現(xiàn)數(shù)據(jù)類型的自動匹配。 眾所周知,無論是函數(shù)還是過程,都要強調(diào)數(shù)據(jù)類型的相互匹配。在參數(shù)自動傳遞的過程之中,如果數(shù)據(jù)類型不匹配,仍然無法滿足自動傳遞的需求。為了解決這個數(shù)據(jù)類型匹配的問題,系統(tǒng)中引入了ETS機制。 在說這個機制之前,筆者先給大家消除一個誤區(qū)。筆者以前在跟一些系統(tǒng)工程師交流的時候,他們認為PowerShell中的腳本是無類型的。其實這大錯特錯。雖然在實際工作中,很少需要指定變量的數(shù)據(jù)類型,但是這并不是說其沒有數(shù)據(jù)類型。這就好像一個人不說話,并不能夠代表其就是啞巴。從本質(zhì)上說,PowerShell是數(shù)據(jù)類型驅(qū)動的。也就是說需要受到數(shù)據(jù)類型匹配的約束。只不過系統(tǒng)采用了ETS擴展類型系統(tǒng)機制,在工作時會對不同的數(shù)據(jù)類型自動進行轉(zhuǎn)換。真是因為這個機制,系統(tǒng)工程師不需要考慮對象的類型。因為PowerShell能夠適合不同的數(shù)據(jù)類型并向管理員顯示其對某個對象的理解。在了解這個機制時,筆者認為需要抓住如下幾個要點。 本文出自:億恩科技【www.ruiliheng.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |