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