專利名稱::用于提供數(shù)據(jù)驅(qū)動命令行輸出的機(jī)制的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及命令行環(huán)境,尤其涉及對通過命令行環(huán)境輸入的命令的輸出。
背景技術(shù):
:許多操作環(huán)境都提供一種用于把多個應(yīng)用程序(例如實用程序)“縫合”(即管線化)起來以創(chuàng)建可在操作系統(tǒng)的命令行上輸入的定制特別命令。通常,這些命令可在系統(tǒng)管理工具中使用,諸如用于管理系統(tǒng)屬性。命令中的每個“經(jīng)管線連接的”實用程序通過傳送文本來互相通信。因而,管線中的每個實用程序負(fù)責(zé)解析接收到的文本,并負(fù)責(zé)格式化輸出文本。輸出文本的格式化由命令中的代碼執(zhí)行,且通?;谠诿钚猩咸峁┑膶υ撁畹慕忉屴D(zhuǎn)換。因而,每個命令負(fù)責(zé)按需來格式化并顯示輸出。因此,需要一種機(jī)制,它提供增強式格式化選項且為了提供該增強式格式化選項,在命令中并不需要擴(kuò)展代碼。
發(fā)明內(nèi)容本機(jī)制提供在支持基于對象命令管線的環(huán)境中的數(shù)據(jù)驅(qū)動的命令行輸出。每個基于對象命令輸入用于處理的可解析對象,并輸出用于后面命令處理的另一可解析對象。該機(jī)制在操作上根據(jù)輸入的可解析對象類型來引導(dǎo)命令的格式化及其隨后處理上。獲得諸如形狀、要顯示屬性等等的類型的格式信息??稍诨赬ML的文檔中指定格式信息。該機(jī)制利用一個或多個輸出處理命令,諸如格式命令、標(biāo)記命令、轉(zhuǎn)換命令、變換命令、以及輸出命令??梢愿鞣N方式在管線中安排這些輸出處理命令以獲取所需輸出結(jié)果。圖1示出了可使用示例性管理工具環(huán)境的示例性計算裝置。圖2是一般示出用于提供管理工具環(huán)境的示例性管理工具架構(gòu)縱覽的框圖。圖3是示出如圖2所示的管理工具架構(gòu)的主要專用組件中組件的框圖。圖4是示出如圖2所示的管理工具架構(gòu)的核心引擎組件中組件的框圖。圖5是用于指定適于在如圖2所示的管理工具架構(gòu)中使用的cmdlet的一示例性數(shù)據(jù)結(jié)構(gòu)。圖6是用于指定從圖5所示cmdlet中導(dǎo)出的命令基本類型的示例性數(shù)據(jù)結(jié)構(gòu)。圖7是用于指定適于在如圖2所示的管理工具架構(gòu)中使用的cmdlet的另一示例性數(shù)據(jù)結(jié)構(gòu)。圖8是示出在圖2所示的管理工具框架中執(zhí)行的主要處理的示例性過程的邏輯流程圖。圖9是示出在圖2所示的管理工具框架中執(zhí)行的用于處理輸入的示例性過程的邏輯流程圖。圖10是示出用于處理適于在如圖9所示的處理輸入的過程中使用的腳本的過程的邏輯流程圖。圖11是示出適于在如圖10所示腳本處理過程中使用的腳本預(yù)處理過程的邏輯流程圖。圖12是示出用于施加適于在如圖10所示腳本處理過程中使用的約束束的過程的邏輯流程圖。圖13是示出如圖2所示管理工具框架中命令字符串的處理的功能流程圖。圖14是示出用于處理適于在如圖9所示用于處理輸入的過程中使用的命令字符串的過程的邏輯流程圖。圖15是示出用于創(chuàng)建適于在如圖14所示命令字符串的處理中使用的cmdlet實例的示例性過程的邏輯流程圖。圖16是示出用于填充適于在如圖14所示命令處理中使用的cmdlet屬性的示例性過程的邏輯流程圖。圖17是示出用于執(zhí)行適于在如圖14所示命令處理中使用的cmdlet的示例性過程的邏輯流程圖。圖18是適于在如圖2所示命管理工具框架中使用的的示例性擴(kuò)展的類型管理器的功能框圖。圖19圖示管線中輸出處理cmdlet的示例性序列。圖20示出了由如圖19所示的輸出處理cmdlet之一執(zhí)行的示例性處理。圖21圖示在圖20處理期間所訪問的顯示信息的示例性結(jié)構(gòu)。圖22是列出示例性輸出處理cmdlet的示例性語法的表格。圖23示出使用輸出處理cmdlet的各種管線序列由out/console(輸出/控制臺)cmdlet提供的結(jié)果。具體實施例方式簡言之,本機(jī)制提供數(shù)據(jù)驅(qū)動的命令行輸出。以各種順序把多個輸出處理cmdlet用管線連接在一起以提供所需輸出結(jié)果。輸出處理cmdlet包括格式cmdlet、標(biāo)記cmdlet、轉(zhuǎn)換cmdlet、變換cmdlet以及輸出cmdlet。顯示信息以對象類型的格式化選項進(jìn)行填充。該機(jī)制基于輸入結(jié)構(gòu)化數(shù)據(jù)(例如對象)類型在操作上引導(dǎo)格式化和隨后的cmdlet處理。以下描述陳述了該機(jī)制在其中操作的特定示例性管理工具環(huán)境。其它示例性環(huán)境可包括該特定實施例的特征和/或其它特征,這些特征以便于格式化命令行數(shù)據(jù)的輸出為目標(biāo)。以下詳細(xì)描述被分成若干章節(jié)。第一章節(jié)描述示例性操作工具環(huán)境可在其中操作的說明性計算環(huán)境。第二章節(jié)描述用于管理工具環(huán)境的示例性框架。隨后的章節(jié)描述示例性框架的各個組件以及這些組件的操作。例如,關(guān)于“用于顯示命令行數(shù)據(jù)的示例性過程”的章節(jié)結(jié)合圖19-23描述了用于提供數(shù)據(jù)驅(qū)動命令行輸出的示例性機(jī)制。示例性計算環(huán)境圖1示出了可在示例性管理工具環(huán)境中使用的示例性計算裝置。在非?;镜呐渲弥校嬎阊b置100通常包括至少一個處理單元102和系統(tǒng)存儲器104。取決于計算裝置的準(zhǔn)確配置和類型,系統(tǒng)存儲器104可以是易失性的(諸如RAM)、非易失性的(諸如ROM、閃存等等)、或兩者的某些組合。系統(tǒng)存儲器104通常包括操作系統(tǒng)105、一個或多個程序模塊106,也可包括程序數(shù)據(jù)107。操作系統(tǒng)105包括基于組件的框架120,該框架支持組件(包括屬性和事件)、對象、遺留、多態(tài)性、反映,并提供面向?qū)ο蟮幕诮M件應(yīng)用編程界面(API),諸如華盛頓州Redmond的微軟公司制造的.NETTM框架。操作系統(tǒng)105還包括與基于組件的框架120交互以支持管理工具(未示出)開發(fā)的管理工具框架200?;九渲迷趫D1中由虛線108內(nèi)的那些組件示出。計算裝置100可具有附加特征或功能。例如,計算裝置100還可包括諸如磁盤、光盤、或磁帶的其它數(shù)據(jù)存儲裝置(可移動和/或不可移動)。這種其它存儲器在圖1用可移動存儲器109和不可移動存儲器110示出。計算機(jī)存儲介質(zhì)可包括以任何方法或技術(shù)實現(xiàn)的易失性和非易失性、可移動和不可移動的用來存儲諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它數(shù)據(jù)的信息的介質(zhì)。系統(tǒng)存儲器104、可移動存儲109和不可移動存儲110都是計算機(jī)存儲介質(zhì)的示例。計算機(jī)存儲介質(zhì)包括,但不限于RAM、ROM、EEPROM、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字化多功能光盤(DVD)或其它光學(xué)存儲器、磁帶盒、磁帶、磁盤存儲器或其它磁性存儲裝置、或可用來存儲所需信息并可由計算裝置100訪問的任何其它介質(zhì)。任何這種計算機(jī)存儲介質(zhì)可以是裝置100的一部分。計算裝置100還可具有諸如鍵盤、鼠標(biāo)、筆、語音輸入裝置、觸摸輸入裝置等等的輸入裝置112。還可包括諸如顯示器、揚聲器、打印機(jī)等等的輸出裝置114。這些裝置在本領(lǐng)域中是眾所周知的,無需在此贅述。計算裝置100還可包含使裝置能與其它計算裝置118諸如在網(wǎng)絡(luò)上進(jìn)行通信的通信連接116。通信連接116是通信介質(zhì)的一個示例。通信介質(zhì)通常體現(xiàn)為計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它諸如載波或其它傳輸機(jī)制的已調(diào)制數(shù)據(jù)的信號,并包括任何信息傳輸介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號”意指具有以這種在信號中編碼信息的方式來設(shè)置或改變的一個或多個特征的信號。作為示例,而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接有線連接的有線介質(zhì),以及諸如聲學(xué)、RF、紅外和其它無線介質(zhì)的無線介質(zhì)。在此所用的術(shù)語計算機(jī)可讀介質(zhì)包括存儲介質(zhì)和通信介質(zhì)。示例性管理工具架構(gòu)圖2是一般示出示例性管理工具架構(gòu)200縱覽的框圖。管理工具架構(gòu)200包括一個或多個主機(jī)組件202、主機(jī)專用組件204、主機(jī)無關(guān)組件206、以及處理器組件208。主機(jī)無關(guān)組件206可與其它組件的每一個通信(即主機(jī)組件202、主機(jī)專用組件204、以及處理器組件208)。這些組件的每一個都在下面簡述,并且會按需在隨后章節(jié)中進(jìn)行更詳細(xì)的描述。主機(jī)組件主機(jī)組件202包括向用戶或其它程序展現(xiàn)相關(guān)聯(lián)應(yīng)用程序自動化特征的一個或多個主機(jī)程序(例如主機(jī)程序210-214)。每個主機(jī)程序210-214能以其自己的特定風(fēng)格來展現(xiàn)這些自動化特征,諸如通過命令行、圖形用戶界面(GUI)、語音識別界面、應(yīng)用編程界面(API)、腳本語言、網(wǎng)絡(luò)服務(wù)等等。然而,主機(jī)程序20-214的每一個通過由管理工具框架提供的機(jī)制來展現(xiàn)一個或多個自動化特征。在此例中,機(jī)制使用cmdlet向相關(guān)聯(lián)主機(jī)程序210-214的用戶披露管理工具能力。另外,該機(jī)制使用主機(jī)提供的一組界面來把管理工具環(huán)境嵌入到與相應(yīng)主機(jī)程序210-214相關(guān)聯(lián)的應(yīng)用程序中。貫穿以下的討論,術(shù)語“cmdlet”被用于指在參照圖2-23描述的示例性管理工具環(huán)境中使用的諸命令。cmdlet對應(yīng)于傳統(tǒng)管理環(huán)境中的命令。然而,cmdlet與這些傳統(tǒng)命令又很不相同。例如,通常cmdlet在尺寸上比其對照命令要小,因為cmdlet能利用管理工具框架提供的通用功能,諸如解析、數(shù)據(jù)校驗、錯誤報告等等。由于可一次性地實現(xiàn)并一次性地測試這些通用功能,整個管理工具框架中cmdlet的使用使得關(guān)聯(lián)于應(yīng)用程序?qū)S霉δ艿臐u進(jìn)式開發(fā)和測試成本與傳統(tǒng)環(huán)境相比能很低。此外,與傳統(tǒng)環(huán)境相反,cmdlet不必是獨立的可執(zhí)行程序。相反,cmdlet可在管理工具框架內(nèi)的相同過程中運行。這使得cmdlet能在彼此間交換“活動的”對象。交換“活動”對象的能力使cmdlet能夠直接調(diào)用這些對象上的方法。創(chuàng)建和使用cmdlet的細(xì)節(jié)在下面進(jìn)行更詳細(xì)的描述。總的看來,每個主機(jī)程序210-214管理工具框架內(nèi)用戶和其它組件之間的交互進(jìn)行管理。這些交互可包括對于參數(shù)、錯誤報告等等的提示。通常,每個主機(jī)程序210-213可提供自己的專用主機(jī)cmdlet(例如主機(jī)cmdlet218)組。例如,如果主機(jī)程序是電子郵件程序,該主機(jī)程序可提供與郵箱和消息交互的主機(jī)cmdlet。盡管圖2示出了主機(jī)程序210-214,本領(lǐng)域技術(shù)人員將理解主機(jī)組件202可包括關(guān)聯(lián)于現(xiàn)有或新創(chuàng)建的應(yīng)用程序的其它主機(jī)程序。這些其它主機(jī)程序也將把由管理工具環(huán)境提供的功能嵌入其相關(guān)聯(lián)應(yīng)用程序中。由主機(jī)程序提供的過程在下面結(jié)合圖8進(jìn)行詳細(xì)描述。在圖2所示的示例中,主機(jī)程序可以是管理控制臺(即主機(jī)程序210),它為用戶提供簡單、一致的管理用戶界面以創(chuàng)建、存儲、并打開對計算裝置的硬件、軟件和網(wǎng)絡(luò)組件進(jìn)行管理的管理工具。為了實現(xiàn)這些功能,主機(jī)程序210提供用來在管理工具框架的頂層建立管理GUI的一組服務(wù)。也可將GUI交互展現(xiàn)為幫助把管理工具環(huán)境提供的腳本能力教給用戶的用戶可見腳本。在另一示例中,主機(jī)程序可以是命令行交互外殼(即主機(jī)程序212)。命令行交互外殼可使外殼元數(shù)據(jù)216能在命令行上輸入以影響命令行的處理。在又一示例中,主機(jī)程序可以是對跨平臺、編程語言、以及應(yīng)用程序的分布式計算和互操作性使用工業(yè)標(biāo)準(zhǔn)規(guī)范的網(wǎng)絡(luò)服務(wù)(即主機(jī)程序214)。。除了這些示例,第三方可通過創(chuàng)建與它們的主機(jī)程序或其它主機(jī)程序一起使用的“第三方”或“供應(yīng)商”界面和供應(yīng)商cmdlet來添加它們自己的主機(jī)組件。供應(yīng)商界面展現(xiàn)應(yīng)用程序或基礎(chǔ)架構(gòu),使得該應(yīng)用程序或基礎(chǔ)架構(gòu)可由管理工具框架操縱。供應(yīng)商cmdlet提供導(dǎo)航、診斷、配置、生命周期、操作等等的自動化。供應(yīng)商cmdlet展示在完全不同種類的數(shù)據(jù)存儲組上的多態(tài)性cmdlet行為。管理工具環(huán)境在供應(yīng)商cmdlet上以與其它cmdlet類相同的優(yōu)先級進(jìn)行操作。使用與其它cmdlet相同的機(jī)制來創(chuàng)建供應(yīng)商cmdlet。供應(yīng)商cmdlet把應(yīng)用程序或基礎(chǔ)架構(gòu)的特定功能展現(xiàn)給管理工具框架。因而,通過cmdlet的使用,產(chǎn)品開發(fā)者僅需要創(chuàng)建使他們的產(chǎn)品能以許多管理工具進(jìn)行操作的一種主機(jī)組件。例如,有了示例的管理工具環(huán)境,可將系統(tǒng)級圖形用戶界面求助菜單集成并移植到現(xiàn)有應(yīng)用程序。主機(jī)專用組件主機(jī)專用組件204包括計算系統(tǒng)(例如圖1中的計算裝置)用以把管理工具框架從該框架運行其上的平臺的細(xì)節(jié)中隔離出來的服務(wù)集合。因而,每類平臺都有一組主機(jī)專用組件。主機(jī)專用組件使用戶能在不同操作系統(tǒng)上使用相同的管理工具。現(xiàn)在簡單看一下圖3,主機(jī)專用組件204可包括智能感應(yīng)/元數(shù)據(jù)組件302、求助cmdlet組件304、配置/登記組件306、cmdlet設(shè)置組件308、以及輸出界面組件309。組件302-308與關(guān)聯(lián)于數(shù)據(jù)存儲庫314的數(shù)據(jù)庫存儲管理器312通信。解析器220與腳本引擎222與智能感應(yīng)/元數(shù)據(jù)訪問組件302通信。核心引擎224與求助cmdlet組件304、配置/登記組件306、cmdlet設(shè)置組件308、以及輸出界面組件309進(jìn)行通信。輸出界面組件309包括由主機(jī)提供給輸出cmdlet的界面。然后這些輸出cmdlet能調(diào)用主機(jī)的輸出對象以執(zhí)行該呈現(xiàn)。主機(jī)專用組件204也可包括記錄/審計組件310,它被核心引擎224用以與提供記錄和審計能力的主機(jī)專用(即平臺專用)服務(wù)通信。在一示例性管理工具框架中,智能感應(yīng)/元數(shù)據(jù)訪問組件302提供命令、參數(shù)、以及參數(shù)值的自動完成。求助cmdlet組件304基于主機(jī)用戶界面提供定制求助系統(tǒng)。處理器組件再參看圖2,處理器組件208包括遺留實用程序230、管理cmdlet232、非管理cmdlet234、遙控cmdlet236、以及網(wǎng)絡(luò)服務(wù)界面238。管理cmdlet232(也稱為平臺cmdlet)包括查詢或操縱關(guān)聯(lián)于計算裝置的配置信息的cmdlet。由于管理cmdlet232操縱系統(tǒng)類型信息,它們依賴于特定平臺。然而,每個平臺通常都具有提供與其它平臺上的管理cmdlet232類似作用的管理cmdlet232。例如,每個平臺都支持獲取和設(shè)定系統(tǒng)管理屬性(例如,“get/process”(“獲取/過程”)、“set/IPAddress”(設(shè)定/IP地址))的管理cmdlet232。主機(jī)無關(guān)組件206通過在主機(jī)無關(guān)組件206中生成的cmdlet對象與管理cmdlet通信。cmdlet對象的示例性數(shù)據(jù)結(jié)構(gòu)將在下面結(jié)合圖5-7進(jìn)行詳細(xì)描述。非管理cmdlet234(有時稱為基礎(chǔ)cmdlet)包括在由管理cmdlet232提供的在對象上進(jìn)行分組、排序、過濾、以及執(zhí)行其它處理的cmdlet。非管理cmdlet234還可包括用于格式化和輸出關(guān)聯(lián)于經(jīng)管線連接對象的數(shù)據(jù)的cmdlet。用于提供數(shù)據(jù)驅(qū)動命令行輸出的示例性機(jī)制在下面結(jié)合圖19-23進(jìn)行描述。非管理cmdlet234在每個平臺上可能都是相同的,并通過cmdlet對象提供與主機(jī)無關(guān)組件206交互的一組實用程序。非管理cmdlet234與主機(jī)無關(guān)組件206之間的交互允許對象上的反射(reflection),并允許在經(jīng)反射對象上進(jìn)行無關(guān)于其(對象)類型的處理。因而,這些實用程序使得開發(fā)者能夠僅編寫一次非管理cmdlet,然后就能將這些cmdlet應(yīng)用到計算系統(tǒng)所支持的所有類對象上。過去,開發(fā)者不得不首先要首先處理數(shù)據(jù)的格式,然后編寫應(yīng)用程序只是為了處理該數(shù)據(jù)。因此,傳統(tǒng)應(yīng)用程序僅能處理很有限范圍的數(shù)據(jù)。用于無關(guān)其對象類型處理對象的一示例性機(jī)制結(jié)合圖18在下面描述。遺留實用程序230包括現(xiàn)有的可執(zhí)行程序,諸如在cmd.exe下運行的win32執(zhí)行程序。每種遺留應(yīng)用程序230使用作為對象框架中對象類型的文本流(即,stdin和stdout)與管理工具框架通信。由于遺留實用程序230利用了文本流,由管理工具框架提供的基于反射操作不可用。遺留實用程序230在與管理工具框架不同的過程中執(zhí)行。盡管未示出,其它cmdlet也可在過程外操作。遙控cmdlet236結(jié)合網(wǎng)絡(luò)服務(wù)界面238,向遙控機(jī)制提供經(jīng)諸如因特網(wǎng)或內(nèi)聯(lián)網(wǎng)(例如,圖2中所示的因特網(wǎng)/內(nèi)聯(lián)網(wǎng)240)的通信介質(zhì)訪問其它計算裝置上的交互式和可編程的管理工具環(huán)境。在一示例性管理工具架構(gòu)中,遙控機(jī)制支持取決于跨多個獨立控制域的基礎(chǔ)架構(gòu)的聯(lián)合服務(wù)。遙控機(jī)制使腳本能在遠(yuǎn)程計算裝置上執(zhí)行。腳本可在單個或多個遠(yuǎn)程系統(tǒng)中上運行。當(dāng)每個單獨腳本完成時可處理腳本的結(jié)果,或者在各種計算裝置上完成所有腳本之后可集合其結(jié)果并一起進(jìn)行處理。例如,示作主機(jī)組件202之一的網(wǎng)絡(luò)服務(wù)214可以是遠(yuǎn)程代理。遠(yuǎn)程代理處理遠(yuǎn)程命令請求向目標(biāo)系統(tǒng)上的解析器和管理工具框架的提交。遙控cmdlet作為遠(yuǎn)程客戶機(jī)以提供對遠(yuǎn)程代理的訪問。遠(yuǎn)程代理和遙控cmdlet通過經(jīng)解析流進(jìn)行通信。在協(xié)議層上可保護(hù)該經(jīng)解析流,或者可使用附加cmdlet來加密該經(jīng)解析流,然后將其解密。主機(jī)無關(guān)組件主機(jī)無關(guān)組件206包括解析器220、腳本引擎222以及核心引擎224。主機(jī)無關(guān)組件206提供機(jī)制和服務(wù)以將多個cmdlet組合、協(xié)調(diào)cmdlet的操作、并協(xié)調(diào)其它資源、會話以及作業(yè)與cmdlet的交互。示例性解析器解析器220提供諸機(jī)制,用于從各種主機(jī)程序接收輸入請求,并把該輸入請求映射成貫穿管理工具框架諸如在核心引擎224中使用的統(tǒng)一cmdlet對象。另外,解析器220可基于收到的輸入執(zhí)行數(shù)據(jù)處理。一種基于輸入用于執(zhí)行數(shù)據(jù)處理的示例性方法在下面結(jié)合圖12進(jìn)行描述。本管理工具框架的解析器220提供向用戶輕松展現(xiàn)具有相同能力的不同語言或語法的能力。例如,由于解析器220負(fù)責(zé)解釋輸入請求,解析器220中影響期望輸入語法的對代碼的改變將實質(zhì)上影響管理工具框架的每個用戶。因此,系統(tǒng)管理員可在不同計算裝置上提供支持不同語法的不同解析器。然而,用相同解析器操作的每個用戶都將體驗到對于每個cmdlet的一致語法。相反,在傳統(tǒng)環(huán)境中,每個命令實現(xiàn)其自己的語法。因而,有了成千上萬的命令,每個環(huán)境就支持若干不同的語法,而通常其中許多互相之間都不一致。示例性腳本引擎腳本引擎222提供機(jī)制和服務(wù)以使用腳本把多個cmdlet聯(lián)系起來。腳本是在嚴(yán)格的遺留規(guī)則下共享會話狀態(tài)的命令行集合?;谳斎胝埱笾兴峁┑恼Z法,可同步或異步地執(zhí)行腳本中的多個命令行。腳本引擎222具有處理諸如循環(huán)和條件語句的控制結(jié)構(gòu)以及處理腳本中變量的能力。腳本引擎還管理會話狀態(tài),并基于政策(未示出)使cmdlet能訪問會話數(shù)據(jù)。示例性核心引擎核心引擎224負(fù)責(zé)處理由解析器220標(biāo)識的cmdlet?,F(xiàn)在簡單看一下圖4,示出了管理工具框架200中的示例性核心引擎224。示例性核心引擎224包括管線處理器402、加載器404、元數(shù)據(jù)處理器406、錯誤和事件處理器408、會話管理器410以及擴(kuò)展的類型管理器412。示例性元數(shù)據(jù)處理器元數(shù)據(jù)處理器406被配置以訪問和存儲在諸如圖3中所示數(shù)據(jù)庫存儲器314的元數(shù)據(jù)存儲器中的元數(shù)據(jù)。通過在cmdlet類定義等等中的命令行提供元數(shù)據(jù)。在管理工具框架200中的不同組件可在執(zhí)行其處理時請求元數(shù)據(jù)。例如,解析器202可請求元數(shù)據(jù)校驗命令行上提供的參數(shù)。示例性錯誤和事件處理器錯誤和事件處理器408提供錯誤對象以在命令行的處理期間存儲關(guān)于錯誤的每次發(fā)生的信息。對于有關(guān)特別適合本管理工具框架的一特定錯誤和事件處理器的其它信息,參見標(biāo)題為“SystemandMethodforPersistingErrorInformationinaCommandLineEnvironment”的美國專利,申請?zhí)枮?0/413,054,該專利為本發(fā)明同一受讓人所有,在此引入作為參考。示例性會話管理器會話管理器410向管理工具框架200中的其它組件提供會話和狀態(tài)信息。由會話管理器管理的狀態(tài)信息可由任何cmdlet、主機(jī)、或核心引擎通過編程界面進(jìn)行訪問。這些編程界面允許狀態(tài)信息的創(chuàng)建、更改、以及刪除。示例性管線處理器和加載器加載器404被配置成加載存儲器中的每個cmdlet,以便管線處理器402執(zhí)行該cmdlet。管線處理器402包括cmdlet處理器420和cmdlet管理器422。Cmdlet處理器420分發(fā)各個cmdlet。如果cmdlet需要在(一組)遠(yuǎn)程機(jī)器上執(zhí)行,cmdlet處理器420用如圖2所示的遠(yuǎn)程cmdlet236協(xié)調(diào)該執(zhí)行。cmdlet管理器422處理cmdlet集合的執(zhí)行。cmdlet管理器422、cmdlet處理器420以及腳本引擎222(圖2)互相通信以便在從主機(jī)程序210-214接收的輸入上執(zhí)行該處理。通信本質(zhì)上可以是遞歸的。例如,如果主機(jī)程序提供腳本,該腳本可調(diào)用cmdlet管理器422以執(zhí)行其自身可能也是腳本的cmdlet。然后可由腳本引擎222執(zhí)行該腳本。核心引擎的一示例性過程流結(jié)合圖14在下面詳述。示例性擴(kuò)展的類型管理器如上所述,管理工具框架提供一組實用程序,它們允許對象上的反射并允許在經(jīng)反射對象上進(jìn)行無關(guān)其(對象)類型的處理。管理工具框架200與計算系統(tǒng)上的組件框架(圖1中的組件框架120)交互以執(zhí)行該反射。如本領(lǐng)域技術(shù)人員所知,反射提供查詢對象、獲知對象類型、以及然后在關(guān)聯(lián)于該類對象的各種對象和屬性上進(jìn)行反射以獲取其它對象和/所需值的能力。盡管反射向管理工具框架200提供了對象上的可觀信息,發(fā)明者認(rèn)為反射關(guān)注的是對象的類型。例如,當(dāng)在數(shù)據(jù)庫數(shù)據(jù)表上進(jìn)行反射,所返回的信息是該數(shù)據(jù)表具有兩個屬性列屬性和行屬性。這兩個屬性并不提供關(guān)于該數(shù)據(jù)表中“對象”的充分細(xì)節(jié)。當(dāng)反射用于可擴(kuò)展標(biāo)記語言(XML)和其它對象上時也出現(xiàn)了類似的問題。因而,發(fā)明者想像關(guān)注類型使用的擴(kuò)展的類型管理器412。對該擴(kuò)展的類型管理器,對象的類型并不重要。相反,擴(kuò)展的類型管理器412對是否可使用對象來獲取所需信息感興趣。繼續(xù)上述數(shù)據(jù)表示例,發(fā)明者理解知道該數(shù)據(jù)表具有列屬性和行屬性并不特別重要,并理解一個列包含有重要的信息。通過關(guān)注其使用,可使每個行與“對象”相關(guān)聯(lián),而使每個列與該“對象”的“屬性”相關(guān)聯(lián)。因而,擴(kuò)展的類型管理器412提供一種機(jī)制以從任何類型的可精確解析的輸入中創(chuàng)建“對象”。在這樣做時,擴(kuò)展的類型管理器412補充由基于組件框架120提供的反射能力,并把“反射”擴(kuò)展到任何類型的可精確解析的輸入中。總的看來,擴(kuò)展的類型管理器被配置以訪問可精確解析的輸入(未示出),并把可精確解析的輸入與被請求數(shù)據(jù)類型聯(lián)系起來。然后擴(kuò)展的類型管理器412向諸如管線處理器402或解析器220的請求組件提供請求信息。在以下討論中,可精確解析的輸入被定義為在其中能辨別屬性和值的輸入。某些示例性可精確解析的輸入包括Windows管理設(shè)備(WMI)輸入、ActiveX數(shù)據(jù)對象(ADO)輸入、可擴(kuò)展標(biāo)記語言(XML)輸入、以及諸如.NET對象的對象輸入。其它可精確解析的輸入可包括第三方數(shù)據(jù)格式。簡單參看圖18,顯示了在管理工具架構(gòu)中使用的示例性擴(kuò)展的類型管理器的功能框圖。為了解釋,由擴(kuò)展的類型管理器提供的功能(以圓圈內(nèi)的數(shù)字“3”標(biāo)注)與由傳統(tǒng)的緊密綁定系統(tǒng)(以圓圈內(nèi)的數(shù)字“1”標(biāo)注)提供的功能、以及由反射系統(tǒng)(以圓圈內(nèi)的數(shù)字“2”標(biāo)注)提供的功能進(jìn)行比較。在傳統(tǒng)緊密綁定系統(tǒng)中,應(yīng)用中的調(diào)用者1802直接訪問對象A中的信息(例如,屬性P1和P2、方法M1和M2)。如上所述,調(diào)用者1802必須預(yù)先知道屬性(例如屬性P1和P2)和方法(例如方法M1和M2)在編譯時由對象A提供。在反射系統(tǒng)中,一般代碼1820(不依賴于任何數(shù)據(jù)類型)查詢系統(tǒng)1808,該系統(tǒng)在被請求對象上執(zhí)行反射1810并向一般代碼1820返回關(guān)于對象(例如對象A)的信息(例如,屬性P1和P2、方法M1和M2)。盡管在對象A中未示出,被返回信息可包括附加信息,諸如分銷商、文件、日期等等。因而,通過反射,一般代碼1820至少獲取緊密綁定系統(tǒng)提供的相同信息。反射系統(tǒng)還使調(diào)用者1802能在對參數(shù)沒有任何預(yù)先了解情況下查詢系統(tǒng)并獲得附加信息。在緊密綁定系統(tǒng)和反射系統(tǒng)兩者中,新數(shù)據(jù)類型不能輕易地結(jié)合到操作環(huán)境中。例如,在緊密綁定系統(tǒng)中,一旦交付了操作環(huán)境,操作環(huán)境就不能結(jié)合新數(shù)據(jù)類型,因為為了支持它們將不得不重建該操作環(huán)境。類似地,在反射系統(tǒng)中,用于每個對象類的元數(shù)據(jù)是固定的。因而,通常不能完成新數(shù)據(jù)類型的加入。然而,有了本擴(kuò)展的類型管理器,就可把新數(shù)據(jù)類型結(jié)合到操作系統(tǒng)中去。有了擴(kuò)展的類型管理器1822,一般代碼1820可在請求對象上進(jìn)行反射,以獲取由諸如第三方對象(例如對象A’和B)、語義網(wǎng)絡(luò)1832、本體服務(wù)1834等等的各種外部源提供的擴(kuò)展的數(shù)據(jù)類型(例如對象A’)。如圖所示,第三方對象可擴(kuò)展現(xiàn)有對象(例如對象A’)或創(chuàng)建全新對象(例如對象B)。這些外部源的每一個可在類型元數(shù)據(jù)1840中登記其獨特結(jié)構(gòu),并可提供代碼1842。當(dāng)查詢對象時,擴(kuò)展的類型管理器查看類型元數(shù)據(jù)1840以確定該對象是否已登記。如果該對象未在類型元數(shù)據(jù)1840中登記,執(zhí)行反射。否則,執(zhí)行擴(kuò)展的反射。代碼1842返回與在其上反射的類型相關(guān)聯(lián)的附加屬性和方法。例如,如果輸入類型是XML,代碼1842可包括描述使用XML從XML文檔創(chuàng)建對象的方式的描述文件。因而,類型元數(shù)據(jù)1840描述擴(kuò)展的類型管理器412應(yīng)當(dāng)如何查詢各種類型的可精確解析輸入(例如第三方對象A’和B、語義網(wǎng)絡(luò)1832),以獲取用來為該特定輸入類型創(chuàng)建對象的所需屬性,且代碼1842提供指令以獲取這些所需屬性。作為結(jié)果,擴(kuò)展的類型管理器412提供允許在所有對象類型上“反射”的間接層。除了提供擴(kuò)展的類型以外,擴(kuò)展的類型管理器412提供附加查詢機(jī)制,諸如屬性路徑機(jī)制、關(guān)鍵詞機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、globber(通配符)機(jī)制、屬性設(shè)置機(jī)制、關(guān)系機(jī)制等等。在以下“示例性擴(kuò)展的類型管理器處理”章節(jié)中描述的這些查詢機(jī)制的每一種都向系統(tǒng)管理員提供輸入命令字符串的靈活性??墒褂酶鞣N技術(shù)來實現(xiàn)擴(kuò)展的類型管理器的語義。這些技術(shù)如下所述。然而,本領(lǐng)域技術(shù)人員將理解可使用這些技術(shù)的變種,不背離請求保護(hù)的本發(fā)明的范圍。在一技術(shù)中,可提供具有靜態(tài)方法(例如getproperty())的一系列類。對象被輸入到靜態(tài)方法中(例如getproperty(object)),且靜態(tài)方法返回一組結(jié)果。在另一技術(shù)中,操作環(huán)境把對象與適配器封裝在一起。因而,沒有提供輸入。適配器的每個實例都有在經(jīng)封裝對象上作用的getproperty方法,并返回該封裝對象的屬性。以下是說明該技術(shù)的偽碼ClassAdaptor{ObjectX;getProperties();}在又一技術(shù)中,適配器類對該對象分子類。通常,分子類在編譯前發(fā)生。然而,在某些操作環(huán)境中,分子類可動態(tài)地發(fā)生。對于這些類型環(huán)境,以下是說明該技術(shù)的偽碼ClassAdaptorA{getProperties(){returndata;}}因而,如圖18所示,擴(kuò)展的類型管理器使開發(fā)者能創(chuàng)建新數(shù)據(jù)類型、登記該數(shù)據(jù)類型、并使其它應(yīng)用和cmdlet能使用新的數(shù)據(jù)類型。相反,在以前的管理環(huán)境中,在編譯時不得不知道每個數(shù)據(jù)類型,以便可直接訪問與從該數(shù)據(jù)類型例示的對象相關(guān)聯(lián)的屬性或方法。因此,過去很少完成添加由管理環(huán)境所支持的新數(shù)據(jù)類型。再參看圖2,總的看來,管理工具框架200不依賴用于協(xié)調(diào)由用戶輸入的命令的執(zhí)行的外殼,而是相反把功能拆分成處理部分(例如主機(jī)無關(guān)組件206)和用戶交互部分(例如通過主機(jī)cmdlet)。另外,本管理工具環(huán)境極大地簡化了管理工具的編程,因為需要用于解析和數(shù)據(jù)校驗的代碼不再包括在每個命令中,而是由管理工具框架中的組件(例如解析器220)提供。在管理工具框架中執(zhí)行的示例性處理如下所述。示例性操作圖5-7圖示了在管理工具環(huán)境中使用的示例性數(shù)據(jù)結(jié)構(gòu)。圖8-17圖示了管理工具環(huán)境中的示例性處理流。本領(lǐng)域技術(shù)人員將理解,可由不同于以下所述的組件的另外組件來執(zhí)行某些處理,而不背離本發(fā)明的范圍。在描述于管理工具框架的組件中執(zhí)行的處理之前,先描述管理工具框架中使用的示例性數(shù)據(jù)結(jié)構(gòu)。cmdlet對象的示例性數(shù)據(jù)結(jié)構(gòu)圖5是用來指定適于在如圖2所示的管理工具架構(gòu)中使用的cmdlet的示例性數(shù)據(jù)結(jié)構(gòu)。當(dāng)完成時,cmdlet可以是管理cmdlet、非管理cmdlet、主機(jī)cmdlet、供應(yīng)商cmdlet等等。以下討論從系統(tǒng)管理員角度來描述cmdlet的創(chuàng)建(即供應(yīng)商cmdlet)。然而,每類cmdlet都以相同方式創(chuàng)建并以相似方式操作。可用任何語言諸如C#來編寫cmdlet。另外,可使用腳本語言等等來編寫cmdlet。當(dāng)管理工具環(huán)境以.NET框架進(jìn)行操作時,cmdlet可以是.NET對象。供應(yīng)商cmdlet500(此后稱為cmdlet500)是具有cmdlet類名稱的公用類(例如StopProcess504)。cmdlet500源自cmdlet類506。cmdlet類506的示例性數(shù)據(jù)結(jié)構(gòu)結(jié)合圖6在下面描述。每個cmdlet500與把名稱(例如Stop/Process(中止/處理))關(guān)聯(lián)于cmdlet500的命令屬性502相關(guān)聯(lián)。名字在管理工具環(huán)境中登記。如下所述,解析器查看cmdlet登記以在把具有該名稱(例如Stop/Process)的命令字符串提供為在命令行上或腳本中的輸入時標(biāo)識該cmdlet500。cmdlet500與把期望輸入?yún)?shù)的語法定義給cmdlet的語法機(jī)制相關(guān)聯(lián)。該語法機(jī)制可直接或間接地與cmdlet相關(guān)聯(lián)。例如,cmdlet500示出了直接語法關(guān)聯(lián)。在該cmdlet500中,聲明了一個或多個公共參數(shù)(例如ProcessName510和PID512)。公共參數(shù)的聲明把輸入對象的解析導(dǎo)向cmdlet500?;蛘?,參數(shù)的描述可出現(xiàn)在諸如XML文檔的外部源中。然后,在此外部源中的參數(shù)描述將輸入對象的解析導(dǎo)向cmdlet。每個公共參數(shù)510和512可具有與其相關(guān)聯(lián)的一個或多個屬性(即指示符)。這些指示符可來自以下類別的任一種解析指示符520、數(shù)據(jù)校驗指示符521、數(shù)據(jù)生成指示符522、處理指示符523、編碼指示符524以及文檔指示符525。這些指示符包括在方括號中。每個指示符描述在以下期望輸入?yún)?shù)上執(zhí)行的操作。某些指示符還可在類級別上應(yīng)用,諸如用戶交互類型指示符。指示符存儲在與cmdlet相關(guān)聯(lián)的元數(shù)據(jù)中。這些屬性的應(yīng)用結(jié)合圖12在下面進(jìn)行描述。這些屬性還可影響在cmdlet中聲明的參數(shù)的填充。用于填充這些參數(shù)的一示例性過程結(jié)合圖16在下面進(jìn)行描述。核心引擎可應(yīng)用這些指示符以確保一致性。cmdlet500包括第一方法530(此后可轉(zhuǎn)而稱為StartProcessing方法530)和第二方法540(此后可轉(zhuǎn)而稱為processRecord方法540)。核心引擎使用第一和第二方法530和540來引導(dǎo)cmdlet500的處理。例如,第一方法530可執(zhí)行一次且執(zhí)行設(shè)置功能??蓪π枰蒫mdlet500處理的每個對象(例如記錄)執(zhí)行第二方法540中的代碼542。cmdlet500還可包括在cmdlet500之后進(jìn)行整理的第三方法(未示出)。因而,如圖5所示,通常第二方法540中的代碼542是很簡短的,且并不包含傳統(tǒng)管理工具環(huán)境中所需的功能,諸如解析代碼、數(shù)據(jù)校驗代碼等等。因而,系統(tǒng)管理員不學(xué)習(xí)復(fù)雜的編程語言也能開發(fā)復(fù)雜的管理任務(wù)。圖6是用于指定從圖5所示cmdlet中導(dǎo)出的基本類602的示例性數(shù)據(jù)結(jié)構(gòu)600。cmdlet基本類602包括一旦cmdlet包括hook語句以及相應(yīng)切換在命令行上或在腳本中輸入(一起稱為命令輸入)的任何時候提供附加功能的指令。示例性數(shù)據(jù)結(jié)構(gòu)600包括參數(shù),諸如布爾參數(shù)verbose610、whatif620以及confirm630。如下所述,這些參數(shù)對應(yīng)于可在命令輸入上鍵入的字符串。示例性數(shù)據(jù)結(jié)構(gòu)600還可包括確定是否允許請求中用于執(zhí)行的任務(wù)的安全方法640。圖7是用于指定cmdlet的另一示例性數(shù)據(jù)結(jié)構(gòu)700。總的看來,數(shù)據(jù)結(jié)構(gòu)700提供用于明確表達(dá)管理工具框架和cmdlet之間契約的方法。與數(shù)據(jù)結(jié)構(gòu)500相似,數(shù)據(jù)結(jié)構(gòu)700是源自cmdlet類704的公用類。軟件開發(fā)者指定把諸如“get/process”(“獲得/過程”)和“format/table”(“格式化/表格”)等等的動詞/名詞對關(guān)聯(lián)于cmdlet700的cmdletDeclaration702。在管理工具環(huán)境中登記動詞/名詞對。動詞或名詞可以是隱含在cmdlet名詞中的。而且,與數(shù)據(jù)結(jié)構(gòu)500相似,數(shù)據(jù)結(jié)構(gòu)700可包括與結(jié)合數(shù)據(jù)結(jié)構(gòu)500所述的一個或多個指示符520-526相關(guān)聯(lián)的一個或多個公共成員(例如Name730、Recurse732)。然而在該示例性數(shù)據(jù)結(jié)構(gòu)700中,期望輸入?yún)?shù)730和732的每一個可分別與輸入屬性731和733相關(guān)聯(lián)。輸入屬性731和733指定相應(yīng)參數(shù)730和732的數(shù)據(jù)應(yīng)當(dāng)從命令行獲取。因而,在該示例性數(shù)據(jù)結(jié)構(gòu)700中,沒有從由另一cmdlet發(fā)出的經(jīng)管線連接對象填充的任一期望輸入?yún)?shù)。因而,數(shù)據(jù)結(jié)構(gòu)700不取代由cmdlet基本類提供的第一方法(例如StartProcessing)或第二方法(例如ProcessRecord)。數(shù)據(jù)結(jié)構(gòu)700還可包括不被識別為輸入?yún)?shù)的私有成員740。可使用私有成員740來存儲基于命令之一生成的數(shù)據(jù)。因而,如在數(shù)據(jù)結(jié)構(gòu)700中所示,通過對特定cmdlet類中公共屬性和命令的聲明的使用,cmdlet開發(fā)者可輕松把用于期望輸入?yún)?shù)的語法指定給其cmdlet,并無需cmdlet開發(fā)者產(chǎn)生任何底層邏輯就指定應(yīng)在期望輸入?yún)?shù)上執(zhí)行的處理。數(shù)據(jù)結(jié)構(gòu)700示出cmdlet和語法機(jī)制之間的直接關(guān)聯(lián)。如上所述,該關(guān)聯(lián)也可以是間接的,諸如通過指定諸如XML文檔的外部源中的期望參數(shù)定義。現(xiàn)在描述管理工具環(huán)境中的示例性過程流。示例性主機(jī)處理流圖8是示出在如圖2所示的管理工具框架中執(zhí)行的主機(jī)處理的示例性過程的邏輯流程圖。過程800從框801開始,其中已接收到起動對特定應(yīng)用程序的管理工具環(huán)境的請求。該請求可通過諸如選擇應(yīng)用程序圖標(biāo)的鍵盤輸入進(jìn)行本地傳送,或者通過不同計算裝置的網(wǎng)絡(luò)服務(wù)界面進(jìn)行遠(yuǎn)程傳送。對于任一情況,處理在框802繼續(xù)。在框802,“目標(biāo)”計算裝置上的特定應(yīng)用程序(例如主機(jī)程序)設(shè)立其環(huán)境。這包括確定哪些cmdlet子集(例如管理cmdlet232、非管理cmdlet234以及主機(jī)cmdlet218)對用戶可用。通常,主機(jī)程序?qū)⑹顾械姆枪芾韈mdlet234以及它自己的主機(jī)cmdlet218可用。另外,主機(jī)程序?qū)⑹构芾韈mdlet234的子集可用,諸如處理過程、盤等等的cmdlet。因而,一旦主機(jī)程序使cmdlet子集可用,管理工具框架就被有效地嵌入相應(yīng)的應(yīng)用程序中。處理在框804繼續(xù)。在框804,通過特定應(yīng)用程序獲取輸入。如上所述,輸入可采取若干種形式,諸如命令行、腳本、語音、GUI等等。例如,當(dāng)通過命令行獲取輸入時,該輸入從鍵盤上的鍵擊來獲得。對于GUI主機(jī),字符串是基于GUI組成的。處理在框806繼續(xù)。在框806,輸入被提供給管理工具框架中的其它組件用于進(jìn)行處理。主機(jī)程序可直接把輸入傳送給其它組件,諸如解析器?;蛘?,主機(jī)程序可通過其主機(jī)cmdlet之一來傳送輸入。主機(jī)cmdlet可把其特定輸入類型(例如語音)轉(zhuǎn)換成由管理工具框架識別的輸入類型(例如文本字符串、腳本)。例如,取決于語音輸入的內(nèi)容,可將語音輸入轉(zhuǎn)換成腳本或者命令行字符串。因為每個主機(jī)程序都負(fù)責(zé)把它們的輸入類型轉(zhuǎn)換成由管理工具框架識別的輸入,管理工具框架可接收來自任意數(shù)量的各種主機(jī)組件的輸入。另外,當(dāng)通過其cmdlet之一傳送輸入時,管理工具框架提供豐富的執(zhí)行數(shù)據(jù)類型之間轉(zhuǎn)換的實用程序集。在由其它組件的輸入上執(zhí)行的處理結(jié)合若干其它附圖在下面進(jìn)行描述。主機(jī)處理在判定框808繼續(xù)。在判定況808,確定是否收到對附加輸入的請求。這在如果負(fù)責(zé)處理輸入的其它組件之一需要來自用戶的附加信息以便完成其處理時會發(fā)生。例如,可能需要密碼以訪問某些數(shù)據(jù)、可能需要特定動作的確認(rèn)等等。對于某些類型的主機(jī)程序(例如語音郵件),如此的請求可能是不適當(dāng)?shù)?。因而,主機(jī)程序可串行化狀態(tài)、延緩該狀態(tài)、以及發(fā)送通知,從而在晚些時候可恢復(fù)該狀態(tài)并繼續(xù)輸入的執(zhí)行,而不是向用戶查詢附加信息。在另一變化中,主機(jī)程序可在預(yù)定時間段后提供缺省值。如果收到了對附加輸入的請求,處理回到框804循環(huán),其中獲得附加輸入。然后處理通過如上所述的框806和808繼續(xù)。如果未收到對附加輸入的請求且已處理了輸入,處理到框810繼續(xù)。在框810,接收來自管理工具框架中其它組件的結(jié)果。該結(jié)果可包括錯誤消息、狀態(tài)等等。結(jié)果是可由管理工具框架中主機(jī)cmdlet識別和處理的對象形式。如下所述,為每個主機(jī)cmdlet編寫的代碼是很少的。因而,無需開發(fā)成本中的大量投入就可顯示豐富的輸出集。處理在框812繼續(xù)。在框812,可看到結(jié)果。主機(jī)cmdlet把結(jié)果轉(zhuǎn)換為主機(jī)程序所支持的顯示風(fēng)格。例如,返回對象可由GUI主機(jī)程序使用諸如圖標(biāo)、吠犬等等的圖形表示法來顯示。主機(jī)cmdlet提供數(shù)據(jù)的缺省格式和輸出。缺省格式和輸出可利用結(jié)合圖19-23如下所述的示例性輸出處理cmdlet。在可選地顯示結(jié)果后,主機(jī)處理完成。用于處理輸入的示例性過程流圖9是示出在圖2所示的管理工具框架中執(zhí)行的用于處理輸入的示例性過程的邏輯流程圖。處理在框901開始,其中輸入通過主機(jī)程序進(jìn)入并被傳送給管理工具框架中的其它組件。處理在框902繼續(xù)。在框902,接收來自主機(jī)程序的輸入。在一示例性管理工具框架中,由解碼輸入并引導(dǎo)輸入作進(jìn)一步處理的解析器接收輸入。處理在判定框904繼續(xù)。在判定框904,確定輸入是否是腳本。輸入可以是腳本或表示命令行的字符串(此后稱為“命令字符串”)的形式。命令字符串可表示經(jīng)管線連接在一起的有關(guān)或多個cmdlet。盡管管理工具框架支持若干不同的主機(jī),每個主機(jī)提供像腳本或者命令字符串的輸入用于進(jìn)行處理。如下所述,腳本和命令字符串之間的交互實際上是遞歸的。例如,腳本可有調(diào)用cmdlet的行。cmdlet本身也可以是腳本。因而,在判定框904,如果輸入是腳本形式,處理在框906繼續(xù),其中執(zhí)行腳本的處理。否則,處理在框908繼續(xù),其中執(zhí)行命令字符串的處理。一旦完成了在框906或908中執(zhí)行的處理,輸入的處理完成。腳本的示例性處理圖10是示出用于處理適于在如圖9所示用于處理輸入的過程中使用的腳本的過程的邏輯流程圖。過程在框1001開始,其中已將輸入標(biāo)識為腳本。腳本引擎和解析器互相通信以執(zhí)行以下功能。處理在框1002繼續(xù)。在框1002,在腳本上執(zhí)行預(yù)處理。簡言之,參看圖11,所示為適于在腳本處理過程1000中使用的腳本預(yù)處理過程1100的邏輯流程圖。腳本預(yù)處理在框1101開始,并在判定框1102繼續(xù)。在判定框1102,確定腳本是否是首次運行。該確定基于從登記處或者其它存儲機(jī)制獲取的信息。從存儲機(jī)制中標(biāo)識腳本并查看相關(guān)聯(lián)數(shù)據(jù)。如果腳本以前未曾運行,則處理在框1104繼續(xù)。在框1104,腳本在登記處中登記。這使有關(guān)腳本的信息能進(jìn)行存儲以便管理工具框架中組件后來的訪問。處理在框1106繼續(xù)。在框1106,從腳本中提取求助及文檔,并將其存入登記處。而且,此信息以后可由管理工具框架中的軟件訪問。至此腳本已準(zhǔn)備好進(jìn)行處理,并返回到圖10中的框1004?;氐脚卸?102,如果過程斷定腳本以前曾運行過,則處理在判定框1108繼續(xù)。在判定框1108,確定腳本是否曾在處理期間失敗。該信息可從登記處獲取。如果腳本未曾失效,則腳本已準(zhǔn)備好進(jìn)行處理,并返回到圖10的框1004。然而,如果腳本已經(jīng)失敗則處理在框1110繼續(xù)。在框1110,腳本引擎可通過主機(jī)程序通知用戶該腳本以前已經(jīng)失敗。這個通知將使用戶判定是繼續(xù)還是退出該腳本。如上結(jié)合圖8所述,取決于輸入類型(例如語音、命令行)主機(jī)程序可用各種方法處理該請求。一旦接收來自用戶的附加輸入,腳本返回到圖10的框1004進(jìn)行處理或者放棄該腳本?;氐綀D10的框1004,檢索來自腳本的行。處理在判定框1006繼續(xù)。在判定框1006,確定該行是否包括任何約束。約束由預(yù)定的開始字符(例如方括號“[”)和結(jié)束字符(例如結(jié)束方括號“]”)檢測。如果該行包括約束,處理移到框1008。在框1008,應(yīng)用包括在行中的約束。一般而言,約束提供一種管理工具框架中的機(jī)制以指定在腳本中輸入的參數(shù)類型,并指定應(yīng)該在參數(shù)上執(zhí)行的校驗邏輯。約束不僅可應(yīng)用于參數(shù),還可應(yīng)用于在腳本中輸入的任何結(jié)構(gòu)類型,諸如變量。因而,約束提供解釋性環(huán)境中的一種機(jī)制,以指定數(shù)據(jù)類型并校驗參數(shù)。在傳統(tǒng)環(huán)境中,系統(tǒng)管理員不能正式測試腳本中輸入的參數(shù)。用于應(yīng)用約束的示例性過程如圖12所示。在判定框1010,確定來自腳本的行是否包括內(nèi)置能力。內(nèi)置能力是不由核心引擎執(zhí)行的能力??墒褂胏mdlet或者諸如命令行內(nèi)功能的其它機(jī)制來處理內(nèi)置能力。如果該行沒有內(nèi)置能力,處理在判定框1014繼續(xù)。否則,處理在框1012繼續(xù)。在框1012,處理在腳本的行上提供的內(nèi)置能力。示例內(nèi)置能力可包括控制結(jié)構(gòu)的執(zhí)行,諸如“if”語句、“for”循環(huán)、轉(zhuǎn)移指令等等。內(nèi)置能力還可包括賦值型語句(例如a=3)。一旦已處理完內(nèi)置能力,處理移到判定框1014。在判定框1014,確定腳本的行是否包括命令字符串。該確定基于行上的數(shù)據(jù)是否與已登記的命令字符串、以及可能cmdlet調(diào)用的語法相關(guān)聯(lián)。如上所述,命令字符串和腳本的相互實際上是遞歸的,因為腳本可包括命令字符串而命令字符串可執(zhí)行本身也是腳本的cmdlet。如果行不包括命令字符串,則處理在判定框1018繼續(xù)。否則,處理在框1016繼續(xù)。在框1016,處理命令字符串。總的看來,命令字符串的處理包括由解析器標(biāo)識cmdlet類,并將相應(yīng)的cmdlet對象傳遞給核心引擎用于執(zhí)行。命令字符串還可包括可解析成若干單個cmdlet對象并由核心引擎分別處理的經(jīng)管線連接的命令字符串。用于處理命令字符串的一示例性過程如下結(jié)合圖14進(jìn)行描述。一旦處理了命令字符串,處理在判定框1018繼續(xù)。在判定框1018,確定在腳本中是否還有另一行。如果在腳本中有另一行,處理回到框1004循環(huán),并如上所述在框1004-1016中繼續(xù)。否則,處理完成。在框1008中用于應(yīng)用約束的示例性過程如圖12所示。過程在框1201開始,其中從腳本或者命令行上的命令字符串中檢測到一約束。當(dāng)該約束在腳本中時,約束和相關(guān)聯(lián)結(jié)構(gòu)可出現(xiàn)在同一行或者分別行上。當(dāng)約束在命令字符串中時,約束及其相關(guān)聯(lián)結(jié)構(gòu)在行指示符(例如換行符)前出現(xiàn)。處理移到框1202。在框1202,從解釋性環(huán)境中獲取約束。在一示例性管理工具環(huán)境中,解析器解碼輸入并確定約束的出現(xiàn)。約束可來自以下種類之一謂詞指示符、解析指示符、數(shù)據(jù)校驗指示符、數(shù)據(jù)生成指示符、處理指示符、編碼指示符、以及文檔指示符。在一示例性解析語法中,指示符在方括號內(nèi)并描述隨后的結(jié)構(gòu)。結(jié)構(gòu)可以是函數(shù)、變量、腳本等等。如下所述,通過指示符的使用,將使腳本作者無需產(chǎn)生任意底層邏輯就能輕松在腳本或者命令行(即解釋性環(huán)境)中鍵入并執(zhí)行參數(shù)上的處理。處理移到框1204。在框1204,所獲取的約束存儲在相關(guān)聯(lián)結(jié)構(gòu)的元數(shù)據(jù)中。在已遇到一個或多個標(biāo)記(標(biāo)注約束的標(biāo)記)之后,相關(guān)聯(lián)結(jié)構(gòu)被標(biāo)識為第一非屬性標(biāo)記。處理移到框1206。在框1206,一旦在腳本或者命令字符串中遇到該結(jié)構(gòu),在元數(shù)據(jù)中定義的約束被應(yīng)用到該結(jié)構(gòu)中。約束可包括數(shù)據(jù)類型、謂詞指示符1210、文檔指示符1212、解析指示符1214、數(shù)據(jù)生成指示符1216、數(shù)據(jù)校驗指示符1218、以及對象處理和編碼指示符1220。指定數(shù)據(jù)類型的約束可指定由管理工具框架在其上運行的系統(tǒng)所支持的任何數(shù)據(jù)類型。謂詞指示符1210是表示處理是否應(yīng)當(dāng)發(fā)生的指示符。因而,謂詞指示符1210確保用于執(zhí)行的環(huán)境是正確的。例如,腳本可包括以下謂詞指示符[PredicateScript(“isInstalled”,”ApplicationZ”)]該謂詞指示符確保在運行腳本之前在計算裝置上安裝了正確的應(yīng)用程序。通常,可把系統(tǒng)環(huán)境變量指定為謂詞指示符。來自指示符類型1212-1220的示例性指示符如表格1-5所示。然后腳本的處理完成。因而,用于在解釋性環(huán)境中應(yīng)用類型和約束的本過程使系統(tǒng)管理員無需編寫用于執(zhí)行本處理的底層邏輯就能輕松指定類型、指定校驗要求等等。以下是在被指定如下的命令字符串上執(zhí)行的約束處理的示例[Integer][ValidationRange(3,5)]$a=4.其中有通過由“[]”標(biāo)記的屬性標(biāo)記指定的兩個約束。第一屬性標(biāo)記表示變量是整數(shù)類型,而第二屬性標(biāo)記表示變量$a的值必須在3~5之間(包括3和5)。示例命令字符串確保如果變量$a在隨后的命令字符串或行中賦值,將根據(jù)這兩個約束來檢查變量$a。因而,每個以下的命令字符串都將導(dǎo)致一錯誤$a=231$a=“apple”$a=$(get/location).約束在管理工具框架中的各個階段上應(yīng)用。例如,可應(yīng)用性指示符、文檔指示符以及解析方針指示符在解析器中的極早階段上進(jìn)行處理。一旦解析器已經(jīng)完成了對所有輸入?yún)?shù)的解析,數(shù)據(jù)生成指示符和校驗指示符就在引擎中進(jìn)行處理。以下表格示出了對各種類別的代表性指示符,以及對響應(yīng)于指示符由管理工具環(huán)境執(zhí)行的處理的解釋。表格1.可應(yīng)用性指示符表格2.解析方針指示符表格3.文檔指示符表格4.數(shù)據(jù)校驗指示符表格5.處理和編碼指示符當(dāng)在示例性管理工具框架在.NETTM框架中操作時,每個類別都有源自基本類別類(例如CmdAttribute)的基本類?;绢悇e類源自System.Attribute類。每個類別都具有解析器在類別處理期間調(diào)用的預(yù)定義函數(shù)(例如attrib.func())。腳本作者可創(chuàng)建源自定制類別類(例如CmdCustomAttribute)的定制類別。腳本作者還可通過從基本類別為該類別導(dǎo)出指示符類來擴(kuò)展現(xiàn)有的類別類,并用其實現(xiàn)來取代預(yù)定義類。腳本作者還可取代諸指示符并把新的指示符添加到指示符的預(yù)定義集中。處理這些指示的順序可存儲在可由解析器訪問的外部數(shù)據(jù)存儲器中。管理工具框架尋找已登記類別并為該類別中的每個指示符調(diào)用函數(shù)(例如ProcessCustomDirective)。因而,通過把類別執(zhí)行信息存儲在持久存儲器中,類別處理的順序可以是動態(tài)的。在不同的處理階段,解析器在持久存儲器中進(jìn)行檢查以確定在那時是否需要執(zhí)行任一元數(shù)據(jù)類別。通過從持久存儲器中移除類別條目就使類別能輕易被廢除。命令字符串的示例性處理現(xiàn)在描述用于處理命令字符串的一示例性過程。圖13是圖示通過如圖2所示管理工具框架中的解析器220和核心引擎224進(jìn)行命令字符串1350的處理的功能流程圖。示例性命令字符串1350通過管線連接若干命令(即process(過程)命令1360、where(地點)命令1362、sort(排序)命令1364、以及table(表格)命令1366)。命令行1350可把輸入?yún)?shù)傳送給任一命令(例如“Handlecount>400”被傳送給where命令1362)。注意,process命令1360沒有任何相關(guān)聯(lián)的輸入?yún)?shù)。過去,每個命令負(fù)責(zé)解析與命令相關(guān)聯(lián)的輸入?yún)?shù)、確定輸入?yún)?shù)是否有效、以及如果輸入?yún)?shù)無效發(fā)布錯誤消息。由于命令通常由各種各樣的編程人員編寫,命令行上輸入?yún)?shù)的語法并不太一致。另外,如果錯誤發(fā)生,各命令之間的錯誤(甚至是相同錯誤)消息也不太一致。例如,在UNIX環(huán)境中,“l(fā)s”命令和“ps”命令之間有很多不一致性。盡管都接受選項“-w”,由“l(fā)s”使用的“-w”用以表示頁面寬度,而由“ps”使用的“-w”選項用以表示打印寬度輸出(實質(zhì)上忽略了頁面寬度)。與“l(fā)s”命令和“ps”命令相關(guān)聯(lián)的求助頁面也具有若干不一致性,諸如一個有粗體選項而另一個沒有、一個有按字母對選項排序而另一個沒有、要求某些選項有破折號而某些沒有。本管理工具框架提供更一致的方法,并使每個開發(fā)者編寫的重復(fù)代碼最少。管理工具框架200提供語法(例如文法)、相應(yīng)語義學(xué)(例如字典)、以及參考模型以使開發(fā)者能輕松獲益于由管理工具框架200提供的共同功能。在進(jìn)一步描述本發(fā)明之前,先提供對自始至終出現(xiàn)在本說明書中的其它術(shù)語的定義。輸入?yún)?shù)指的是cmdlet的輸入字段。自變量指的是傳遞給與argv數(shù)組中單一字符串等價的cmdlet輸入?yún)?shù),或者是作為cmdlet對象中的單一元素傳送的輸入?yún)?shù)。如下所述,cmdlet提供用于指定語法的一種機(jī)制。該機(jī)制能直接或間接提供。自變量是選項、選項-自變量、或者在命令名稱之后的操作數(shù)之一。自變量的示例基于以下命令行給出findstr/i/d\winnt;\winnt\system32aa*b*.ini在以上命令行中,“findstr”是自變量“0”,“/i”是自變量1,“/d\winnt;\winnt\system32”是自變量2,“aa*b”是自變量3,而“*.ini”是自變量4?!斑x項”是一般用于指定對程序缺省行為的改變的cmdlet的自變量。繼續(xù)以上的示例命令行,“/i”和“/d”是選項?!斑x項變量”是某些選項后的輸入?yún)?shù)。在某些情形中,選項-自變量被包括在同一自變量字符串中作為選項。在其它情形中,選項-自變量被包括為下一自變量。再參看以上命令行,“winnt;\winnt\system32”是可選-自變量?!安僮鲾?shù)”是對cmdlet的自變量,通常被用作對于程序而言提供完成程序處理所必須的對象信息的對象。操作數(shù)在命令行中通常在選項后面。再次參看示例命令行,“aa*b”和“*.ini”是操作數(shù)?!翱山馕隽鳌卑ㄗ宰兞?。參看圖13,解析器220把可解析流(例如命令字符串)解析成組成部分1320-1326(例如where部分1322)。1320-1326中每個部分與cmdlet1330-1336之一相關(guān)聯(lián)。解析器220和引擎224執(zhí)行各種處理,諸如解析、參數(shù)校驗、數(shù)據(jù)生成、參數(shù)處理、參數(shù)編碼、以及參數(shù)文檔編制。由于解析器220和引擎224執(zhí)行命令行上輸入?yún)?shù)的共同功能,管理工具框架200能向用戶發(fā)出一致的錯誤消息。可以理解,根據(jù)本管理根據(jù)框架編寫的可執(zhí)行cmdlet1330-1336比在現(xiàn)有管理環(huán)境中的命令需要更少的代碼。每個可執(zhí)行cmdlet1330-1336使用其相應(yīng)組成部分1320-1326進(jìn)行標(biāo)識。另外,每個可執(zhí)行cmdlet1330-1336輸出(由箭頭1340、1342、1344和1346表示)作為下一經(jīng)管線連接cmdlet的輸入對象(由箭頭1341、1343和1345表示)輸入的對象??赏ㄟ^傳遞對于對象的參照(例如句柄)來輸入這些對象。然后可執(zhí)行cmdlet1330-1336可在傳遞進(jìn)來的對象上執(zhí)行其它處理。圖14是更詳細(xì)地示出適于在圖9所示用于處理輸入的過程中使用的命令字符串的處理的邏輯流程圖。命令字符串處理在框1401開始,其中解析器或者腳本引擎標(biāo)識輸入中的命令字符串。一般而言核心引擎執(zhí)行cmdlet數(shù)據(jù)流的建立和排序。一cmdlet的建立和排序在下面進(jìn)行描述,但可應(yīng)用于管線中的每個cmdlet。處理在框1404繼續(xù)。在框1404,標(biāo)識cmdlet。cmdlet的標(biāo)識可通過登記進(jìn)行。核心引擎確定cmdlet是本地還是遠(yuǎn)程的。cmdlet可在以下位置執(zhí)行1)在管理工具框架的應(yīng)用領(lǐng)域內(nèi);2)在與管理工具框架相同進(jìn)程的另一應(yīng)用領(lǐng)域內(nèi);3)在相同計算裝置的另一進(jìn)程中;或4)在遠(yuǎn)程計算裝置中。在相同進(jìn)程中操作的cmdlet之間的通信是通過對象進(jìn)行的。在不同進(jìn)程中操作的cmdlet之間的通信則是通過經(jīng)串行化的結(jié)構(gòu)化數(shù)據(jù)格式。一示例性串行結(jié)構(gòu)化數(shù)據(jù)格式基于可擴(kuò)展標(biāo)記語言(XML)。處理在框1406繼續(xù)。在框1406,創(chuàng)建cmdlet對象的實例。用于創(chuàng)建cmdlet實例的示例性進(jìn)程結(jié)合圖15如下所述。一旦創(chuàng)建了cmdlet對象,處理在框1408繼續(xù)。在框1408,填充與cmdlet對象相關(guān)聯(lián)的屬性。如上所述,開發(fā)者在cmdlet類中或者外部源中聲明屬性。簡言之,管理工具框架將基于為屬性聲明的名稱和類型對從cmdlet類例示的cmdlet來解碼輸入對象。如果類型不相同,類型通過擴(kuò)展的數(shù)據(jù)類型管理器強制推行。如前所述,在經(jīng)管線連接的命令字符串中,每個cmdlet的輸出可以是對象句柄的列表。下一cmdlet可輸入該對象句柄列表、執(zhí)行句柄、并把另一對象句柄列表傳遞給下一cmdlet。另外,如圖7所示,可將輸入?yún)?shù)指定為來自命令行。用于填充與cmdlet相關(guān)聯(lián)屬性的一示例性方法結(jié)合圖16在下面進(jìn)行描述。一旦填充了cmdlet,處理在框1410繼續(xù)。在框1410,執(zhí)行cmdlet??偟目磥恚蒫mdlet提供的處理至少執(zhí)行一次,包括對cmdlet每個輸入對象的處理。因而,如果cmdlet是經(jīng)管線連接命令字符串中的第一cmdlet,執(zhí)行處理一次。對于隨后的cmdlet,對傳遞給cmdlet的每個對象執(zhí)行處理。用于執(zhí)行cmdlet的一示例性方法結(jié)合圖5在下面描述。當(dāng)輸入?yún)?shù)僅來自命令行時,cmdlet的執(zhí)行使用由基本cmdlet情形提供的缺省方法。一旦完成了cmdlet的執(zhí)行,處理移到框1412。在框1412,清空cmdlet。這包括調(diào)用負(fù)責(zé)解除存儲單元分配等等的相關(guān)聯(lián)cmdlet對象的解構(gòu)器(destructor)。然后命令字符串的處理完成。用于創(chuàng)建cmdlet對象的示例性過程圖15是示出用于創(chuàng)建適于在如圖14所示的命令字符串處理中使用的cmdlet對象的示例性過程的邏輯流程圖。此時,已經(jīng)開發(fā)了cmdlet數(shù)據(jù)結(jié)構(gòu)并已指定屬性和期望輸入?yún)?shù)。已編譯和登記了cmdlet。在登記期間,類名(即cmdlet名)被寫入登記存儲器中并已存儲了與cmdlet相關(guān)聯(lián)的元數(shù)據(jù)。過程1500在框1501開始,其中解析器已收到表示cmdlet的輸入(例如鍵擊)。解析器可通過在寄存器中查找輸入并使輸入與已登記的cmdlet之一相關(guān)聯(lián),來把輸入識別為cmdlet。處理移到框1504。在框1504,讀取與cmdlet對象類相關(guān)聯(lián)的元數(shù)據(jù)。該元數(shù)據(jù)包括與cmdlet相關(guān)聯(lián)的任一指示符。該指示符可應(yīng)用cmdlet本身或者一個或多個參數(shù)。在cmdlet登記期間,登記代碼把元數(shù)據(jù)登記到持久存儲器中。元數(shù)據(jù)能以串行化格式存儲在XML文件、外部數(shù)據(jù)庫等等。類似于腳本處理期間指示符的處理,在不同階段上處理每個類別的指示符。每個元數(shù)據(jù)指示符進(jìn)行其自己的錯誤處理。處理在框1506繼續(xù)。在框1506,基于標(biāo)識的cmdlet類來例示cmdlet對象。處理在況1508繼續(xù)。在框1508,獲取有關(guān)cmdlet的信息。這可通過反射或其它方法進(jìn)行。該信息與期望的輸入?yún)?shù)相關(guān)。如上所述,聲明為public(公共)的參數(shù)(例如publicstringName730)對應(yīng)于可在命令行上的命令字符串中指定或者在輸入流中提供的期望輸入?yún)?shù)。通過如圖18所述擴(kuò)展的類型管理器管理工具框架向調(diào)用者提供用于返回信息(基于需要)的公共界面。處理在框1510繼續(xù)。在框1510,應(yīng)用可應(yīng)用性指示符(例如表格1)。可應(yīng)用性指示符確保以某些機(jī)器角色和/或用戶角色來使用該類。例如,某些cmdlet僅可由領(lǐng)域管理員使用。如果不符合在可應(yīng)用性指示符之一中指定的約束,錯誤出現(xiàn)。處理在框1512繼續(xù)。在框1512,使用元數(shù)據(jù)提供智能感應(yīng)。此時在處理中,還未輸入整個命令字符串。然而,管理工具框架知道可用的cmdlet。一旦已確定cmdlet,管理工具框架通過在cmdlet對象上進(jìn)行反射來得知所允許的輸入?yún)?shù)。因而,管理工具框架可在一旦提供了cmdlet名的無歧義部分時就自動完成該cmdlet,并于一旦在命令行上鍵入輸入?yún)?shù)的無歧義部分時就自動完成該輸入?yún)?shù)。一旦輸入?yún)?shù)部分可無歧義地標(biāo)識輸入?yún)?shù)之一,自動完成就可發(fā)生。另外,在cmdlet名和操作數(shù)上也可發(fā)生自動完成。處理在框1514繼續(xù)。在框1514,過程等待直到已經(jīng)輸入了cmdlet的輸入?yún)?shù)。一旦用戶已表示命令字符串的結(jié)束,諸如通過按擊回車鍵,這就可以發(fā)生。在腳本中,新行指示命令字符串的結(jié)束。該等待可包括獲取來自用戶的有關(guān)參數(shù)的附加信息并應(yīng)用其它指示符。當(dāng)cmdlet是經(jīng)管線連接的參數(shù)之一,處理立即開始。一旦已提供了必須的命令字符串和輸入?yún)?shù),處理完成。用于填充cmdlet的示例性過程用于填充cmdlet的示例性過程如圖16所示,現(xiàn)在結(jié)合圖5進(jìn)行描述。在一示例性管理工具框架中,核心引擎執(zhí)行處理以填充cmdlet的參數(shù)。在已創(chuàng)建了cmdlet的實例之后,處理在框1601開始。處理移到框1602。在框1602,檢索在cmdlet中聲明的參數(shù)(例如ProcessName)?;赾mdlet的聲明,核心引擎認(rèn)為進(jìn)入的輸入對象將提供名為“ProcessName”的屬性。如果進(jìn)入屬性的類型與在參數(shù)聲明中指定的類型不相同,該類型將通過擴(kuò)展的類型管理器強制推行。強制推行數(shù)據(jù)類型的過程在下面題為“示例性擴(kuò)展的類型管理器處理”的章節(jié)中解釋。處理在框1603繼續(xù)。在框1603,獲得與參數(shù)相關(guān)聯(lián)的屬性。該屬性標(biāo)識參數(shù)的輸入源是否是命令行或者它是否來自管線。處理移到判定框1604。在判定框1604,確定屬性是否把輸入源指定為命令行。如果輸入源是命令行,處理在框1609繼續(xù)。否則,處理在判定框1605繼續(xù)。在判定框1605,確定是否應(yīng)當(dāng)使用在聲明中指定的屬性名或者使用對屬性名的映射。該確定基于該命令輸入是否指定了對參數(shù)的映射。下列行示出了參數(shù)“ProcessName”與下述進(jìn)入對象的“foo”成員的映射Sget/process|wherehan*-gt500|stop/process-ProcessName<-foo.處理在框1606繼續(xù)。在框1606,應(yīng)用映射。該映射把期望參數(shù)的名稱從“ProcessName”替換為“foo”,然后“foo”由核心引擎使用以解析進(jìn)入對象并標(biāo)識正確的期望參數(shù)。處理在框1608繼續(xù)。在框1608,查詢擴(kuò)展的類型管理器以定位進(jìn)入對象中參數(shù)的值。如結(jié)合擴(kuò)展的類型管理器所述,擴(kuò)展的類型管理器取參數(shù)名,并使用反射以參數(shù)名來標(biāo)識進(jìn)入對象中的參數(shù)。如果需要,擴(kuò)展的類型管理器還可執(zhí)行對參數(shù)的其它處理。例如,擴(kuò)展的類型管理器可通過如上所述的轉(zhuǎn)換機(jī)制把數(shù)據(jù)類型強制轉(zhuǎn)換為期望的數(shù)據(jù)類型。處理移到判定框1610。再看框1609,如果屬性規(guī)定輸入源是命令行,則獲得來自命令行的數(shù)據(jù)。從命令行獲取數(shù)據(jù)可通過擴(kuò)展的類型管理器來執(zhí)行。然后處理移到判定框1610。在判定框1610,確定是否有另一期望參數(shù)。如果有另一期望參數(shù),處理回到框1602循環(huán)并如上所述繼續(xù)。否則,處理完成并返回。因而,如圖所示,cmdlet擔(dān)當(dāng)用于分解輸入數(shù)據(jù)以獲取期望參數(shù)的模板。另外,無需知道提供期望參數(shù)值的進(jìn)入對象的類型就可獲取期望參數(shù)。這與傳統(tǒng)的管理環(huán)境頗為不同。傳統(tǒng)管理環(huán)境是緊密綁定的并需要對象類型在編譯時為已知。另外,在傳統(tǒng)環(huán)境中,期望參數(shù)會通過值或調(diào)用傳遞到函數(shù)中去。因而,本解析(例如“分解”)機(jī)制使編程人員無需具體地知道如何獲取這些參數(shù)的值就能指定參數(shù)類型。例如,給出對于cmdletFoo的以下聲明classFooCmdlet{stringName;BoolRecurse;}命令行語法可以是以下的任一種$Foo-Name(string)-RecurseTrue$Foo-Name<string>-RecurseTrue$Foo-Name(string).規(guī)則集可由系統(tǒng)管理員更改以便產(chǎn)生所需語法。另外,解析器可支持多個規(guī)則集從而用戶可使用一種以上語法。本質(zhì)上,與cmdlet結(jié)構(gòu)(例如stringName和BoolRecurse)相關(guān)聯(lián)的語法引導(dǎo)解析器。一般而言,解析指示能描述輸入為命令字符串的參數(shù)應(yīng)當(dāng)如何映射成在cmdlet對象中標(biāo)識的期望參數(shù)。檢查輸入?yún)?shù)類型以確定其是否正確。如果輸入?yún)?shù)類型不正確,則迫使輸入?yún)?shù)變成正確的。如果輸入?yún)?shù)類型不正確且不能強制轉(zhuǎn)換,則打印使用錯誤。使用錯誤使用戶開始知道所期望的正確語法。使用錯誤可獲取描述來自文檔指示符語法的信息。一旦已映射或者驗證了輸入?yún)?shù)類型,填充cmdlet對象實例中的相應(yīng)成員。當(dāng)填充成員時,擴(kuò)展的類型管理器提供對輸入?yún)?shù)類型的處理。簡言之,該處理可包括屬性路徑機(jī)制、關(guān)鍵詞機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、globber機(jī)制、關(guān)系機(jī)制、以及屬性集機(jī)制。這些機(jī)制的每一種都在下面題為“擴(kuò)展的類型管理器處理”的章節(jié)中詳細(xì)描述,其中還包括說明性示例。用于執(zhí)行cmdlet的示例性過程用于執(zhí)行cmdlet的示例性過程如圖17所示,現(xiàn)在進(jìn)行描述。在一示例性管理工具環(huán)境中,核心引擎執(zhí)行cmdlet。如上所述,對每個輸入對象都執(zhí)行第二方法1440中的代碼1442。處理在框1701開始,其中已經(jīng)填充了cmdlet。處理在框1702繼續(xù)。在框1702,檢索來自代碼542的語句用于執(zhí)行。處理在判定框1704繼續(xù)。在判定框1704,確定是否在語句中包括hook。簡單看一下圖5,hook可包括調(diào)用由核心引擎提供的API。例如,圖5cmdlet500的代碼542中的語句550調(diào)用指定必須參數(shù)、第一字符串(例如PID=)以及參數(shù)(例如PID)的confirmprocessingAPI。再看圖17,如果語句包括hook,處理在框1712繼續(xù)。因而,如果已指定了調(diào)用confirmprocessingAPI的指令,則cmdlet以由操作環(huán)境提供的另選執(zhí)行模式進(jìn)行操作。否則,處理在框1706繼續(xù)且執(zhí)行以“正?!蹦J嚼^續(xù)。在框1706,處理語句。然后處理在判定框1708繼續(xù)。在框1708,確定代碼是否包括另一語句。如果有另一語句,處理回到框1702循環(huán)以得到下一語句并如上所述繼續(xù)。否則,處理在判定框1714繼續(xù)。在判定框1714,確定是否有另一輸入對象要處理。如果有另一輸入對象,處理移到框1716,其中用來自下一對象的數(shù)據(jù)來填充cmdlet。用下一對象來執(zhí)行如圖16所示的填充過程。然后處理回到框1702循環(huán)并如上所述繼續(xù)。一旦已處理了所有的對象,用于執(zhí)行cmdlet的過程完成并返回?;氐脚卸?704,如果語句包括hook,則處理在框1712繼續(xù)。在框1712,處理由管理工具環(huán)境提供的附加屬性。處理在判定框1708繼續(xù)并如上所述繼續(xù)進(jìn)行。現(xiàn)在結(jié)合如圖6所示示例性數(shù)據(jù)結(jié)構(gòu)600描述在框1712中執(zhí)行的附加處理。如上所述,在公共基本類600中可具有經(jīng)聲明的對應(yīng)于附加期望輸入?yún)?shù)(例如轉(zhuǎn)移指令)的參數(shù)。轉(zhuǎn)移指令包括預(yù)定字符串,并且當(dāng)被識別時引導(dǎo)核心引擎向cmdlet提供附加功能。如果在命令輸入中指定參數(shù)verbose610,則執(zhí)行verbose語句614。以下是包括verbose轉(zhuǎn)移指令的命令行示例$get/process|where“han*-gt500”|stop/process-verbose一般而言,當(dāng)在命令輸入中指定“-verbose”時,核心引擎對每個輸入對象執(zhí)行該命令并向主機(jī)程序傳送對每個輸入對象所執(zhí)行的真實命令用于顯示。以下是當(dāng)在示例性管理工具環(huán)境中執(zhí)行以上命令行時產(chǎn)生的輸出示例$stop/processPID=15$stop/processPID=33如果在命令輸入中指定參數(shù)whatif620,執(zhí)行whatif語句624。以下是包括whatif轉(zhuǎn)移指令的命令行示例$get/process|where“han*-gt500”|stop/process-whati一般而言,當(dāng)在命令輸入中指定“-whatif”時,核心引擎并沒有真正執(zhí)行代碼542,而是向主機(jī)程序傳送所執(zhí)行的命令用于顯示。以下是當(dāng)在本發(fā)明的示例性管理工具環(huán)境中執(zhí)行以上命令行時產(chǎn)生的輸出示例#$stop/processPID=15#$stop/processPID=33如果在命令輸入中指定參數(shù)confirm630,執(zhí)行confirm語句634。以下是包括confirm轉(zhuǎn)移指令的命令行示例$ger/process|where“han*-gt500”|stop/process-confirm一般而言,當(dāng)在命令輸入中指定“-confirm”時,核心引擎請求有關(guān)是否要繼續(xù)進(jìn)行命令的附加用戶輸入。以下是當(dāng)在本發(fā)明的示例性管理工具環(huán)境中執(zhí)行以上命令行時產(chǎn)生的輸出示例$stop/processPID15Y/NY$stop/processPID33Y/NN.如上所述,示例性數(shù)據(jù)結(jié)構(gòu)600還可包括確定是否應(yīng)允許請求執(zhí)行的任務(wù)的security(安全)方法640。在傳統(tǒng)管理環(huán)境中,每個命令負(fù)責(zé)檢查執(zhí)行該指令的人是否有足夠的特權(quán)來執(zhí)行該命令。為了執(zhí)行該檢查,需要擴(kuò)展代碼以訪問來自若干源的信息。由于這樣的復(fù)雜性,很多命令都不執(zhí)行安全檢查。本管理工具環(huán)境的發(fā)明者認(rèn)識到,當(dāng)在命令輸入中指定任務(wù)時,用于執(zhí)行安全檢查的必要信息在管理工具環(huán)境中可得到。因此,管理工具框架無需來自工具開發(fā)者的復(fù)雜代碼就可執(zhí)行安全檢查??蓪υ谄鋍mdlet中定義有hook的任何cmdlet執(zhí)行安全檢查?;蛘撸c上述verbose參數(shù)相似,hook可以是在命令輸入中指定的可選輸入?yún)?shù)。實現(xiàn)安全檢查以支持基于角色的認(rèn)證,它通常被定義為基于用戶角色控制哪些用戶可訪問資源的系統(tǒng)。因而,每個角色被分配以對不同資源的某些訪問權(quán)。然后對用戶分配一個或多個角色。一般而言,基于角色的認(rèn)證集中在三項主角、資源、和動作。主要是標(biāo)識誰請求在資源上執(zhí)行動作。本發(fā)明的發(fā)明者認(rèn)識到正在請求的cmdlet對應(yīng)于要執(zhí)行的動作。另外,發(fā)明者理解管理工具框架所執(zhí)行的過程的主人對應(yīng)于主角。此外,發(fā)明者知道資源在cmdlet中指定。因此,由于管理工具框架已訪問這些項,發(fā)明者認(rèn)識到無需工具開發(fā)者實現(xiàn)安全檢查在管理工具框架中就可執(zhí)行安全檢查。在通過使用諸如confirmprocessingAPI的hook的cmdlet中請求附加功能的任何時候,可執(zhí)行對安全檢查的操作?;蛘撸赏ㄟ^檢查在命令行上是否輸入了類似于verbose、whatif和confirm的安全轉(zhuǎn)移指令來實現(xiàn)安全檢查。對于任一種實現(xiàn),checkSecurity方法調(diào)用由安全過程(未示出)提供的API,其中該安全過程提供一組用于確定允許誰的API。安全過程取得由管理工具框架提供的信息,并提供表示是否可完成任務(wù)的結(jié)果。然后管理工具框架可提供錯誤或者僅停止該任務(wù)的執(zhí)行。因而,通過提供cmdlet中的hook,開發(fā)者可使用由管理工具框架提供的附加處理。示例性擴(kuò)展的類型管理器處理如上結(jié)合圖18的簡述,擴(kuò)展的類型管理器在所提供對象上可執(zhí)行附加處理??稍诮馕銎?20、腳本引擎222、或管線處理器402的請求下執(zhí)行附加處理。附加處理包括屬性路徑機(jī)制、關(guān)鍵詞機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、globber機(jī)制、關(guān)系機(jī)制、以及屬性集機(jī)制。本領(lǐng)域技術(shù)人員將理解,還可用其它處理來擴(kuò)展擴(kuò)展的類型管理器,而不背離本發(fā)明的范圍?,F(xiàn)在描述每個附加處理機(jī)制。首先,屬性路徑機(jī)制使字符串能導(dǎo)航對象的屬性。在現(xiàn)有的反映系統(tǒng)中,查詢可查詢對象的屬性。然而,在本擴(kuò)展的類型管理器中,可指定將向?qū)ο蟮碾S后屬性提供導(dǎo)航路徑的字符串。以下是對屬性路徑P1、P2、P3、P4的說明性語法。每個組件(例如P1、P2、P3和P4)包括可表示屬性、帶參數(shù)的方法、無參數(shù)的方法、域、XPATH等等的字符串。XPATH指定查詢字符串以搜索元素(例如“/FOO@=13”)。在字符串中,可包括特定字符以具體表明組件類型。如果字符串不包括特定字符,擴(kuò)展的類型管理器可執(zhí)行查找以確定組件類型。例如,如果組件P1是一對象,擴(kuò)展的類型管理器可查詢P2是否是對象的屬性、對象上的方法、對象的域、或者屬性集。一旦擴(kuò)展的類型管理器標(biāo)識了P2的類型,執(zhí)行根據(jù)該類型的處理。如果組件不是以上類型之一,則擴(kuò)展的類型管理器可進(jìn)一步查詢經(jīng)擴(kuò)展源以確定是否有把P1類型轉(zhuǎn)換成P2類型的轉(zhuǎn)換函數(shù)。現(xiàn)在將使用說明性命令字符串來描述這些和其它查找并顯示相應(yīng)輸出。以下是包括屬性路徑的說明性字符串$get/process|/wherehand*-gt>500|format/tablename.toupper,ws.kb,exe*.ver*.description.tolower.trunc(30).在以上說明性字符串中,有三個屬性路徑(1)“name.toupper”(2)“ws.kb”(3)“exe*.ver*.description.tolower.trunc(30)”。在描述這些屬性路徑之前,應(yīng)當(dāng)注意“name”、“ws”、和“exe”指定了table(表格)的屬性。另外應(yīng)當(dāng)注意這些屬性的每一個都是原來由“get/process”產(chǎn)生然后通過各個cmdlet經(jīng)管線連接的輸入對象的直接屬性。現(xiàn)在將描述涉及對三個屬性路徑的每一個的處理。在第一屬性路徑中(即“name.toupper”),name(名稱)是輸入對象的直接屬性,且它本身也是對象。擴(kuò)展的類型管理器使用如上所述的優(yōu)先級查找查詢系統(tǒng)以確定toupper的類型。擴(kuò)展的類型管理器發(fā)現(xiàn)toupper不是屬性。然而,toupper可能是一種由字符串類型遺留的把字符串中的小寫字母轉(zhuǎn)換成大寫字母的方法?;蛘撸瑪U(kuò)展的類型管理器可查詢擴(kuò)展的元數(shù)據(jù)以確定是否有把name對象轉(zhuǎn)換成大寫的任何第三方代碼。在找到組件類型之后,根據(jù)該組件類型執(zhí)行處理。在第二屬性路徑中(即“ws.kb”),“ws”是輸入對象的直接屬性,且它本身也是對象。擴(kuò)展的類型管理器確定“ws”是整數(shù)。然后,擴(kuò)展的類型管理器查詢kb是否是整數(shù)的屬性、是否kb是整數(shù)的方法,最后查詢?nèi)魏未a是否知道如何取得整數(shù)并將該整數(shù)轉(zhuǎn)換成kb類型。登記執(zhí)行該轉(zhuǎn)換的第三方代碼,并執(zhí)行該轉(zhuǎn)換。在第三屬性路徑中(即“exe*.ver*.description.tolower.trunc(30)”),有若干組件。第一組件(“exe*”)是輸入對象的直接屬性,且它本身也是對象。擴(kuò)展的類型管理器再次繼續(xù)查找查詢以便處理第二組件(“ver*”)?!癳xe*”對象沒有“ver*”屬性或方法,因此擴(kuò)展的類型管理器查詢經(jīng)擴(kuò)展元數(shù)據(jù)以確定是否有任何已登記代碼把可執(zhí)行名稱轉(zhuǎn)換成一版本。對于該示例,這種代碼存在。該代碼可取得可執(zhí)行名稱字符串并使用它來打開文件,然后訪問版本塊對象,并返回版本塊對象的描述屬性(第三組件“description”)。然后擴(kuò)展的類型管理器對第四組件(“tolower”)和第五組件(“trunc(30)”)執(zhí)行同樣的查找機(jī)制。因而,如上所述,擴(kuò)展的類型管理器無需管理員編寫任何特定代碼就可在命令字符串上執(zhí)行頗為詳盡的處理。。表1示出了說明性字符串所產(chǎn)生的輸出Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18.556officeoutlookMSMSGS13,248messenger表1另一查詢機(jī)制1824包括關(guān)鍵詞。該關(guān)鍵詞標(biāo)識使數(shù)據(jù)類型實例成為唯一的一個或多個屬性。例如,在數(shù)據(jù)庫中,可將唯一標(biāo)識每行的一列標(biāo)識為關(guān)鍵詞(例如社會安全號SSN)。該關(guān)鍵詞存儲在與數(shù)據(jù)類型相關(guān)聯(lián)的類型元數(shù)據(jù)1840中。然后在處理該數(shù)據(jù)類型的對象時由擴(kuò)展的類型管理器使用該關(guān)鍵詞。數(shù)據(jù)類型可以是經(jīng)擴(kuò)展數(shù)據(jù)類型或現(xiàn)有數(shù)據(jù)類型。另一查詢機(jī)制1824包括比較機(jī)制。比較機(jī)制比較兩個對象。如果該兩個對象直接支持比較函數(shù),則執(zhí)行該直接支持的比較函數(shù)。然而,如果沒有一個對象支持比較函數(shù),則擴(kuò)展的類型管理器可在類型元數(shù)據(jù)中查找已登記支持兩個對象之間比較的代碼。如下所示是調(diào)用比較機(jī)制的命令行字符串的一說明性序列,以及表2中的相應(yīng)輸出。$$a=$(get/date)$start/sleep5$$b=$(get/datecompare/time$a$bTicks51196579Days0Hours0Milliseconds119Minutes0Seconds5TotalDays5.92552997685185E-05TotalHours0.00142212719444444TotalMilliseconds5119.6579TotalMinutes0.0853276316666667TotalSeconds5.1196579表2編寫用以比較兩個datetime(日期時間)對象的compare/time(比較/時間)cmdlet。在此情形中,DateTime對象支持Icomparable界面。另一查詢機(jī)制1824包括轉(zhuǎn)換機(jī)制。擴(kuò)展的類型管理器使代碼能進(jìn)行登記,表述其執(zhí)行特定轉(zhuǎn)換的能力。然后,當(dāng)輸入類型A的對象并且cmdlet指定類型B的對象時,擴(kuò)展的類型管理器可使用經(jīng)登記轉(zhuǎn)換之一來執(zhí)行轉(zhuǎn)換。擴(kuò)展的類型管理器可執(zhí)行一序列轉(zhuǎn)換以把類型A強制轉(zhuǎn)換成類型B。如上所述的屬性路徑(“ws.kb”)示出了轉(zhuǎn)換機(jī)制。另一查詢機(jī)制1824包括globber機(jī)制。globber指的是字符串中的通配符。globber機(jī)制輸入代通配符的字符串并產(chǎn)生一組對象。擴(kuò)展的類型管理器使指定通配符處理的代碼能進(jìn)行登記。如上所述的屬性路徑(“exe*.ver*.description.tolower.trunc(30)”)示出了globber機(jī)制。登記的過程可提供文件名、文件對象、輸入屬性等等的加通配符(globbing)。另一查詢機(jī)制1824包括屬性集機(jī)制。屬性集機(jī)制使能對一組屬性定義名稱。然后管理員可在命令字符串中指定名稱以獲取該組屬性??梢愿鞣N方法定義屬性集。在一種方法中,諸如“?”的預(yù)定義參數(shù)可作為cmdlet的輸入?yún)?shù)輸入。在識別以下預(yù)定義參數(shù)之后,操作環(huán)境列出輸入對象的所有屬性。該列表可以是使管理員能輕松檢查(例如“點擊”)所需屬性并命名屬性集的GUI。然后將該屬性集信息存儲在擴(kuò)展的元數(shù)據(jù)中。以下示出調(diào)用屬性集機(jī)制的說明性字符串,以及表3中的相應(yīng)輸出$get/process|wherehan*-gt>500|format/tableconfig在此說明性字符串中,名為“config”的屬性集被定義為包括名稱屬性、過程id屬性(Pid)、以及優(yōu)先級屬性。表的輸出如下所示NamePidPriorityETClient3528Normalcsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一查詢機(jī)制1824包括關(guān)系機(jī)制。與支持一種關(guān)系(即遺留)的傳統(tǒng)類型系統(tǒng)相反,該關(guān)系機(jī)制支持類型之間一種以上關(guān)系的表達(dá)。再一次,登記這些關(guān)系。關(guān)系可包括尋找對象消費的條目或者尋找消費對象的條目。擴(kuò)展的類型管理器可訪問描述各種關(guān)系的本體。使用擴(kuò)展的元數(shù)據(jù)和代碼,可描述訪問諸如OWL、DAWL等等的任何本體服務(wù)的規(guī)范。以下是利用關(guān)系機(jī)制的部分說明性字符串.OWL“string”?!癘WL”標(biāo)識符標(biāo)識本體服務(wù)而“string”指定本體服務(wù)中的特定字符串。因而,擴(kuò)展的類型管理器可訪問由本體服務(wù)提供的類型。用于顯示命令行數(shù)據(jù)的示例性過程本機(jī)制提供數(shù)據(jù)驅(qū)動的命令行輸出。由cmdlet管線中的一個或多個cmdlet提供數(shù)據(jù)的格式化和輸出。通常,這些cmdlet包括在如上結(jié)合圖2所述的非管理cmdlet中。cmdlet可包括格式cmdlet、標(biāo)記cmdlet、轉(zhuǎn)換cmdlet、變換cmdlet以及輸出cmdlet。圖19圖示出管線中這些cmdlet的示例性序列1901-1907。第一序列1901把輸出cmdlet1910示為管線中最后的cmdlet。以如上所述對其它cmdlet的相同方式,輸出cmdlet1910接受由管線中其它cmdlet產(chǎn)生并處理的管線對象流。然而,與大多數(shù)cmdlet相反,輸出cmdlet1910并不發(fā)出其它cmdlet的管線對象。相反,輸出cmdlet1910負(fù)責(zé)描繪/顯示由管線產(chǎn)生的結(jié)果。每個輸出cmdlet1910與輸出目標(biāo)相關(guān)聯(lián),諸如裝置、程序等等。例如,對于控制臺裝置,輸出cmdlet1910可被指定為out/console(輸出/控制臺);對于因特網(wǎng)瀏覽器,輸出cmdlet1910可被指定為輸出/瀏覽器;以及對于視窗,輸出cmdlet1910可被指定為輸出/視窗。每個特定輸出cmdlet都熟悉其相關(guān)聯(lián)目標(biāo)的能力。本地信息(例如日期和現(xiàn)金格式)由輸出cmdlet1910進(jìn)行處理,除非在管線中轉(zhuǎn)換cmdlet位于輸出cmdlet前面。在此情形中,轉(zhuǎn)換cmdlet處理本地信息。每臺主機(jī)負(fù)責(zé)支持諸如out/console的某些輸出cmdlet。主機(jī)還支持任意目標(biāo)特定主機(jī)cmdlet(例如引導(dǎo)對由電子制表應(yīng)用程序提供的圖表的輸出的out/chart(輸出/圖表))。另外,主機(jī)負(fù)責(zé)提供結(jié)果的缺省處理。此序列中的輸出cmdlet可通過調(diào)用其它輸出處理cmdlet(諸如格式/標(biāo)記/轉(zhuǎn)換/變換)來決定實現(xiàn)其行為。因而,輸出cmdlet可隱含地把序列1901更改為任意的其它序列,或者可添加它自己附加的格式/輸出cmdlet。第二序列1902示出輸出cmdlet1910之前的格式cmdlet1920。對于該序列,格式cmdlet1920接受管線中其它cmdlet產(chǎn)生并處理的管線對象流。總的看來,格式cmdlet1920提供一種選擇顯示屬性的方法和一種指定頁面布局的方法,諸如形狀、列寬度、頁眉、頁腳等等。形狀可包括表格、寬列表、柱形列表等等。另外,格式cmdlet1920提供總值或總數(shù)的計算。由格式cmdlet1920執(zhí)行的示例性處理結(jié)合圖20在下面描述。簡言之,格式cmdlet除發(fā)出管線對象外,還發(fā)出格式對象。格式對象可通過擴(kuò)展的類型管理器或其它機(jī)制在輸出cmdlet(例如序列1902中的輸出cmdlet1920)下游得到識別。輸出cmdlet1920可選擇使用被發(fā)出的格式對象或者選擇略去它們。輸出cmdlet基于在顯示信息中指定的頁面布局?jǐn)?shù)據(jù)確定頁面布局。在某些實例中,可由輸出cmdlet來指定對頁面布局的更改。在一示例性過程中,通過找到預(yù)定數(shù)量對象每個屬性的最大長度并把列寬設(shè)定為最大長度,輸出cmdlet可確定未指定的列寬。格式對象包括格式化信息、頁眉/頁腳信息等等。第三序列1903示出在輸出cmdlet1910之前的格式cmdlet1920。然而,在第三序列1903中,標(biāo)記cmdlet1930經(jīng)管線連接在格式cmdlet1920和輸出cmdlet1910之間。標(biāo)記cmdlet1930提供用于把屬性注解(例如字體、色彩)添加到選定參數(shù)的一種機(jī)制。因而,標(biāo)記cmdlet1930出現(xiàn)在輸出cmdlet1910前面。使用“陰影屬性包”或者通過把屬性注解添加到屬性包中的定制名空間可實現(xiàn)屬性注解。只要在處理格式cmdlet1920期間可保持標(biāo)記注解,標(biāo)記cmdlet1930就可出現(xiàn)在格式cmdlet1920前面。第四序列1904再次示出了輸出cmdlet1910之前的格式cmdlet1920。然而,在第四序列1904中,轉(zhuǎn)換cmdlet1940經(jīng)管線連接在格式cmdlet1920和輸出cmdlet1910之間。轉(zhuǎn)換cmdlet1940還被配置為用以處理由格式cmdlet1920發(fā)出的格式對象。轉(zhuǎn)換cmdlet1940把經(jīng)管線連接的對象轉(zhuǎn)換成基于格式對象的特定編碼。轉(zhuǎn)換cmdlet1940與特定編碼相關(guān)聯(lián)。例如,把經(jīng)管線的連接對象轉(zhuǎn)換成活動目錄對象(ADO)的轉(zhuǎn)換cmdlet1940可在命令行上被聲明為“convert/ADO”(“轉(zhuǎn)換/ADO”)。類似地,把經(jīng)管線連接的對象轉(zhuǎn)換成逗號分隔值(csv)的轉(zhuǎn)換cmdlet1940可在命令行上被聲明為“convert/csv”(“轉(zhuǎn)換/csv”)。某些轉(zhuǎn)換cmdlet1940(例如convert/XML(轉(zhuǎn)換/XML)和convert/html(轉(zhuǎn)換/XML))可阻擋命令,意思是在執(zhí)行轉(zhuǎn)換前接收所有的經(jīng)管線連接的對象。通常,輸出cmdlet1920可確定是否要使用由格式對象提供的格式化信息。然而,當(dāng)轉(zhuǎn)換cmdlet1920出現(xiàn)在輸出cmdlet1920前面時,在輸出cmdlet接收對象前真正的數(shù)據(jù)轉(zhuǎn)換已經(jīng)發(fā)生了。因此,在此情形中,輸出cmdlet不可略去該轉(zhuǎn)換。第五序列1905示出按順序排列的格式cmdlet1920、標(biāo)記cmdlet1930、轉(zhuǎn)換cmdlet1940以及輸出cmdlet1910。因而,這說明標(biāo)記cmdlet1930可出現(xiàn)在轉(zhuǎn)換cmdlet1940前面。第六序列1906示出格式cmdlet1920、特定轉(zhuǎn)換cmdlet(例如convert/xmlcmdlet1940’)、特定變換cmdlet(例如transform/xslt(變換/xslt)cmdlet1950)以及輸出cmdlet1910。convert/xmlcmdlet1940’把經(jīng)管線連接的對象轉(zhuǎn)換成可擴(kuò)展標(biāo)記語言(XML)文檔。transform/xsltcmdlet1950則使用一可擴(kuò)展樣式語言(XSL)的樣式表格把XML文檔變換為另一XML文檔。該變換過程通常稱為可擴(kuò)展樣式語言變換(XSLT),其中XSL處理器讀取XML文檔并在XSL樣式表格中按照這些指令創(chuàng)建新的XML文檔。第七序列1907示出了格式cmdlet1920、標(biāo)記cmdlet1930、特定轉(zhuǎn)換cmdlet(例如convert/xmlcmdlet1940’)、特定變換cmdlet(例如transform/xslt(變換/xslt)cmdlet1950)以及輸出cmdlet1910。因而,第七序列1907示出具有在轉(zhuǎn)換cmdlet和變換cmdlet上游的標(biāo)記cmdlet1930。圖20示出了由格式cmdlet執(zhí)行的示例性處理2000。在格式cmdlet已由解析器和管線處理器用以上所述的方式進(jìn)行解析和調(diào)用后,格式化過程在框2001開始。處理在框2002繼續(xù)。在框2002,管線對象作為格式cmdlet的輸入被接收。處理在框2004繼續(xù)。在框2004,開始查詢以標(biāo)識經(jīng)管線連接的對象的類型。該查詢由結(jié)合圖18如上所述的擴(kuò)展的類型管理器執(zhí)行。一旦擴(kuò)展的類型管理器已標(biāo)識了該對象的類型,處理在框2006繼續(xù)。在框2006,在顯示信息中查找經(jīng)標(biāo)識類型。顯示信息的示例性格式如圖21所示并在下面描述。處理在判定框2008繼續(xù)。在判定框2008,確定是否在顯示信息中指定了經(jīng)標(biāo)識的類型。如果顯示信息中沒有對于經(jīng)標(biāo)識類型的條目,則處理完成。否則,處理在框2010繼續(xù)。在框2010,與經(jīng)標(biāo)識類型相關(guān)聯(lián)的格式化信息從顯示信息中獲取。處理在框2012上繼續(xù)。在框2012,信息在管線上發(fā)出。一旦發(fā)出信息,處理完成?,F(xiàn)在更詳細(xì)地描述發(fā)出的示例性信息。該信息可包括格式化信息、頁眉/頁腳信息、以及組的結(jié)束/開始信號對象。格式化信息可包括形狀、標(biāo)簽、編號方式/著重號、列寬、字符編碼類型、內(nèi)容字體屬性、頁面長度、按屬性分組名稱等等。這些中的每一個都具有與其相關(guān)聯(lián)的附加規(guī)范。例如,形狀可指定該形狀是否是表格、列表等等。標(biāo)簽可指定是否使用列標(biāo)題、列表標(biāo)號等等。字符編碼可指定ASCII、UTF-8、Unicode等等。內(nèi)容字體屬性可指定應(yīng)用于屬性值的顯示字體。如果未指定內(nèi)容字體屬性,可使用缺省字體屬性(例如CourierNew,字號10)。頁眉/頁腳信息可包括頁眉/頁腳范圍、字體屬性、標(biāo)題、分標(biāo)題、日期、時間、頁面編號方式、分隔符等等。例如,范圍可指定一個文檔、一個頁面、一個組等等。可指定頁眉或頁腳的附加屬性。例如,對于組和文檔頁腳,附加屬性可包括用以計算總數(shù)/總值、對象計數(shù)、總數(shù)和計數(shù)的標(biāo)號字符串等等的屬性或列。當(dāng)格式cmdlet檢測到按屬性分組的組已改變時發(fā)出組的結(jié)束/開始信號對象。當(dāng)它發(fā)生時,格式cmdlet將管線對象流處理成事先排序的,但不對其重新排序。組的結(jié)束/開始信號對象可散布在管線對象中??芍付ㄓ糜谇短着判虻亩鄠€按屬性分組的屬性。格式cmdlet還可發(fā)出包括最后總數(shù)和總值的格式結(jié)束對象。再簡單看一下圖21,示例性顯示信息2100是結(jié)構(gòu)化格式的,并包含與已定義的每個對象相關(guān)聯(lián)的信息(例如格式化信息、頁眉/頁腳信息、按屬性或方法分組的組)。例如,顯示信息2100可以基于XML。然后可在顯示信息中指定每個前述屬性。顯示信息2100中的信息可由正在輸入的對象類型的所有者進(jìn)行填充。操作環(huán)境提供某些使所有者通過創(chuàng)建、刪除以及更改條目來更新顯示信息的API和cmdlet。圖22是列出某些格式cmdlet(例如format/table、format/list和format/wide)、標(biāo)記cmdlet(例如add/markup)、轉(zhuǎn)換cmdlet(例如convert/text、convert/sv、convert/csv、convert/ADO、convert/xml、convert/html)、變換cmdlet(例如transform/xslt)以及輸出cmdlet(例如out/console、out/file)的示例性語法2201-2213的表格。圖23示出由out/consolecmdlet使用各種輸出處理cmdlet(例如格式cmdlet、轉(zhuǎn)換cmdlet和標(biāo)記cmdlet)的管線序列所產(chǎn)生的結(jié)果。如上所述,可在管理工具環(huán)境中采用用于提供數(shù)據(jù)驅(qū)動命令行輸出的一種機(jī)制。然而,本領(lǐng)域技術(shù)人員將理解,可在各種各樣需要顯示經(jīng)管線連接命令的結(jié)果的環(huán)境中采用該機(jī)制。通過使用各種管線序列的輸出處理cmdlet,命令行用戶可用最少的代碼產(chǎn)生穩(wěn)固和多樣的顯示。相反,使用傳統(tǒng)機(jī)制,則需要輸出命令中的大量代碼。另外,這些大量代碼可以與其它輸出命令中的其它代碼不一致。用于顯示結(jié)果的傳統(tǒng)機(jī)制中的這些和其它限制都被用于提供數(shù)據(jù)驅(qū)動命令行輸出的本機(jī)制克服了。盡管特定實現(xiàn)和實施例的細(xì)節(jié)已如上作了描述,這樣的細(xì)節(jié)旨在滿足法定指示義務(wù)而不是限制以下權(quán)利要求的范圍。因而,由權(quán)利要求書定義的本發(fā)明不受以上所述的特定特征的限制。相反,根據(jù)等效性原則的適當(dāng)解釋,本系統(tǒng)和方法以所附權(quán)利要求書適當(dāng)范圍內(nèi)的任何形式或者變體進(jìn)行權(quán)利要求的聲明。權(quán)利要求1.一種用于處理數(shù)據(jù)的計算機(jī)實現(xiàn)方法,其特征在于,所述方法包括在支持多個基于對象命令的管線操作環(huán)境中,在所述管線中后面的命令被配置成通過管線中前面的命令所發(fā)出的可解析對象來與所述前面命令進(jìn)行通信,所述操作環(huán)境被配置為支持所述相同過程中命令的執(zhí)行;接收從所述前面命令發(fā)出的所述可解析對象;獲取對所述可解析對象的數(shù)據(jù)類型;獲取描述對所述數(shù)據(jù)類型的格式的格式信息;以及發(fā)出用于另一后面命令的訪問的格式對象,所述格式對象基于所述格式信息。2.如權(quán)利要求1所述的計算機(jī)實現(xiàn)方法,其特征在于,獲取格式信息包括訪問基于XML的文檔。3.如權(quán)利要求1所述的計算機(jī)實現(xiàn)方法,其特征在于,所述后面的命令包括被配置為基于所述收到的可解析對象和所述格式對象來呈現(xiàn)所述管線結(jié)果的輸出命令。4.如權(quán)利要求3所述的計算機(jī)實現(xiàn)方法,其特征在于,所述結(jié)果的呈現(xiàn)包括在控制臺上的顯示。5.如權(quán)利要求3所述的計算機(jī)實現(xiàn)方法,其特征在于,所述結(jié)果的呈現(xiàn)包括把所述結(jié)果引入應(yīng)用程序中。6.如權(quán)利要求3所述的計算機(jī)實現(xiàn)方法,其特征在于,所述結(jié)果的呈現(xiàn)包括在圖形用戶界面中顯示。7.如權(quán)利要求1所述的計算機(jī)實現(xiàn)方法,其特征在于,所述其它后面的命令包括標(biāo)記命令,其被配置成把屬性注解添加到所述可解析對象的選定參數(shù)中,并發(fā)送所述屬性注解作為所述管線中更后面命令的輸入。8.如權(quán)利要求1所述的計算機(jī)實現(xiàn)方法,其特征在于,所述其它后面的命令包括被配置用以把所述收到的可解析流轉(zhuǎn)換成特定格式的轉(zhuǎn)換命令。9.如權(quán)利要求8所述的計算機(jī)實現(xiàn)方法,其特征在于,所述特定格式包括XML文檔、活動目錄對象、或者逗號分隔值格式。10.如權(quán)利要求8所述的計算機(jī)實現(xiàn)方法,其特征在于,所述另一后面的命令包括變換命令,其從所述轉(zhuǎn)換命令接收所述特定格式并基于樣式表格把所述特定格式變換為另一特定格式。11.如權(quán)利要求1所述的計算機(jī)實現(xiàn)方法,其特征在于,所述格式信息描述所述數(shù)據(jù)類型和形狀、屬性、或者頁眉的至少之一。12.一種具有計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì),所述指令用于提供數(shù)據(jù)驅(qū)動輸出,其特征在于,所述指令包括在操作環(huán)境中接收從前面命令發(fā)出的可解析對象,所述操作環(huán)境支持多個基于對象命令的管線并被配置成支持所述相同過程中所述命令的執(zhí)行,所述前面命令是所述多個命令之一;獲取所述可解析對象的數(shù)據(jù)類型;獲取描述所述數(shù)據(jù)類型的格式的格式信息;以及發(fā)出用于對來自多個命令的后面命令的訪問的格式對象,所述格式對象基于所述格式信息。13.如權(quán)利要求12所述的計算機(jī)可讀介質(zhì),其特征在于,獲取格式信息包括訪問基于XML的文檔。14.如權(quán)利要求12所述的計算機(jī)可讀介質(zhì),其特征在于,所述后面的命令包括被配置為基于所述收到的可解析對象和所述格式對象來呈現(xiàn)所述管線結(jié)果的輸出命令。15.如權(quán)利要求12所述的計算機(jī)可讀介質(zhì),其特征在于,所述其它后面的命令包括標(biāo)記命令,其被配置成把屬性注解添加到所述可解析對象的選定參數(shù)中,并發(fā)送所述屬性注解作為所述管線中更后面命令的輸入。16.如權(quán)利要求12所述的計算機(jī)可讀介質(zhì),其特征在于,所述其它后面的命令包括被配置成把所述收到的可解析流轉(zhuǎn)換成特定格式的轉(zhuǎn)換命令。17.如權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其特征在于,所述特定格式包括XML文檔、活動目錄對象、或者逗號分隔值格式。18.如權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其特征在于,所述另一后面的命令包括變換命令,其從所述轉(zhuǎn)換命令接收所述特定格式并基于樣式表格把所述特定格式變換為另一特定格式。19.如權(quán)利要求12所述的計算機(jī)可讀介質(zhì),其特征在于,所述格式信息描述所述數(shù)據(jù)類型和形狀、屬性、或者頁眉的至少之一。20.一種支持?jǐn)?shù)據(jù)驅(qū)動輸出的系統(tǒng),其特征在于,所述系統(tǒng)包括一處理器;一存儲器,所述存儲器被分配用于多個計算機(jī)可執(zhí)行指令,它們加載到所述存儲器由所述處理器執(zhí)行,所述計算機(jī)可執(zhí)行指令執(zhí)行一種方法,包括在操作環(huán)境中接收從前面命令發(fā)出的可解析對象,所述操作環(huán)境支持多個基于對象命令的管線并被配置成支持所述相同過程中命令的執(zhí)行,所述前面命令是所述多個命令之一;獲取所述可解析對象的數(shù)據(jù)類型;獲取描述所述數(shù)據(jù)類型的格式的格式信息;以及發(fā)出用于對由來自多個命令的后面命令的訪問的格式對象,所述格式對象基于所述格式信息。21.如權(quán)利要求20所述的系統(tǒng),其特征在于,獲取格式信息包括訪問基于XML的文檔。22.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述格式信息描述所述數(shù)據(jù)類型和形狀、屬性、或者頁眉的至少之一。23.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述其它后面的命令包括標(biāo)記命令,其被配置為用以把屬性注解添加到所述可解析對象的選定參數(shù)中,并發(fā)送所述屬性注解作為所述管線中更后面命令的輸入。24.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述另一后面的命令包括一轉(zhuǎn)換命令,其配置成將所述接收的可解析流轉(zhuǎn)換成特定格式。25.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述另一后面的命令包括變換命令,其從所述轉(zhuǎn)換命令接收所述特定格式,并基于樣式表格把所述特定格式變換為另一特定格式。全文摘要本機(jī)制提供在支持基于對象命令的管線的環(huán)境中的數(shù)據(jù)驅(qū)動命令行輸出。每個基于對象命令輸入用于處理的可解析對象(2002),并輸出用于隨后命令處理的另一可解析對象。該機(jī)制基于輸入的可解析對象類型(2004)引導(dǎo)命令的格式化及其隨后處理上是有效的。獲得諸如形狀、要顯示屬性等等的對類型的格式信息??稍诨赬ML的文檔中指定該格式信息(2008)。該機(jī)制利用一個或多個輸出處理命令,諸如格式命令、標(biāo)記命令、轉(zhuǎn)換命令、變換命令(2010)、以及輸出命令(2012)。可用各種方法在管線中安排這些輸出處理命令以獲取所需輸出結(jié)果(2012)。文檔編號G06F15/00GK1846204SQ200480001250公開日2006年10月11日申請日期2004年7月23日優(yōu)先權(quán)日2003年10月24日發(fā)明者J·P·斯諾弗爾,K·M·漢森,M·謝諾提申請人:微軟公司