專利名稱::獲取并應(yīng)用交互式環(huán)境內(nèi)對(duì)構(gòu)造的約束的機(jī)制的制作方法
技術(shù)領(lǐng)域:
:此處所揭示的主題涉及交互式環(huán)境,尤其涉及獲取并應(yīng)用交互式環(huán)境內(nèi)的約束。
背景技術(shù):
:一般而言,有兩種類型的代碼經(jīng)編譯的代碼和經(jīng)解釋的代碼。在過(guò)去,經(jīng)編譯的代碼被編譯成目標(biāo)代碼,然后與其它目標(biāo)代碼鏈接以創(chuàng)建在運(yùn)行時(shí)執(zhí)行的可執(zhí)行代碼。當(dāng)今,在某些環(huán)境中,經(jīng)編譯的代碼包括被編譯成中間形式的源代碼。在運(yùn)行時(shí),中間形式被編譯成本機(jī)代碼用于執(zhí)行。在這些情形的任一種下,開發(fā)者可對(duì)源代碼中編程的每一構(gòu)造指定類型。類型包括整數(shù)、串、浮點(diǎn)等等。相反,對(duì)于交互式環(huán)境內(nèi)的經(jīng)解釋的代碼,交互式環(huán)境將每一變量作為串來(lái)處理。因此,交互式用戶可能無(wú)法對(duì)變量指定類型。因此,需要一種用于向交互式環(huán)境內(nèi)的變量分配類型和其它約束的機(jī)制。發(fā)明概述本發(fā)明的機(jī)制獲取交互式環(huán)境內(nèi)的約束、將這些約束與構(gòu)造相關(guān)聯(lián)、然后在遇到構(gòu)造時(shí)向構(gòu)造應(yīng)用這些約束。約束可以保存在與相應(yīng)的構(gòu)造相關(guān)聯(lián)的元數(shù)據(jù)中。約束可指定構(gòu)造的數(shù)據(jù)類型、謂詞偽指令、文檔編制偽指令、語(yǔ)法分析偽指令、數(shù)據(jù)生成偽指令、數(shù)據(jù)確認(rèn)偽指令或?qū)ο筇幚砗途幊虃沃噶睢<s束是可擴(kuò)充的,以支持其它偽指令。該機(jī)制允許交互式用戶容易地、交互地指定約束。附圖的簡(jiǎn)要描述圖1示出了可使用示例性管理工具環(huán)境的示例性計(jì)算裝置。圖2是概括地示出了用于本發(fā)明的管理工具環(huán)境的示例性管理工具框架的綜述的框圖。圖3所示是圖2所示的管理工具框架的主機(jī)專用組件內(nèi)的組件的框圖。圖4所示是圖2所示的管理工具框架的核心引擎組件內(nèi)的組件的框圖。圖5是用于指定適于在圖2所示的管理工具框架內(nèi)使用的小命令(cmdlet)的一個(gè)示例性數(shù)據(jù)結(jié)構(gòu)。圖6是用于指定從其導(dǎo)出圖5所示的小命令的命令基礎(chǔ)類型的示例性數(shù)據(jù)結(jié)構(gòu)。圖7是用于指定適于在圖2所示的管理工具框架內(nèi)使用的小命令的另一示例性數(shù)據(jù)結(jié)構(gòu)。圖8所示是在圖2所示的管理工具框架內(nèi)執(zhí)行的用于主機(jī)處理的示例性過(guò)程的邏輯流程圖。圖9所示是在圖2所示的管理工具框架內(nèi)執(zhí)行的用于處理輸入的示例性過(guò)程的邏輯流程圖。圖10所示是用于處理適于在圖9所示的處理輸入過(guò)程內(nèi)使用的腳本的過(guò)程的邏輯流程圖。圖11所示是適用于在圖10所示的腳本處理過(guò)程中使用的腳本預(yù)處理過(guò)程的邏輯流程圖。圖12所示是用于應(yīng)用適用于在圖10所示的腳本處理過(guò)程中使用的約束的過(guò)程的邏輯流程圖。圖13所示是圖2所示的管理工具框架中的命令串的處理的功能流程圖。圖14所示是用于處理適于在圖9所示的處理輸入過(guò)程中使用的命令串的過(guò)程的邏輯流程圖。圖15所示是用于創(chuàng)建適于在圖14所示的命令行處理中使用的小命令的實(shí)例的示例性過(guò)程的邏輯流程圖。圖16所示是用于填充適于在圖14所示的命令處理中使用的小命令的屬性的示例性過(guò)程的邏輯流程圖。圖17所示是用于執(zhí)行適于在圖14所示的命令處理中使用的小命令的示例性過(guò)程的邏輯流程圖。圖18是適于在圖2所示的管理工具框架內(nèi)使用的示例性擴(kuò)展類型管理程序的功能框圖。圖19圖形地描述了管道內(nèi)的輸出處理小命令的示例性序列。圖20示出了由圖19所示的輸出處理小命令之一執(zhí)行的示例性處理。圖21圖形地描述了在圖20的處理期間訪問(wèn)的顯示信息的示例性結(jié)構(gòu)。圖22是列出示例性輸出處理小命令的示例性句法的表格。圖23示出了外部/控制臺(tái)小命令使用輸出處理小命令的各種管道序列呈現(xiàn)的結(jié)果。較佳實(shí)施例的詳細(xì)描述簡(jiǎn)言之,本發(fā)明獲取交互式環(huán)境內(nèi)的約束,并將這些應(yīng)用到交互式環(huán)境內(nèi)輸入的構(gòu)造上。約束可保存在與相應(yīng)的構(gòu)造相關(guān)聯(lián)的元數(shù)據(jù)中。約束可指定構(gòu)造的數(shù)據(jù)類型、構(gòu)造的有效范圍等等。該機(jī)制允許交互式用于容易地、交互地指定約束。以下描述闡明了本機(jī)制可在其中操作的具體示例性管理工具環(huán)境。其它示例性環(huán)境可包括該具體實(shí)施例的特征和/或其它特征,其目標(biāo)是便于交互式環(huán)境內(nèi)的約束處理。以下詳細(xì)描述被劃分成若干章節(jié)。第一節(jié)描述了其中管理工具環(huán)境可在其中操作的說(shuō)明性計(jì)算環(huán)境。第二節(jié)描述了管理工具環(huán)境的示例性框架。隨后的章節(jié)描述了示例性框架的各個(gè)組件以及這些組件的操作。例如,結(jié)合圖12的“腳本的示例性處理”一節(jié)描述了獲取并應(yīng)用交互式環(huán)境內(nèi)的約束的示例性機(jī)制。示例性計(jì)算環(huán)境圖1示出了可在一個(gè)示例性管理工具環(huán)境中使用的一個(gè)示例性計(jì)算裝置。在十分基本的配置中,計(jì)算裝置100通常包括至少一個(gè)處理單元102和系統(tǒng)存儲(chǔ)器104。根據(jù)計(jì)算裝置的確切配置和類型,系統(tǒng)存儲(chǔ)器104可以是易失(如RAM)、非易失(如ROM、閃存等)或兩者的某一組合。系統(tǒng)存儲(chǔ)器104通常包括操作系統(tǒng)105、一個(gè)或多個(gè)程序模塊106,并且可包括程序數(shù)據(jù)107。操作系統(tǒng)包括基于組件的框架,它支持組件(包括屬性和事件)、對(duì)象、繼承、多態(tài)性、反射,并提供面向?qū)ο蟮幕诮M件的應(yīng)用編程接口(API),如由華盛頓州雷蒙德市微軟公司生產(chǎn)的.NETTM框架的API。操作系統(tǒng)105也包括與基于組件的框架120交互的管理工具框架200,以支持管理工具(未示出)的開發(fā)。這一基本配置在圖1中由虛線108內(nèi)的那些組件示出。計(jì)算裝置100可具有另外的特征或功能。例如,計(jì)算裝置100也可包括另外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)和/或不可移動(dòng)),如磁盤、光盤或磁帶。這類另外的存儲(chǔ)在圖1中由可移動(dòng)存儲(chǔ)109和不可移動(dòng)存儲(chǔ)110示出。計(jì)算機(jī)存儲(chǔ)介質(zhì)可包括以用于儲(chǔ)存如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任一方法和技術(shù)實(shí)現(xiàn)的易失和非易失、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器104、可移動(dòng)存儲(chǔ)109和不可移動(dòng)存儲(chǔ)110都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、磁盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái)儲(chǔ)存期望的信息并可由計(jì)算裝置100訪問(wèn)的任一其它介質(zhì)。任一這類計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是裝置100的一部分。計(jì)算裝置100也可具有(多個(gè))輸入設(shè)備112,如鍵盤、鼠標(biāo)、輸入筆、語(yǔ)音輸入設(shè)備、觸摸輸入設(shè)備等等。也可包括(多個(gè))輸出設(shè)備114,如顯示器、揚(yáng)聲器、打印機(jī)等等。這些設(shè)備在本領(lǐng)域中都是眾所周知的,無(wú)需在此詳細(xì)描述。計(jì)算裝置110也包含允許裝置如通過(guò)網(wǎng)絡(luò)與其它計(jì)算裝置118進(jìn)行通信的通信連接116。通信連接116是通信介質(zhì)的一個(gè)示例。通信介質(zhì)通??梢灾T如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)實(shí)施的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并包括任何信息傳送介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”指以對(duì)信號(hào)中的信息進(jìn)行編碼的方式設(shè)置或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例而非局限,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接連線連接,以及無(wú)線介質(zhì),如聲學(xué)、RF、紅外和其它無(wú)線介質(zhì)。本發(fā)明使用的術(shù)語(yǔ)計(jì)算機(jī)可讀介質(zhì)包括存儲(chǔ)介質(zhì)和通信介質(zhì)兩者。示例性管理工具框架圖2是概括地示出了示例性管理工具框架200的綜述的框圖。管理工具框架200包括一個(gè)或多個(gè)主機(jī)組件202、主機(jī)專用組件204、主機(jī)無(wú)關(guān)組件206以及處理程序組件208。主機(jī)無(wú)關(guān)組件206可與其它組件(即,主機(jī)組件202、主機(jī)專用組件204和處理程序組件208)的每一個(gè)通信。這些組件的每一個(gè)在下文簡(jiǎn)要描述,并在需要時(shí)在隨后的章節(jié)中詳細(xì)描述。主機(jī)組件主機(jī)組件202包括一個(gè)或多個(gè)主機(jī)程序(如,主機(jī)程序210-214),它們向用戶或其它程序展示了用于相關(guān)聯(lián)的應(yīng)用程序的自動(dòng)化特征。每一主機(jī)程序210-214可以其自己特有的風(fēng)格展示這些自動(dòng)化特征,例如通過(guò)命令行、圖形用戶界面(GUI)、語(yǔ)音識(shí)別接口、應(yīng)用編程接口(API)、腳本語(yǔ)言、web服務(wù)等等。然而,主機(jī)程序210-214的每一個(gè)通過(guò)由管理工具框架提供的機(jī)制展示了一個(gè)或多個(gè)自動(dòng)化特征。在本示例中,該機(jī)制使用了小命令(cmdlet)以向相關(guān)聯(lián)的主機(jī)程序210-214的用戶提供管理工具能力的表面。另外,該機(jī)制使用了一組由主機(jī)變得可用的接口以在與對(duì)應(yīng)的主機(jī)程序210-214相關(guān)聯(lián)的應(yīng)用程序中嵌入管理工具環(huán)境。貫穿以下討論,術(shù)語(yǔ)“小命令”用于指在參考圖2-23描述的示例性管理工具環(huán)境內(nèi)使用的命令。小命令對(duì)應(yīng)于傳統(tǒng)管理環(huán)境內(nèi)的命令。然而,小命令與這些傳統(tǒng)命令完全不同。例如,小命令通常比其相對(duì)的命令在大小上更小,因?yàn)樾∶羁墒褂霉芾砉ぞ呖蚣芴峁┑墓霉δ埽缯Z(yǔ)法分析、數(shù)據(jù)確認(rèn)、出錯(cuò)報(bào)告等等。由于這些公用功能可被實(shí)現(xiàn)一次并測(cè)試一次,因此貫穿管理工具框架對(duì)小命令的使用允許與應(yīng)用程序?qū)S霉δ芟嚓P(guān)聯(lián)的遞增開發(fā)和測(cè)試成本與傳統(tǒng)環(huán)境相比相對(duì)較低。另外,與傳統(tǒng)的環(huán)境相反,小命令不需要是獨(dú)立的可執(zhí)行程序。相反,小命令可以在管理工具框架內(nèi)的同一進(jìn)程中運(yùn)行。這允許小命令在彼此之間交換“活動(dòng)”對(duì)象。這一交換“活動(dòng)”對(duì)象的能力允許小命令直接在這些對(duì)象上調(diào)用方法。創(chuàng)建和使用小命令的細(xì)節(jié)在下文更詳細(xì)地描述。總體上,每一主機(jī)程序210-214管理用戶和管理工具框架內(nèi)的其它組件之間的交互。這些交互可包括對(duì)參數(shù)的提示、錯(cuò)誤報(bào)告等等。通常,每一主機(jī)程序210-213可提供其自己的專用主機(jī)小命令集(例如,主機(jī)小命令218)。例如,如果主機(jī)程序是電子郵件程序,則主機(jī)程序可提供與郵箱和消息交互的主機(jī)小命令。即使圖2示出了主機(jī)程序210-214,然而本領(lǐng)域的技術(shù)人員可以理解,主機(jī)組件202可包括與現(xiàn)有或新創(chuàng)建的應(yīng)用程序相關(guān)聯(lián)的其它主機(jī)程序。這些其它主機(jī)程序也將把由管理工具環(huán)境提供的功能嵌入在其相關(guān)聯(lián)的應(yīng)用程序內(nèi)。由主機(jī)程序提供的處理在下文結(jié)合圖8詳細(xì)描述。在圖2所示的示例中,主機(jī)程序可以是管理控制臺(tái)(即,主機(jī)程序210),它提供了簡(jiǎn)單、一致的管理用戶界面,以供用戶創(chuàng)建、保存和打開管理計(jì)算裝置的硬件、軟件和網(wǎng)絡(luò)組件的管理工具。為實(shí)現(xiàn)這些功能,主機(jī)程序210提供了用于在管理工具框架上構(gòu)建管理GUI的一組服務(wù)。GUI交互也可被展示為用戶可見(jiàn)的腳本,它幫助將由管理工具環(huán)境提供的腳本能力教給用戶。在另一示例中,主機(jī)程序可以是命令行交互式外殼(即,主機(jī)程序212)。命令行交互式外殼可允許外殼元數(shù)據(jù)216在命令行上輸入,以影響命令行的處理。在又一示例中,主機(jī)程序可以是web服務(wù)(即,主機(jī)程序214),它使用用于跨平臺(tái)的分布式計(jì)算和互操作性的行業(yè)標(biāo)準(zhǔn)規(guī)范、編程語(yǔ)言和應(yīng)用程序。除這些示例之外,第三方可通過(guò)創(chuàng)建在其主機(jī)程序或其它主機(jī)程序中使用的“第三方”或“提供者”接口和提供者小命令,來(lái)添加其自己的主機(jī)組件。提供者接口展示了應(yīng)用程序或基礎(chǔ)結(jié)構(gòu),使得該應(yīng)用程序或基礎(chǔ)結(jié)構(gòu)可由管理工具框架來(lái)操縱。提供者小命令提供了用于導(dǎo)航、診斷、配置、生命周期、操作等的自動(dòng)化。提供者小命令展示了完整的數(shù)據(jù)存儲(chǔ)異構(gòu)集上的多態(tài)小命令行為。管理工具環(huán)境在提供者小命令上用與其它小命令類相同的優(yōu)先級(jí)操作。提供者小命令是使用與其它小命令相同的機(jī)制創(chuàng)建的。提供者小命令向管理工具框架展示了應(yīng)用程序或基礎(chǔ)結(jié)構(gòu)的特定功能。由此,通過(guò)使用小命令,產(chǎn)品開發(fā)者只需創(chuàng)建一個(gè)主機(jī)程序,它然后將允許其產(chǎn)品對(duì)許多管理工具運(yùn)作。例如,采用示例性管理工具環(huán)境,系統(tǒng)級(jí)圖形用戶界面幫助菜單可以被集成并移植到現(xiàn)有的應(yīng)用程序中。主機(jī)專用組件主機(jī)專用組件204包括計(jì)算裝置(例如,圖1描述的計(jì)算裝置100)用于將管理工具框架與該框架所運(yùn)行的平臺(tái)細(xì)節(jié)相隔離的服務(wù)的集合。由此,對(duì)每一類型的平臺(tái)有一組主機(jī)專用組件。主機(jī)專用組件允許用戶在不同的操作系統(tǒng)上使用同一管理工具。簡(jiǎn)要地轉(zhuǎn)向圖3,主機(jī)專用組件204可包括智能感知(intellisense)/元數(shù)據(jù)訪問(wèn)組件302、幫助小命令組件304、配置/注冊(cè)組件306、小命令設(shè)置組件308以及輸出接口組件309。組件302-308與關(guān)聯(lián)于數(shù)據(jù)庫(kù)存儲(chǔ)314的數(shù)據(jù)庫(kù)存儲(chǔ)管理器312通信。語(yǔ)法分析器220和腳本引擎222與智能感知/元數(shù)據(jù)訪問(wèn)組件302通信。核心引擎224與幫助小命令組件304、配置/注冊(cè)組件306、小命令設(shè)置組件308和輸出接口組件309通信。輸出接口組件309包括由主機(jī)向外部小命令提供的接口。這些外部小命令然后可調(diào)用主機(jī)的輸出對(duì)象來(lái)執(zhí)行呈現(xiàn)。主機(jī)專用組件204也可包括日志記錄/審計(jì)組件310,核心引擎224使用該組件來(lái)與提供日志記錄和審計(jì)能力的主機(jī)專用(即,平臺(tái)專用)服務(wù)通信。在一個(gè)示例性管理工具框架中,智能感知/元數(shù)據(jù)訪問(wèn)組件302提供了命令、參數(shù)和參數(shù)值的自動(dòng)完成。幫助小命令組件304提供了基于主機(jī)用戶界面的定制幫助系統(tǒng)。處理器組件回頭參考圖2,處理器組件208包括傳統(tǒng)實(shí)用程序230、管理小命令232、非管理小命令234、遠(yuǎn)程小命令236以及web服務(wù)接口238。管理小命令232(也稱為平臺(tái)小命令)包括查詢或操縱與計(jì)算裝置相關(guān)聯(lián)的配置信息的小命令。由于管理小命令232操作系統(tǒng)類型信息,因此它們依賴于特定的平臺(tái)。然而,每一平臺(tái)通常具有提供與其它平臺(tái)上的管理小命令232類似的行動(dòng)的管理小命令232。例如,每一平臺(tái)支持獲取和設(shè)置系統(tǒng)管理屬性(如,獲取/處理、設(shè)置/IP地址)的管理小命令232。主機(jī)無(wú)關(guān)組件206通過(guò)主機(jī)無(wú)關(guān)組件206內(nèi)生成的小命令對(duì)象與管理小命令通信。用于小命令對(duì)象的示例性數(shù)據(jù)結(jié)構(gòu)將在下文結(jié)合圖5-7詳細(xì)描述。非管理小命令234(有時(shí)候稱為基礎(chǔ)小命令)包括在由管理小命令232提供的對(duì)象上組合、排序、過(guò)濾和執(zhí)行其它處理的小命令。非管理小命令234也可包括用于格式化并輸出與管道化對(duì)象相關(guān)聯(lián)的數(shù)據(jù)的小命令。用于提供數(shù)據(jù)驅(qū)動(dòng)命令行輸出的一種示例性機(jī)制在下文參考圖19-23描述。非管理小命令234可以在每一平臺(tái)上是相同的,并提供了一組通過(guò)小命令對(duì)象與主機(jī)無(wú)關(guān)組件206交互的實(shí)用程序。非管理小命令234和主機(jī)無(wú)關(guān)組件之間206的交互允許對(duì)象上的反射,并允許與其(對(duì)象)類型無(wú)關(guān)地在反射的對(duì)象上進(jìn)行處理。由此,這些實(shí)用程序允許開發(fā)者一次書寫非管理小命令,然后跨計(jì)算系統(tǒng)上支持的所有對(duì)象類應(yīng)用這些非管理小命令。在過(guò)去,開發(fā)者必須首先充分理解要處理的數(shù)據(jù)的格式,然后書寫應(yīng)用程序來(lái)僅處理該數(shù)據(jù)。結(jié)果,傳統(tǒng)應(yīng)用程序只能處理非常有限范圍的數(shù)據(jù)。用于與其對(duì)象類型無(wú)關(guān)地處理對(duì)象的一種示例性機(jī)制在下文結(jié)合圖18描述。傳統(tǒng)實(shí)用程序230包括現(xiàn)有的可執(zhí)行代碼,諸如在cmd.exe下運(yùn)行的win32可執(zhí)行代碼。每一傳統(tǒng)實(shí)用程序230使用文本流(即,stdin和stdout)與管理工具框架通信,文本流是對(duì)象框架內(nèi)的一種對(duì)象類型。由于傳統(tǒng)實(shí)用程序230使用了文本流,因此由管理工具框架提供的基于反射的操作是不可用的。傳統(tǒng)實(shí)用程序230在與管理工具框架不同的進(jìn)程內(nèi)執(zhí)行。盡管未示出,其它小命令也可在進(jìn)程外操作。遠(yuǎn)程小命令236與web服務(wù)接口238一起提供了通過(guò)諸如因特網(wǎng)或內(nèi)聯(lián)網(wǎng)(例如,圖2所示的因特網(wǎng)/內(nèi)聯(lián)網(wǎng)240)等通信介質(zhì)訪問(wèn)其它計(jì)算裝置上的交互式和編程管理工具環(huán)境的遠(yuǎn)程機(jī)制。在一個(gè)示例性管理工具框架中,遠(yuǎn)程機(jī)制支持依賴于跨越多個(gè)獨(dú)立控制域的基礎(chǔ)結(jié)構(gòu)上的聯(lián)合服務(wù)。遠(yuǎn)程機(jī)制允許腳本在遠(yuǎn)程計(jì)算裝置上執(zhí)行。腳本可以在單個(gè)或多個(gè)遠(yuǎn)程系統(tǒng)上運(yùn)行。腳本的結(jié)果可以當(dāng)每一個(gè)別的腳本完成時(shí)被處理,或者結(jié)果可以被累積,并在各種計(jì)算裝置上的所有腳本完成之后一起處理。例如,被示出為主機(jī)組件202之一的web服務(wù)214可以是遠(yuǎn)程代理。遠(yuǎn)程代理處理遠(yuǎn)程命令請(qǐng)求對(duì)目標(biāo)系統(tǒng)上的語(yǔ)法分析器和管理工具框架的提交。遠(yuǎn)程小命令擔(dān)當(dāng)以提供對(duì)遠(yuǎn)程代理的訪問(wèn)的遠(yuǎn)程客戶機(jī)。遠(yuǎn)程代理和遠(yuǎn)程小命令通過(guò)經(jīng)語(yǔ)法分析的流來(lái)通信。該經(jīng)語(yǔ)法分析的流可以在協(xié)議層上保護(hù),或者可使用另外的小命令來(lái)加密,然后解密經(jīng)語(yǔ)法分析的流。主機(jī)無(wú)關(guān)組件主機(jī)無(wú)關(guān)組件包括語(yǔ)法分析器220、腳本引擎222以及核心引擎224。主機(jī)無(wú)關(guān)組件206提供了組合多個(gè)小命令、協(xié)調(diào)小命令的操作以及協(xié)調(diào)其它資源、會(huì)話和作業(yè)與小命令的交互的機(jī)制和服務(wù)。示例性語(yǔ)法分析器語(yǔ)法分析器220提供了從各種主機(jī)程序接收輸入請(qǐng)求并將輸入請(qǐng)求映射到貫穿整個(gè)管理工具框架使用,諸如在核心引擎224內(nèi)使用的統(tǒng)一小命令對(duì)象的機(jī)制。另外,語(yǔ)法分析器220可基于接收到的輸入執(zhí)行數(shù)據(jù)處理。用于基于輸入執(zhí)行數(shù)據(jù)處理的一種示例性方法在下文結(jié)合圖12描述。本發(fā)明的管理工具框架的語(yǔ)法分析器220提供了簡(jiǎn)單地向用戶展現(xiàn)同一能力的不同的語(yǔ)言或句法的能力。例如,由于語(yǔ)法分析器220負(fù)責(zé)解釋輸入請(qǐng)求,因此語(yǔ)法分析器220內(nèi)影響期望輸入句法的代碼改變本質(zhì)上將影響管理工具框架的每一用戶。因此,系統(tǒng)管理員可在不同的計(jì)算裝置上提供支持不同句法的不同的語(yǔ)法分析器。然而,用同一語(yǔ)法分析器操作的每一用戶對(duì)每一小命令將經(jīng)歷一致的句法。相反,在傳統(tǒng)的環(huán)境中,每一命令實(shí)現(xiàn)其自己的句法。由此,對(duì)于上千種命令,每一環(huán)境支持若干不同的句法,它們中的大多數(shù)通常彼此不一致。示例性腳本引擎腳本引擎222提供了使用腳本將多個(gè)小命令聯(lián)系在一起的機(jī)制和服務(wù)。腳本是在繼承的嚴(yán)格規(guī)則下共享會(huì)話狀態(tài)的命令行的聚集?;谳斎胝?qǐng)求中提供的句法,腳本內(nèi)的多個(gè)命令行可以同步或異步地執(zhí)行。腳本引擎22能夠處理諸如如循環(huán)和條件子句等控制構(gòu)造,并能夠處理腳本內(nèi)的變量。腳本引擎也管理會(huì)話狀態(tài),并向小命令給予基于政策(未示出)對(duì)會(huì)話數(shù)據(jù)的訪問(wèn)。示例性核心引擎核心引擎224負(fù)責(zé)處理由語(yǔ)法分析器220識(shí)別的小命令。簡(jiǎn)單地轉(zhuǎn)向圖4,示出了管理工具框架200內(nèi)的一個(gè)示例性核心引擎。該示例性核心引擎224包括管道處理器402、加載器404、元數(shù)據(jù)處理器406、以及出錯(cuò)和事件處理器308、會(huì)話管理器410、以及擴(kuò)展類型管理器412。示例性元數(shù)據(jù)處理器元數(shù)據(jù)處理器406被配置成訪問(wèn)元數(shù)據(jù)并將其儲(chǔ)存在諸如圖3所示的數(shù)據(jù)庫(kù)存儲(chǔ)314等元數(shù)據(jù)存儲(chǔ)中。元數(shù)據(jù)可以通過(guò)命令行、在小命令類定義內(nèi)等提供。管理工具框架200內(nèi)的不同組件可在執(zhí)行其處理時(shí)請(qǐng)求元數(shù)據(jù)。例如,語(yǔ)法分析器202可請(qǐng)求元數(shù)據(jù)以確認(rèn)命令行上提供的參數(shù)。示例性出錯(cuò)和事件處理器出錯(cuò)和事件處理器408提供了一錯(cuò)誤對(duì)象,它儲(chǔ)存關(guān)于命令行的處理期間的每一出錯(cuò)發(fā)生的信息。對(duì)于尤其適合本發(fā)明的管理工具框架的一個(gè)特定出錯(cuò)和事件處理器的額外信息,請(qǐng)參閱名為“SystemandMethodforPersistingErrorInformationinaCommandLineEnvironment(用于持久保存命令行環(huán)境中的錯(cuò)誤信息的系統(tǒng)和方法)”的美國(guó)專利申請(qǐng)?zhí)朹______/美國(guó)專利號(hào)______,其為本發(fā)明的同一受讓人所有,并通過(guò)引用結(jié)合于此。示例性會(huì)話管理器會(huì)話管理器410向管理工具框架200內(nèi)的其它組件提供會(huì)話和狀態(tài)信息。會(huì)話管理器管理的狀態(tài)信息可由任一小命令、主機(jī)或核心引擎通過(guò)編程接口來(lái)訪問(wèn)。這些編程接口允許狀態(tài)信息的創(chuàng)建、修改和刪除。示例性管道處理器和加載器加載器404被配置成加載存儲(chǔ)器中的每一小命令,以使管道處理器402能夠執(zhí)行小命令。管道處理器402包括小命令處理器420和小命令管理器422。小命令處理器420分派個(gè)別的小命令。如果小命令需要在遠(yuǎn)程或一組遠(yuǎn)程機(jī)器上執(zhí)行,則小命令處理器420協(xié)調(diào)與圖2所示的遠(yuǎn)程小命令236的執(zhí)行。小命令管理器422處理小命令的聚集的執(zhí)行。小命令管理器422、小命令處理器420以及腳本引擎222(圖2)彼此通信,以在從主機(jī)程序210-214接收到的輸入上執(zhí)行處理。通信可以本質(zhì)上是遞歸的。例如,如果主機(jī)程序提供腳本,則該腳本可調(diào)用小命令管理器422以執(zhí)行小命令,該小命令本身可以是腳本。腳本然后可由腳本引擎222執(zhí)行。核心引擎的一個(gè)示例性過(guò)程流在下文結(jié)合圖14詳細(xì)描述。示例性擴(kuò)展類型管理器如上所述,管理工具框架提供了允許對(duì)象上的反射并允許獨(dú)立于其(對(duì)象)類型在反射的對(duì)象上處理的一組實(shí)用程序。管理工具框架200與計(jì)算系統(tǒng)上的組件框架(圖1所示的組件框架120)交互,以執(zhí)行這一反射。本領(lǐng)域的技術(shù)人員可以理解,反射提供了查詢對(duì)象并獲取該對(duì)象的類型,然后在各種對(duì)象以及與該類型對(duì)象相關(guān)聯(lián)的屬性反射以獲取其它對(duì)象和/或需要的值的能力。即使反射向管理工具框架200提供了對(duì)象上的大量信息,因此發(fā)明人理解,反射集中在該類型的對(duì)象上。例如,當(dāng)在數(shù)據(jù)庫(kù)數(shù)據(jù)表上反射時(shí),返回的信息是數(shù)據(jù)表具有兩個(gè)屬性列屬性和行屬性。這兩個(gè)屬性未提供關(guān)于數(shù)據(jù)表內(nèi)的“對(duì)象”的足夠細(xì)節(jié)。當(dāng)在可擴(kuò)充標(biāo)記語(yǔ)言(XML)和其它對(duì)象上使用反射時(shí)也會(huì)產(chǎn)生類似的問(wèn)題。由此,發(fā)明人構(gòu)想了一種集中在類型的使用上的擴(kuò)展類型管理器412。對(duì)于這一擴(kuò)展類型管理器,對(duì)象的類型不是重要的。相反,擴(kuò)展類型管理器對(duì)于該對(duì)象是否能用于獲取需要的信息是感興趣的。繼續(xù)上述數(shù)據(jù)表示例,發(fā)明人理解,知道數(shù)據(jù)表具有列屬性和行屬性并不是特別感興趣的,但是理解,一列包含感興趣的信息。集中在使用上,可將每一行與“對(duì)象”相關(guān)聯(lián),并將每一列與該“對(duì)象”的“屬性”相關(guān)聯(lián)。由此,擴(kuò)展類型管理器412提供了一種從任一類型的可精確語(yǔ)法分析輸入中創(chuàng)建“對(duì)象”的機(jī)制。如此,擴(kuò)展類型管理器412補(bǔ)充了基于組件的框架120提供的反射能力,并將“反射”擴(kuò)展到任一類型的可精確語(yǔ)法分析輸入??傮w上,擴(kuò)展類型管理器被配置成訪問(wèn)可精確語(yǔ)法分析輸入(未示出),并將可精確語(yǔ)法分析輸入與請(qǐng)求的數(shù)據(jù)類型相關(guān)。擴(kuò)展類型管理器412然后向作出請(qǐng)求的組件,例如管道處理器402或語(yǔ)法分析器220提供所請(qǐng)求的信息。在以下討論中,可精確語(yǔ)法分析輸入被定義為其中可辨別屬性和值的輸入。某些示例性可精確語(yǔ)法分析輸入包括Windows管理規(guī)程(WMI)輸入、ActiveX數(shù)據(jù)對(duì)象(ADO)輸入、可擴(kuò)充標(biāo)記語(yǔ)言(XML)輸入以及諸如.NET對(duì)象等對(duì)象輸入。其它可精確語(yǔ)法分析輸入可包括第三方數(shù)據(jù)格式。簡(jiǎn)要地轉(zhuǎn)向圖18,示出了在管理工具框架內(nèi)使用的示例性擴(kuò)展類型管理器的功能框圖。為解釋的目的,由擴(kuò)展類型管理器提供的功能(由圓圈內(nèi)的數(shù)字“3”表示)與由傳統(tǒng)緊綁定系統(tǒng)提供的功能(由圓圈內(nèi)的數(shù)字“1”表示)以及由反射系統(tǒng)提供的功能(由圓圈內(nèi)的數(shù)字“2”表示)形成對(duì)比。在傳統(tǒng)的緊綁定系統(tǒng)中,應(yīng)用程序內(nèi)的調(diào)用者1802直接訪問(wèn)對(duì)象A內(nèi)的信息(例如,屬性P1和P2、方法M1和M2)。如上所述,調(diào)用者1802在編譯時(shí)必須事先知道由對(duì)象A提供的屬性(如,屬性P1和P2)以及方法(如,方法M1和M2)。在反射系統(tǒng)中,類屬代碼1820(不依賴于任何數(shù)據(jù)類型)查詢?cè)谡?qǐng)求的對(duì)象上執(zhí)行反射1810的系統(tǒng)1808,并向類屬代碼1820返回關(guān)于該對(duì)象(如,對(duì)象A)的信息(例如,屬性P1和P2、方法M1和M2)。盡管未在對(duì)象A中示出,返回的信息可包括諸如銷售商、文件、日期等的附加信息。由此,通過(guò)反射,類屬代碼1820至少包含緊綁定系統(tǒng)提供的相同信息。反射系統(tǒng)也允許調(diào)用者1802查詢系統(tǒng),并在沒(méi)有關(guān)于參數(shù)的任何先驗(yàn)知識(shí)的情況下獲取附加信息。在緊綁定系統(tǒng)和反射系統(tǒng)中,新數(shù)據(jù)類型不能被容易地結(jié)合到操作環(huán)境中。例如,在緊綁定系統(tǒng)中,一旦操作環(huán)境被交付,則操作環(huán)境無(wú)法結(jié)合新數(shù)據(jù)類型,因?yàn)樗仨毐恢貥?gòu)以支持它們。同樣,在反射系統(tǒng)中,每一對(duì)象類的元數(shù)據(jù)是固定的。由此,結(jié)合新數(shù)據(jù)類型通常未完成。然而,采用本發(fā)明的擴(kuò)展類型管理器,可以將新數(shù)據(jù)類型結(jié)合到操作系統(tǒng)中。采用擴(kuò)展類型管理器1822,類屬代碼1820可在請(qǐng)求的對(duì)象上反射,以獲取由各種外部源提供的擴(kuò)展數(shù)據(jù)類型(如,對(duì)象A′),諸如第三方對(duì)象(如,對(duì)象A′和B)、語(yǔ)義web1832、本體論服務(wù)1834等等。如圖所示,第三方對(duì)象可擴(kuò)展現(xiàn)有對(duì)象(如,對(duì)象A′)或可創(chuàng)建全新的對(duì)象(如,對(duì)象B)。這些外部源的每一個(gè)可在類型元數(shù)據(jù)1840內(nèi)注冊(cè)其唯一的構(gòu)造,并可提供代碼1842。當(dāng)對(duì)象被查詢時(shí),擴(kuò)展類型管理器審閱類型元數(shù)據(jù)1840,以判斷對(duì)象是否已被注冊(cè)。如果對(duì)象未在類型元數(shù)據(jù)1840內(nèi)注冊(cè),則執(zhí)行反射。否則,執(zhí)行擴(kuò)展反射。代碼1842返回與反射的類型相關(guān)聯(lián)的附加屬性和方法。例如,如果輸入類型是XML,則代碼1842可包括描述使用XML來(lái)從XML文檔創(chuàng)建對(duì)象的方式的描述文件。由此,類型元數(shù)據(jù)1840描述了擴(kuò)展類型管理器412應(yīng)當(dāng)如何查詢各種類型的可精確語(yǔ)法分析輸入(例如,第三方對(duì)象A′和B、語(yǔ)義web1832)來(lái)獲取用于對(duì)該特定輸入類型創(chuàng)建對(duì)象的期望屬性,并且代碼1842提供了獲取這些期望屬性的指令。結(jié)果,擴(kuò)展類型管理器412提供了一間接層,它允許在所有類型的對(duì)象上“反射”除提供擴(kuò)展類型之外,擴(kuò)展類型管理器412提供了附加的查詢機(jī)制,如屬性路徑機(jī)制、關(guān)鍵字機(jī)制、比較機(jī)制、開關(guān)機(jī)制、通配符處理(globber)機(jī)制、屬性設(shè)置機(jī)制、關(guān)系機(jī)制等等。這些查詢機(jī)制的每一個(gè)在下文“示例性擴(kuò)展類型管理器處理”一節(jié)中詳細(xì)描述,它們?cè)谳斎朊畲畷r(shí)向系統(tǒng)管理員提供了靈活性??墒褂酶鞣N技術(shù)來(lái)實(shí)現(xiàn)擴(kuò)展類型管理器的語(yǔ)義。下文描述了三種技術(shù)。然而,本領(lǐng)域的技術(shù)人員可以理解,可使用這些技術(shù)的變體而不脫離要求保護(hù)的本發(fā)明的范圍。在一種技術(shù)中,可提供具有靜態(tài)方法(如,getproperty())的一系列類。對(duì)象被輸入到靜態(tài)方法中(例如,getproperty(object)),并且靜態(tài)方法返回一組結(jié)果。在另一種技術(shù)中,操作系統(tǒng)用適配器包裝對(duì)象。由此,不提供輸入。適配器的每一實(shí)例具有g(shù)etproerty(獲取屬性)方法,它在包裝的對(duì)象上運(yùn)作,并返回該包裝對(duì)象的屬性。以下是示出這一技術(shù)的偽代碼ClassAdaptor{ObjectX;getProperties();}在又一種技術(shù)中,適配器類對(duì)對(duì)象進(jìn)行細(xì)分類。傳統(tǒng)上,細(xì)分類在編譯之前發(fā)生。然而,對(duì)于某些操作環(huán)境,細(xì)分類可動(dòng)態(tài)地發(fā)生。對(duì)于這些類型的環(huán)境,以下是示出這一技術(shù)的偽代碼ClassAdaptor:A{getProperties(){returndata;}}由此,如圖18所示,擴(kuò)展類型管理器允許開發(fā)者創(chuàng)建新的數(shù)據(jù)類型、注冊(cè)該數(shù)據(jù)類型、并允許其它應(yīng)用程序和小命令使用該新的數(shù)據(jù)類型。相反,在現(xiàn)有的管理環(huán)境中,在編譯時(shí)每一數(shù)據(jù)類型必須是已知的,使得與從該數(shù)據(jù)類型例示的對(duì)象相關(guān)聯(lián)的屬性或方法可被直接訪問(wèn)。因此,添加管理環(huán)境所支持的新數(shù)據(jù)類型在過(guò)去很少完成。返回到圖2,總體上,管理工具框架200不依賴于用于協(xié)調(diào)用戶的命令輸入的執(zhí)行的外殼,但是相反,將功能分割成處理部分(例如,主機(jī)無(wú)關(guān)組件206)和用戶交互部分(例如,通過(guò)主機(jī)小命令)。另外,本發(fā)明的管理工具環(huán)境很大程度上簡(jiǎn)化了管理工具的編程,因?yàn)檎Z(yǔ)法分析和數(shù)據(jù)確認(rèn)所需的代碼不再包括在每一命令中,而是相反,由管理工具框架內(nèi)的組件(例如,語(yǔ)法分析器220)提供。下文描述管理工具框架內(nèi)執(zhí)行的示例性處理。示例性操作圖5-7圖形地示出了在管理工具環(huán)境中使用的示例性數(shù)據(jù)結(jié)構(gòu)。圖8-17圖形地示出了管理工具環(huán)境內(nèi)的示例性處理流。本領(lǐng)域的技術(shù)人員可以理解,某些處理可以由與以下描述的組件不同的組件來(lái)執(zhí)行,而不脫離本發(fā)明的范圍。在描述管理工具框架內(nèi)執(zhí)行的處理之前,描述管理工具框架內(nèi)使用的示例性數(shù)據(jù)結(jié)構(gòu)。小命令對(duì)象的示例性數(shù)據(jù)結(jié)構(gòu)圖5是用于指定始于在圖2所示的管理工具框架內(nèi)使用的小命令的示例性數(shù)據(jù)結(jié)構(gòu)。當(dāng)完成時(shí),小命令可以是管理小命令、非管理小命令、主機(jī)小命令、提供者小命令等等。以下討論描述了相對(duì)于系統(tǒng)管理員的觀點(diǎn)的小命令(即,提供者小命令)的創(chuàng)建。然而,每一類型的小命令以相同的方式創(chuàng)建并以相同的方式操作。小命令可以用任何語(yǔ)言來(lái)書寫,如C#。另外,小命令可以使用腳本語(yǔ)言或類似語(yǔ)言來(lái)書寫。當(dāng)管理工具環(huán)境用.NET框架來(lái)運(yùn)作時(shí),小命令可以是.NET對(duì)象。提供者小命令500(后文稱為小命令500)是具有小命令類名(例如,StopProcess(停止進(jìn)程)504)的公用類。小命令500從小命令類506導(dǎo)出。小命令類506的一個(gè)示例性數(shù)據(jù)結(jié)構(gòu)在下文結(jié)合圖6描述。每一小命令500與一命令屬性502相關(guān)聯(lián),該命令屬性將名字(例如,Stop(停止)/Process(進(jìn)程))與小命令500相關(guān)聯(lián)。名字在管理工具環(huán)境內(nèi)注冊(cè)。如下文描述的,當(dāng)在命令行或腳本中提供具有名字(例如,Stop/Process)的命令串作為輸入時(shí),輸入語(yǔ)法分析器在小命令注冊(cè)表中查找,以識(shí)別小命令500。小命令500與一語(yǔ)法機(jī)制相關(guān)聯(lián),該語(yǔ)法機(jī)制定義了對(duì)小命令的期望輸入?yún)?shù)的語(yǔ)法。語(yǔ)法機(jī)制可以直接或間接地與小命令相關(guān)聯(lián)。例如,小命令500示出了直接語(yǔ)法關(guān)聯(lián)。在這一小命令500中,聲明了一個(gè)或多個(gè)公用參數(shù)(如,ProcessName(進(jìn)程名)510和PID512)。公用參數(shù)的聲明驅(qū)動(dòng)了對(duì)小命令500的輸入對(duì)象的語(yǔ)法分析?;蛘?,參數(shù)的描述可以在外部源中出現(xiàn),如XML文檔。該外部源中的參數(shù)描述然后將驅(qū)動(dòng)對(duì)小命令的輸入對(duì)象的分析。每一公用參數(shù)510、512可具有與其相關(guān)聯(lián)的一個(gè)或多個(gè)屬性(即,偽指令)。偽指令可來(lái)自以下類別的任一個(gè)語(yǔ)法分析偽指令521、數(shù)據(jù)確認(rèn)偽指令522、數(shù)據(jù)生成偽指令523、處理偽指令524、編碼偽指令525以及文檔編制偽指令526、偽指令可以用方括號(hào)環(huán)繞。每一偽指令描述了要在下面預(yù)期的輸入?yún)?shù)上執(zhí)行的操作。某些偽指令也可在類級(jí)應(yīng)用,如用戶交互類型偽指令。偽指令儲(chǔ)存在與小命令相關(guān)聯(lián)的元數(shù)據(jù)中。這些屬性的應(yīng)用在下文結(jié)合圖12描述。這些屬性也可反映小命令內(nèi)聲明的參數(shù)的填充。用于填充這些參數(shù)的一個(gè)示例性過(guò)程在下文結(jié)合圖16描述。核心引擎可應(yīng)用這些偽指令以確保依從性。偽指令500包括第一方法530(后文可互換地被稱為StartProcessing(開始處理)方法530)以及第二方法540(后文可互換地被稱為processRecord(處理記錄)方法540)。核心引擎使用第一和第二方法530、540,來(lái)指示小命令500的處理。例如第一方法530被執(zhí)行一次,并執(zhí)行設(shè)置功能。第二方法540內(nèi)的代碼542對(duì)需要由小命令500處理的每一對(duì)象(如,記錄)執(zhí)行。小命令500也可包括在小命令500之后清理的第三方法(未示出)。由此,如圖5所示,第二方法540內(nèi)的代碼542通常相當(dāng)簡(jiǎn)單,并且不包含傳統(tǒng)管理工具環(huán)境中需要的功能,如語(yǔ)法分析代碼、數(shù)據(jù)確認(rèn)代碼等等。由此,系統(tǒng)管理員能夠開發(fā)復(fù)雜的管理任務(wù),而無(wú)需學(xué)習(xí)復(fù)雜的編程語(yǔ)言。圖6是用于指定從其導(dǎo)出圖5所示的小命令的小命令基類602的示例性數(shù)據(jù)結(jié)構(gòu)600。當(dāng)小命令包括掛鉤(hook)語(yǔ)句并且對(duì)應(yīng)的開關(guān)是命令行上或腳本中的輸入(統(tǒng)稱為命令輸入)的任何時(shí)候,小命令基類602包括提供額外功能的指令。示例性數(shù)據(jù)結(jié)構(gòu)600包括參數(shù),如布爾參數(shù)verbose610、whatif620和confirm630。如下文所解釋的,這些參數(shù)對(duì)應(yīng)于可在命令輸入上鍵入的串。示例性數(shù)據(jù)結(jié)構(gòu)600也可包括確定請(qǐng)求執(zhí)行的任務(wù)是否被允許的安全方法640。圖7是用于執(zhí)行小命令的另一示例性數(shù)據(jù)結(jié)構(gòu)700??傮w上,該數(shù)據(jù)結(jié)構(gòu)700提供了用于清楚地表達(dá)管理工具框架和小命令之間的合約的方法。類似于數(shù)據(jù)結(jié)構(gòu)500,該數(shù)據(jù)結(jié)構(gòu)700是從小命令類704導(dǎo)出的公用類。軟件開發(fā)者指定將名詞/動(dòng)詞對(duì),如“get/process(獲取/進(jìn)程)”和“format/table(格式化/表格)”與小命令700相關(guān)聯(lián)的cmdletDeclaration702。名詞/動(dòng)詞對(duì)在管理工具環(huán)境內(nèi)注冊(cè)。動(dòng)詞或名詞可以在小命令名中是隱含的。同樣,類似于數(shù)據(jù)結(jié)構(gòu)500,數(shù)據(jù)結(jié)構(gòu)700可包括一個(gè)或多個(gè)公用成員(如,Name730、Recurse732),它們可以與結(jié)合數(shù)據(jù)結(jié)構(gòu)500所描述的一個(gè)或多個(gè)偽指令520-526相關(guān)聯(lián)。然而,在這一示例性數(shù)據(jù)結(jié)構(gòu)700中,期望輸入?yún)?shù)730和732的每一個(gè)可以分別與輸入屬性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中,沒(méi)有從另一小命令發(fā)出的管道化對(duì)象填充的任何期望輸入?yún)?shù)。由此,數(shù)據(jù)結(jié)構(gòu)700不覆蓋由小命令基類提供的第一方法(如,StartProcessing)或第二方法(如,ProcessRecord)。該數(shù)據(jù)結(jié)構(gòu)700也可包括不被識(shí)別為輸入?yún)?shù)的私有成員740。私有成員740可用于儲(chǔ)存基于偽指令之一生成的數(shù)據(jù)。由此,如數(shù)據(jù)結(jié)構(gòu)700中所示的,通過(guò)使用在特定小命令類中聲明公有屬性和偽指令,小命令開發(fā)者可容易地為其小命令的期望輸入?yún)?shù)指定語(yǔ)法,并指定應(yīng)當(dāng)在期望輸入?yún)?shù)上執(zhí)行的處理,而無(wú)需小命令開發(fā)者生成任一底層邏輯。數(shù)據(jù)結(jié)構(gòu)700示出了小命令和語(yǔ)法機(jī)制之間的直接關(guān)聯(lián)。如上所述,這一關(guān)聯(lián)也可以是間接的,如通過(guò)指定諸如XML文檔等外部源內(nèi)的期望參數(shù)定義?,F(xiàn)在描述管理工具環(huán)境內(nèi)的示例性過(guò)程流。示例性主機(jī)處理流圖8所示是用于在圖2所示的管理工具框架內(nèi)執(zhí)行的主機(jī)處理的示例性過(guò)程的邏輯流程圖。該過(guò)程800在框801開始,其中,接收到啟動(dòng)特定應(yīng)用程序的管理工具框架的請(qǐng)求。該請(qǐng)求可以通過(guò)諸如選擇應(yīng)用程序圖標(biāo)等鍵盤輸入本地發(fā)送,或者通過(guò)不同計(jì)算裝置的web服務(wù)接口遠(yuǎn)程發(fā)送。對(duì)于任一種情形,處理繼續(xù)到框802。在框802,“目標(biāo)”計(jì)算裝置上特定的應(yīng)用程序(例如,主機(jī)程序)設(shè)置其環(huán)境。這包括判斷令小命令的哪些子集(例如,管理小命令232、非管理小命令234以及主機(jī)小命令218)對(duì)用戶可用。通常,主機(jī)程序?qū)⒘钏械姆枪芾硇∶?34可用,并且令其自己的主機(jī)小命令218可用。另外,主機(jī)程序?qū)⒘罟芾硇∶?34的一個(gè)子集可用,如處理進(jìn)程、盤等的小命令。由此,一旦主機(jī)程序令小命令的子集可用,管理工具框架被有效地嵌入在對(duì)應(yīng)的應(yīng)用程序中。處理繼續(xù)到框804。在框804,通過(guò)特定的應(yīng)用程序獲取輸入。如上所述,輸入可采用若干形式,如命令行、腳本、語(yǔ)音、GUI等等。例如,當(dāng)輸入是通過(guò)命令行獲取時(shí),輸入從鍵盤上鍵入的按鍵來(lái)檢索。對(duì)于GUI主機(jī),串是基于GUI來(lái)組成的。處理在框806繼續(xù)。在框806,將輸入提供給管理工具框架內(nèi)的其它組件以供處理。主機(jī)程序可將輸入直接轉(zhuǎn)發(fā)到其它組件,如語(yǔ)法分析器。或者,主機(jī)程序可通過(guò)其主機(jī)小命令之一來(lái)轉(zhuǎn)發(fā)輸入。主機(jī)小命令可將其特定類型的輸入(如,語(yǔ)音)轉(zhuǎn)換成可由管理工具框架識(shí)別的一種類型的輸入(如,文本串、腳本)。例如,語(yǔ)音輸入可以被轉(zhuǎn)換成腳本或命令行串,取決于語(yǔ)音輸入的內(nèi)容。由于每一主機(jī)程序負(fù)責(zé)將其類型的輸入轉(zhuǎn)換成可由管理工具框架識(shí)別的輸入,因此管理工具框架可接受來(lái)自任意數(shù)量的各種主機(jī)組件的輸入。另外,管理工具框架提供了一組豐富的實(shí)用程序,當(dāng)輸入通過(guò)其小命令之一轉(zhuǎn)發(fā)時(shí),它們執(zhí)行數(shù)據(jù)類型之間的轉(zhuǎn)換。其它組件在輸入上執(zhí)行的處理在下文結(jié)合若干其它附圖來(lái)描述。主機(jī)處理在判別框808繼續(xù)。在判別框808,判斷是否接收到對(duì)另外的輸入的請(qǐng)求。如果負(fù)責(zé)處理輸入的其它組件之一需要來(lái)自用戶的另外的輸入以完成其處理,則會(huì)發(fā)生這一情況。例如,可能需要口令來(lái)訪問(wèn)某些數(shù)據(jù)、可能需要特定行動(dòng)的確認(rèn)等等。對(duì)于某些類型的主機(jī)程序(如,語(yǔ)音郵件),這樣的請(qǐng)求可能不是適當(dāng)?shù)?。由此,與向用戶查詢另外的輸入相反,主機(jī)程序可串行化狀態(tài)、掛起狀態(tài)、并發(fā)送通知,使得稍后該狀態(tài)得以恢復(fù)并且輸入的執(zhí)行得以繼續(xù)。在另一變體中,主機(jī)程序可在預(yù)定的時(shí)間段之后提供默認(rèn)值。如果接收到對(duì)另外的輸入的請(qǐng)求,則處理循環(huán)回到框804,其中獲取另外的輸入。處理然后通過(guò)上述框806和808繼續(xù)。如果未接收到對(duì)另外的輸入的請(qǐng)求,且輸入已被處理,則處理繼續(xù)到框810。在框810,從管理工具框架內(nèi)的其它組件接收結(jié)果。該結(jié)果可包括出錯(cuò)消息、狀態(tài)等等。結(jié)果是以對(duì)象的形式,它可由管理工具框架內(nèi)的主機(jī)小命令識(shí)別和處理。如下文所描述的,對(duì)每一主機(jī)小命令書寫的代碼是非常少的。由此,可顯示一組豐富的輸出,而無(wú)需開發(fā)成本的巨大投資。處理在框812繼續(xù)。在框812,可審閱結(jié)果。主機(jī)小命令將結(jié)果轉(zhuǎn)換成主機(jī)程序支持的顯示風(fēng)格。例如,返回的對(duì)象可由GUI主機(jī)程序使用圖形描述來(lái)顯示,如圖標(biāo)、吠叫狗(barkingdog)等。主機(jī)小命令提供數(shù)據(jù)的默認(rèn)格式和輸出。默認(rèn)格式和輸出可使用下文結(jié)合圖19-23描述的示例性輸出處理小命令。在可任選地顯示了結(jié)果之后,主機(jī)處理完成。用于處理輸入的示例性過(guò)程圖9所示是用于在圖2所示的管理工具框架內(nèi)執(zhí)行的處理輸入的示例性過(guò)程的邏輯流程圖。處理在框901開始,其中通過(guò)主機(jī)程序鍵入輸入,并將其轉(zhuǎn)發(fā)到管理工具框架內(nèi)的其它組件。處理在框902繼續(xù)。在框902,從主機(jī)程序接收輸入。在一個(gè)示例性管理工具框架中,輸入由語(yǔ)法分析器接收,它對(duì)輸入進(jìn)行譯碼,并定向輸入以供進(jìn)一步處理。處理在判別框904繼續(xù)。在判別框904,確定輸入是否為腳本。輸入可采用腳本或表示命令行的串(后文稱為“命令串”)的形式。命令串可表示管道化在一起的一個(gè)或多個(gè)小命令。即使管理工具框架支持若干不同的主機(jī),然而每一主機(jī)提供輸入作為腳本或命令串以供處理。如下文可見(jiàn)到的,腳本和命令串之間的交互在本質(zhì)上是遞歸的。例如,腳本可具有調(diào)用小命令的行。小命令本身可以是腳本。由此,在判別框904,如果輸入是腳本的形式,則處理在框906繼續(xù),執(zhí)行腳本的處理。否則,處理在框908繼續(xù),執(zhí)行命令串的處理。一旦在框906或908執(zhí)行的處理完成,則輸入的處理完成。腳本的示例性處理圖10所示是用于處理適于在圖9所示的處理輸入過(guò)程中使用的腳本的過(guò)程的邏輯流程圖。該過(guò)程在框1001開始,將輸入識(shí)別為腳本。腳本引擎和語(yǔ)法分析器彼此通信,以執(zhí)行以下功能。處理在框1002繼續(xù)。在框1002,在腳本上執(zhí)行預(yù)處理。簡(jiǎn)要地轉(zhuǎn)向圖11,示出了一個(gè)邏輯流程圖,它示出了適于在腳本處理過(guò)程1000中使用的腳本預(yù)處理過(guò)程1100。腳本預(yù)處理在框1101開始,并繼續(xù)到判別框1102。在判別框1102,判斷腳本是否第一次運(yùn)行。這一判斷可以基于從注冊(cè)表或其它存儲(chǔ)機(jī)制中獲得的信息。腳本從存儲(chǔ)機(jī)制內(nèi)識(shí)別,并且審閱相關(guān)聯(lián)的數(shù)據(jù)。如果腳本先前未運(yùn)行過(guò),則處理在框1104繼續(xù)。在框1104,腳本在注冊(cè)表中注冊(cè)。這允許關(guān)于該腳本的信息被儲(chǔ)存,以供管理工具框架內(nèi)的組件稍后使用。處理在框1106繼續(xù)。在框1106,從腳本提取幫助和文檔編制信息,并存儲(chǔ)在注冊(cè)表中。再一次,該信息稍后可由管理工具框架內(nèi)的組件訪問(wèn)。腳本現(xiàn)在已準(zhǔn)備好供處理,并且返回到圖10中的框1004。返回到判別框1102,如果過(guò)程推斷腳本先前已運(yùn)行,則處理在判別框1108繼續(xù)。在判別框1108,判斷腳本是否在處理過(guò)程中失敗。該信息可從注冊(cè)表中獲得。如果腳本未失敗,則腳本已準(zhǔn)備好供處理并返回到圖10中的框1004。然而,如果腳本失敗,則處理在框1110繼續(xù)。在框1110,腳本引擎可通過(guò)主機(jī)程序通知用戶腳本先前已失敗。這一通知允許用戶決定是繼續(xù)該腳本還是退出該腳本。如上文結(jié)合圖8所提到的,主機(jī)程序可以用各種方式處理該請(qǐng)求,取決于輸入的風(fēng)格(如,語(yǔ)音、命令行)。一旦從用戶接收到另外的輸入,腳本或者返回到圖10的框1004供處理,或者中止該腳本。返回到圖10的框1004,檢索來(lái)自腳本的一行。處理在判別框1006繼續(xù)。在判別框1006,判斷該行是否包含任何約束。約束可用預(yù)定義的開始字符(例如,括號(hào)“[”]]]]]]和對(duì)應(yīng)的結(jié)束字符(例如,關(guān)閉括號(hào)“))))))”)來(lái)檢測(cè)。如果該行包括約束,則處理在框1008繼續(xù)。在框1008,應(yīng)用該行中包括的約束。一般而言,約束提供了管理工具框架內(nèi)的一種機(jī)制,以指定用于腳本中輸入的參數(shù)的類型以及指定應(yīng)當(dāng)在該參數(shù)上執(zhí)行的確認(rèn)邏輯。該約束不僅應(yīng)用于參數(shù),也適用于腳本中輸入的任一類型的構(gòu)造,例如變量。由此,約束提供了解釋環(huán)境內(nèi)的一種機(jī)制,以指定數(shù)據(jù)類型以及確認(rèn)參數(shù)。在傳統(tǒng)的環(huán)境中,系統(tǒng)管理員無(wú)法形式上測(cè)試腳本內(nèi)輸入的參數(shù)。應(yīng)用約束的一個(gè)示例性過(guò)程在圖12中示出。在判別框1010,判斷來(lái)自腳本的該行是否包括內(nèi)建能力。內(nèi)建能力是不由核心引擎執(zhí)行的能力。內(nèi)建能力可以使用小命令來(lái)處理,或者使用諸如內(nèi)嵌函數(shù)來(lái)處理。如果該行不具有內(nèi)建能力,則處理在判別框1014繼續(xù)。否則,處理在框1012繼續(xù)。在框1012,處理在腳本的行上提供的內(nèi)建能力。示例內(nèi)建能力可包括諸如“if”語(yǔ)句、“for”循環(huán)、開關(guān)等控制構(gòu)造的執(zhí)行。內(nèi)建能力也可包括賦值類型語(yǔ)句(例如,a=3)。一旦處理了內(nèi)建能力,處理在判別框1014繼續(xù)。在判別框1014,判斷腳本的行是否包括命令串。該判斷基于行上的數(shù)據(jù)是否與注冊(cè)的命令串相關(guān)聯(lián)并且是否與潛在的小命令調(diào)用的句法相關(guān)聯(lián)。如上所述,命令串和腳本的處理可以在本質(zhì)上是遞歸的,因?yàn)槟_本可包括命令串,而命令串可執(zhí)行小命令,小命令本身是腳本。如果行不包括命令串,則處理在判別框1018。否則,處理在框1016繼續(xù)。在框1016,處理命令串??傮w上,命令串的處理包括由語(yǔ)法分析器識(shí)別小命令類,以及將對(duì)應(yīng)的小命令對(duì)象傳遞到核心引擎以供執(zhí)行。命令串也可包括管道化的命令串,它被語(yǔ)法分析成若干個(gè)別的小命令對(duì)象,并由核心引擎?zhèn)€別地處理。下文結(jié)合圖14描述用于處理命令串的一個(gè)示例性過(guò)程。一旦處理了命令串,處理在判別框1018繼續(xù)。在判別框1018,判斷腳本中是否有另一行。如果腳本中有另一行,則處理循環(huán)回到框1004,并如上文在框1004-1016中描述的繼續(xù)。否則,處理完成。圖12示出了應(yīng)用框1008中的約束的示例性過(guò)程。該過(guò)程在框1201開始,檢測(cè)到腳本或命令行的命令串中的約束。當(dāng)約束在腳本內(nèi)時(shí),約束和相關(guān)聯(lián)的構(gòu)造可在同一行上出現(xiàn),或在單獨(dú)的行上出現(xiàn)。當(dāng)約束在命令串內(nèi)時(shí),約束和相關(guān)聯(lián)的構(gòu)造在行指示符(如,回車鍵)的末端之前出現(xiàn)。處理在框1202繼續(xù)。在框1202,從解釋環(huán)境中獲取約束。在一個(gè)示例性管理工具環(huán)境中,語(yǔ)法分析器對(duì)輸入進(jìn)行譯碼,并確定約束的出現(xiàn)。約束可以來(lái)自以下類別之一謂詞偽指令、數(shù)據(jù)確認(rèn)偽指令、數(shù)據(jù)生成偽指令、處理偽指令、編碼偽指令和文檔編制偽指令。在一個(gè)示例性語(yǔ)法分析句法中,偽指令用方括號(hào)包圍,并且描述了它們之后的構(gòu)造。構(gòu)造可以是函數(shù)、變量、腳本等等。如下文將描述的,盡管使用了偽指令,然而允許腳本作者簡(jiǎn)單地鍵入腳本或命令行內(nèi)(即,解釋環(huán)境)的參數(shù)并在參數(shù)上執(zhí)行處理,而無(wú)需腳本作者生成任何底層邏輯。處理繼續(xù)到框1204。在框1204,所獲取的約束儲(chǔ)存在相關(guān)聯(lián)的構(gòu)造的元數(shù)據(jù)中。相關(guān)聯(lián)的構(gòu)造被標(biāo)識(shí)為遇到一個(gè)或多個(gè)屬性標(biāo)記(表示約束的標(biāo)記)之后的第一個(gè)非屬性標(biāo)記。處理繼續(xù)到框1206。在框1206,只要在腳本或命令行內(nèi)遇到構(gòu)造,就將元數(shù)據(jù)內(nèi)定義的約束應(yīng)用到該構(gòu)造。約束可包括數(shù)據(jù)類型、謂詞偽指令1210、文檔編制偽指令1212、語(yǔ)法分析偽指令1214、數(shù)據(jù)生成偽指令1216、數(shù)據(jù)確認(rèn)偽指令1218以及對(duì)象處理和編碼偽指令1220。指定數(shù)據(jù)類型的約束可指定管理工具框架所運(yùn)行的系統(tǒng)支持的任何數(shù)據(jù)類型。謂詞偽指令1210是只是處理是否應(yīng)當(dāng)發(fā)生的偽指令。由此,謂詞偽指令1210確保環(huán)境對(duì)于執(zhí)行是正確的。例如,腳本可包括以下謂詞偽指令[PredicateScript(″isInstalled″,″ApplicationZ″)]該謂詞偽指令確保在運(yùn)行腳本前計(jì)算裝置上安裝了正確的應(yīng)用程序。通常,系統(tǒng)環(huán)境變量可被指定為謂詞偽指令。來(lái)自偽指令類型1212-1220的示例性偽指令在表1-5中示出。腳本的處理然后完成。由此,應(yīng)用解釋環(huán)境內(nèi)的類型和約束的本過(guò)程允許系統(tǒng)管理員容易地指定類型、指定確認(rèn)要求等,而無(wú)需書寫用于執(zhí)行這一處理的底層邏輯。以下是在如下指定的命令串上執(zhí)行的約束處理的一個(gè)示例[Integer][ValidationRange(3,5)]$a=4有兩種通過(guò)由“[]”表示的屬性標(biāo)記指定的約束。第一個(gè)屬性標(biāo)記指示了該變量是整數(shù)類型,而第二個(gè)屬性標(biāo)記指示變量$a的值必須包括在3到5之間。示例命令串確保了如果變量$a在隨后的命令串或行中被賦值,則將對(duì)照兩個(gè)約束來(lái)校驗(yàn)變量$a。由此,以下命令串的每一個(gè)都將導(dǎo)致錯(cuò)誤$a=231$a=″apple″$a=$(get/location)約束在管理工具框架的不同階段被應(yīng)用。例如,適用性偽指令、文檔編制偽指令以及語(yǔ)法分析準(zhǔn)則偽指令在語(yǔ)法分析器內(nèi)非常早期的階段處理。數(shù)據(jù)生成偽指令和確認(rèn)偽指令一旦在語(yǔ)法分析器完成了對(duì)所有輸入?yún)?shù)的語(yǔ)法分析之后在引擎內(nèi)處理。以下表格示出了各種類別的代表性偽指令,以及由管理工具環(huán)境響應(yīng)于偽指令執(zhí)行的處理的解釋。表1適用性偽指令表2語(yǔ)法分析管道偽指令表3文檔編制偽指令表4數(shù)據(jù)確認(rèn)偽指令表5處理和編碼偽指令當(dāng)示例性管理工具在.NETTM框架內(nèi)運(yùn)作時(shí),每一類別具有從基礎(chǔ)類別類(如,CmdAttribute)導(dǎo)出的積累。該基礎(chǔ)類別類從System.Attribute類導(dǎo)出。每一類別具有預(yù)定義的函數(shù)(如,attrib.func()),它由語(yǔ)法分析器在類別處理期間調(diào)用。腳本作者可創(chuàng)建從自定義類別類(如,CmdCustomAttribute)導(dǎo)出的自定義類別。腳本作者也可通過(guò)從類別的基礎(chǔ)類別類導(dǎo)出偽指令類,然后用其實(shí)現(xiàn)覆蓋預(yù)定義的函數(shù),來(lái)擴(kuò)展現(xiàn)有的類別。腳本作者也可覆蓋偽指令,并向預(yù)定義的偽指令集添加新的偽指令。這些偽指令的其它處理可以儲(chǔ)存在可由語(yǔ)法分析器訪問(wèn)的外部數(shù)據(jù)存儲(chǔ)中。管理工具框架查找注冊(cè)的類別,并對(duì)該類別中的每一偽指令調(diào)用函數(shù)(如,ProcessCustomDirective)。由此,類別處理的順序通過(guò)將類別執(zhí)行信息儲(chǔ)存在持久存儲(chǔ)中可以是動(dòng)態(tài)的。在不同的處理階段,語(yǔ)法分析器在持久存儲(chǔ)中進(jìn)行核查,以判斷是否有任何元數(shù)據(jù)類別需要在那時(shí)執(zhí)行。這允許類別通過(guò)從持久存儲(chǔ)中移除該類別條目來(lái)容易地被排斥。命令串的示例性處理現(xiàn)在描述用于處理命令串的一個(gè)示例性過(guò)程。圖13是概括地示出了通過(guò)圖2所示的語(yǔ)法分析器220和核心引擎224處理命令串1350的功能流程圖。示例性命令串1350管道化了若干命令(即,process(進(jìn)程)命令1360、where(其中)命令1362、sort(排序)命令1364和table(表格)命令1366)。命令1350可將輸入?yún)?shù)傳輸?shù)矫畹娜我粋€(gè)(例如,“handlecount>400”被傳遞到where命令1362)??梢宰⒁獾?,process命令1360不具有任何相關(guān)聯(lián)的輸入?yún)?shù)。在過(guò)去,每一命令負(fù)責(zé)對(duì)與該命令相關(guān)聯(lián)的輸入?yún)?shù)進(jìn)行語(yǔ)法分析、判斷輸入?yún)?shù)是否有效、并且如果輸入?yún)?shù)無(wú)效則發(fā)出出錯(cuò)消息。由于命令通常由各個(gè)程序員書寫,因此命令行上輸入?yún)?shù)的句法不是非常一致的。另外,如果出現(xiàn)出錯(cuò),則即使是對(duì)同一差錯(cuò),出錯(cuò)消息在命令之間也不是非常一致的。例如,在UNIX環(huán)境中,“l(fā)s”命令和“ps”命令在它們之間具有許多不一致性。盡管兩者都接受選項(xiàng)“-w”,然而“-w”選項(xiàng)由“l(fā)s”命令用于表示頁(yè)的寬度,而“-w”選項(xiàng)由“ps”命令表示打印出寬的輸出(本質(zhì)上,忽略頁(yè)寬度)。與“l(fā)s”和“ps”命令相關(guān)聯(lián)的幫助頁(yè)面也具有若干不一致性,如在一個(gè)中有加粗的選項(xiàng)而在另一個(gè)中沒(méi)有、在一個(gè)中對(duì)選項(xiàng)按字母表排序而在另一個(gè)中沒(méi)有、需要某些選項(xiàng)具有短劃線而某些選項(xiàng)沒(méi)有。本發(fā)明的管理工具框架提供了更一致的方法,并最小化了每一開發(fā)者必須書寫的重復(fù)代碼量。管理工具框架200提供了句法(如,語(yǔ)法)、對(duì)應(yīng)的語(yǔ)義(如,字典)、以及參考模型,以使開發(fā)者能夠容易地利用管理工具框架200提供的公用功能。在進(jìn)一步描述本發(fā)明之前,提供對(duì)貫穿本說(shuō)明書出現(xiàn)的其它術(shù)語(yǔ)的定義。輸入?yún)?shù)指小命令的輸入字段。形式參數(shù)指?jìng)鬟f到小命令的輸入?yún)?shù),它等效于argv數(shù)組中的單個(gè)串,或作為小命令對(duì)象中的單個(gè)元素傳遞。如下文所描述的,小命令提供了用于指定語(yǔ)法的機(jī)制。該機(jī)制可以直接或間接提供。形式參數(shù)是命令名后的選項(xiàng)、選項(xiàng)形式參數(shù)或操作數(shù)之一。形式參數(shù)的示例基于以下命令行給出Findstr/i/d:\winnt;\winnt\system32aa*b*.ini在以上命令行中,“findstr”是形式參數(shù)0,“/i”是形式參數(shù)1,“/d:\winnt;\winnt\system32”是形式參數(shù)2,“aa*b”是形式參數(shù)3,“*.ini”是形式參數(shù)4?!斑x項(xiàng)”是小命令的形式參數(shù),通常用于指定對(duì)程序的默認(rèn)行為的改變。繼續(xù)上述命令行的示例,“/i”和“/d”是選項(xiàng)。“選項(xiàng)形式參數(shù)”是跟隨在某些選項(xiàng)后的一個(gè)參數(shù)。在某些情況下,“選項(xiàng)形式參數(shù)”作為選項(xiàng)被包括在同一形式參數(shù)串內(nèi)。在其它情況下,選項(xiàng)形式參數(shù)作為下一形式參數(shù)被包括。再次參考上述命令行,“winnt;\winnt\system32”是選項(xiàng)形式參數(shù)?!安僮鲾?shù)”是小命令的形式參數(shù),通常向程序提供完成程序處理所必需的信息的對(duì)象。在命令行中,操作數(shù)一般在選項(xiàng)之后。再次參考上述示例命令行,“aa*b”和“*.ini”是操作數(shù)。“可語(yǔ)法分析流”包括形式參數(shù)。參考圖13,語(yǔ)法分析器220將可語(yǔ)法分析流(如,命令串1350)語(yǔ)法分析成要素部分1320-1326(如,where部分1322)。每一部分1320-1326與小命令1330-1336之一相關(guān)聯(lián)。語(yǔ)法分析器220和引擎224執(zhí)行各種處理,如語(yǔ)法分析、參數(shù)確認(rèn)、數(shù)據(jù)生成、參數(shù)處理、參數(shù)編碼和參數(shù)文檔編制。由于語(yǔ)法分析器220和引擎224在命令行的輸入?yún)?shù)上執(zhí)行公用的功能,因此管理工具框架200能夠向用戶發(fā)出一致的出錯(cuò)消息。如可以認(rèn)識(shí)到的,依照本發(fā)明的管理工具框架書寫的可執(zhí)行小命令1330-1336需要比現(xiàn)有管理環(huán)境中的命令更少的代碼。每一可執(zhí)行小命令1330-1336使用其相應(yīng)的構(gòu)成部分1320-1326來(lái)標(biāo)識(shí)。另外,每一可執(zhí)行小命令1330-1336輸出對(duì)象(由箭頭1340、1342、1344和1346表示),它們是作為對(duì)下一管道化小命令的輸入對(duì)象(由箭頭1341、1343和1345表示)的輸入。這些對(duì)象可以通過(guò)向?qū)ο髠鬟f引用(例如,句柄)來(lái)輸入。可執(zhí)行小命令1330-1336然后可在所傳入的參數(shù)上執(zhí)行額外的處理。圖14是更詳細(xì)地示出了適于在處理圖9所示的輸入的過(guò)程中使用的命令串的處理的邏輯流程圖。命令串處理在框1401開始,其中語(yǔ)法分析器或腳本引擎識(shí)別輸入中的命令串。一般而言,核心引擎執(zhí)行小命令的數(shù)據(jù)流的設(shè)置和排序。對(duì)一個(gè)小命令的設(shè)置和排序在下文描述,但是可適用于管道中的每一小命令。處理在框1404繼續(xù)。在框1404,識(shí)別小命令。小命令的識(shí)別可以通過(guò)注冊(cè)來(lái)進(jìn)行。核心引擎判斷小命令是本地還是遠(yuǎn)程的。小命令可以在以下位置中執(zhí)行1)在管理工具框架的應(yīng)用程序域內(nèi);2)在與管理工具框架相同的進(jìn)程的另一應(yīng)用程序域內(nèi);3)在同一計(jì)算裝置的另一進(jìn)程內(nèi);或者4)在遠(yuǎn)程計(jì)算裝置內(nèi)。在同一進(jìn)程內(nèi)操作的小命令之間的通信是通過(guò)對(duì)象來(lái)進(jìn)行的。在不同的進(jìn)程內(nèi)操作的小命令之間的通信是通過(guò)串行化的結(jié)構(gòu)化數(shù)據(jù)格式來(lái)進(jìn)行的。一個(gè)示例性串行化的結(jié)構(gòu)化數(shù)據(jù)格式基于可擴(kuò)充標(biāo)記語(yǔ)言(XML)。處理在框1406繼續(xù)。在框1406,創(chuàng)建小命令對(duì)象的實(shí)例。用于創(chuàng)建小命令的實(shí)例的一個(gè)示例性過(guò)程在下文結(jié)合圖15描述。一旦創(chuàng)建了小命令對(duì)象,處理在框1408繼續(xù)。在框1408,填充與小命令對(duì)象相關(guān)聯(lián)的屬性。如上所述,開發(fā)者聲明小命令類內(nèi)或外部源內(nèi)的屬性。簡(jiǎn)言之,管理工具框架基于對(duì)屬性聲明的名字和類型將傳入的對(duì)象譯碼成從小命令類例示的小命令。如果類型不同,則可通過(guò)擴(kuò)展數(shù)據(jù)類型管理器來(lái)強(qiáng)制類型。如先前所提到的,在管道化的命令串中,每一小命令的輸出可以是對(duì)象句柄的列表。下一小命令可輸出這一對(duì)象句柄列表、執(zhí)行處理、并將另一對(duì)象句柄列表傳遞到下一小命令。另外,如圖7所示,輸入?yún)?shù)可以被指定為來(lái)自命令行。用于填充與小命令相關(guān)聯(lián)的屬性的一個(gè)示例性方法在下文結(jié)合圖16描述。一旦填充了小命令,處理在框1410繼續(xù)。在框1410,執(zhí)行小命令??傮w上,由小命令提供的處理至少被執(zhí)行一次,這包括對(duì)小命令的每一輸入對(duì)象的處理。由此,如果小命令是管道化的命令串中的第一個(gè)小命令,則處理被執(zhí)行一次。對(duì)于后續(xù)的小命令,對(duì)傳遞到小命令的每一對(duì)象執(zhí)行處理。用于執(zhí)行小命令的一個(gè)示例性方法在下文結(jié)合圖5描述。當(dāng)輸入?yún)?shù)僅來(lái)自命令行時(shí),小命令的執(zhí)行使用基礎(chǔ)小命令類提供的默認(rèn)方法。一旦小命令完成執(zhí)行,處理前進(jìn)到框1412。在框1412,小命令被清除。這包括調(diào)用相關(guān)聯(lián)的小命令對(duì)象的析構(gòu)函數(shù),它負(fù)責(zé)解除分配存儲(chǔ)器等等。然后,命令串的處理完成。用于創(chuàng)建小命令對(duì)象的示例性過(guò)程圖15所示是用于創(chuàng)建適于在圖14所示的命令串的處理中使用的小命令對(duì)象的示例性過(guò)程的邏輯流程圖。在這一點(diǎn)上,開發(fā)了小命令數(shù)據(jù)結(jié)構(gòu),并指定了屬性和期望的輸入?yún)?shù)。小命令被編譯并已被注冊(cè)。在注冊(cè)期間,類名(即,小命令名)被寫入注冊(cè)存儲(chǔ)中,并且儲(chǔ)存了與小命令相關(guān)聯(lián)的元數(shù)據(jù)。過(guò)程1500在框1501開始,語(yǔ)法分析器接收到指示小命令的輸入(例如,按鍵)。語(yǔ)法分析器可通過(guò)從注冊(cè)表內(nèi)查找該輸入,并將該輸入與注冊(cè)的小命令之一相關(guān)聯(lián),以將輸入識(shí)別為小命令。處理前進(jìn)到框1504。在框1504,讀取與小命令對(duì)象相關(guān)聯(lián)的元數(shù)據(jù)。元數(shù)據(jù)包括與小命令相關(guān)聯(lián)的偽指令的任一個(gè)。偽指令可應(yīng)用于小命令本身或一個(gè)或多個(gè)參數(shù)。在小命令注冊(cè)期間,注冊(cè)代碼將元數(shù)據(jù)注冊(cè)到永久存儲(chǔ)中。元數(shù)據(jù)可以儲(chǔ)存在串行化格式的XML文件、外部數(shù)據(jù)庫(kù)等中。類似于腳本處理過(guò)程中偽指令的處理,每一類別的偽指令在不同的階段處理。每一元數(shù)據(jù)偽指令處理其自己的錯(cuò)誤處理。處理在框1506繼續(xù)。在框1506,基于識(shí)別的小命令類例示小命令對(duì)象。處理在框1508繼續(xù)。在框1508,獲取關(guān)于小命令的信息。這可以通過(guò)反射或其它手段發(fā)生。信息是關(guān)于期望的輸入?yún)?shù)。如上所述,被聲明為公用的參數(shù)(例如,公用串Name730)對(duì)應(yīng)可以是在命令行上的命令串中指定或在輸入流中提供的期望輸入?yún)?shù)。管理工具框架通過(guò)圖18描述的擴(kuò)展類型管理器提供用于向調(diào)用者返回信息(在需要的基礎(chǔ)上)的公用接口。處理在框1510繼續(xù)。在框1510,應(yīng)用適用性偽指令(例如,表1)。適用性偽指令確保了該類在某些機(jī)器角色和/或用戶角色中使用。例如,某些小命令可能只能由域管理員使用。如果未滿足適用性偽指令之一中指定的約束,則出現(xiàn)差錯(cuò)。處理在框1512繼續(xù)。在框1512,使用元數(shù)據(jù)來(lái)提供智能感知。在處理的這一點(diǎn)上,尚未輸入整個(gè)命令串。然而,管理工具框架知道可用的小命令。一旦確定了小命令,則管理工具框架知道在小命令對(duì)象上反射所允許的輸入?yún)?shù)。由此,一旦提供了小命令名字的可消除歧義的部分,則管理工具框架可自動(dòng)完成小命令,然后一旦在命令行上鍵入了輸入?yún)?shù)的可消除歧義的部分,則自動(dòng)完成輸入?yún)?shù)。自動(dòng)完成可以在一旦輸入?yún)?shù)的部分能夠明確地識(shí)別輸入?yún)?shù)之一之后發(fā)生。另外,自動(dòng)完成也可在小命令名字和操作數(shù)上發(fā)生。處理在框1514繼續(xù)。在框1514,處理等待,直到輸入了小命令的輸入?yún)?shù)。這可在一旦用戶例如通過(guò)敲擊回車鍵指示了命令串的結(jié)束之后發(fā)生。在腳本中,新行指示命令串的結(jié)束。這一等待可包括從用戶獲取關(guān)于參數(shù)的額外信息并應(yīng)用其它偽指令。當(dāng)小命令是管道化參數(shù)之一時(shí),處理可立即開始。一旦提供了必要的命令串和輸入?yún)?shù),處理完成。用于填充小命令的示例性過(guò)程用于填充小命令的示例性過(guò)程在圖16中示出,并現(xiàn)在結(jié)合圖5來(lái)描述。在一個(gè)示例性管理工具框架中,核心引擎執(zhí)行處理來(lái)填充小命令的參數(shù)。處理在創(chuàng)建了小命令的實(shí)例之后在框1601開始。處理在框1602繼續(xù)。在框1602,檢索小命令中聲明的參數(shù)(例如,ProcessName(進(jìn)程名))?;趯?duì)小命令的聲明,核心引擎識(shí)別出傳入的輸入對(duì)象將提供名為“ProcessName”的屬性。如果傳入的屬性的類型不同于參數(shù)聲明中指定的類型,則該類型將通過(guò)擴(kuò)展類型管理器來(lái)強(qiáng)制。強(qiáng)制數(shù)據(jù)類型的過(guò)程在下文名為“示例性擴(kuò)展類型管理器處理”一節(jié)中解釋。處理繼續(xù)到框1603。在框1603,獲取與參數(shù)相關(guān)聯(lián)的屬性。屬性標(biāo)識(shí)了參數(shù)的輸入源是否為命令行或者它是否來(lái)自管道。處理繼續(xù)到判別框1604。在判別框1604,判斷屬性是否將輸入源指定為命令行。如果輸入源是命令行,則處理在框1609繼續(xù)。否則,處理在判別框1605繼續(xù)。在判別框1605,判斷是應(yīng)當(dāng)使用聲明中指定的屬性名還是應(yīng)當(dāng)使用屬性名的映射。這一判斷基于命令輸入是否指定了參數(shù)的映射。以下行示出了參數(shù)“ProcessName”到傳入對(duì)象的成員“foo”的示例性映射$get/process|wherehan*-gt500|stop/process-ProcessName<-foo處理在框1606繼續(xù)。在框1606,應(yīng)用映射。映射將期望參數(shù)的名字從“ProcessName”替換成“foo”,它然后由核心引擎用于對(duì)傳入對(duì)象進(jìn)行語(yǔ)法分析并識(shí)別正確的期望參數(shù)。處理在框1608繼續(xù)。在框1608,查詢擴(kuò)展類型對(duì)象以查找傳入對(duì)象內(nèi)的參數(shù)的值。如結(jié)合擴(kuò)展類型管理器所解釋的,擴(kuò)展類型管理器采用參數(shù)名并使用反射來(lái)識(shí)別傳入對(duì)象內(nèi)具有參數(shù)名的參數(shù)。如有必要,擴(kuò)展類型管理器也可對(duì)參數(shù)執(zhí)行其它處理。例如,擴(kuò)展類型管理器可通過(guò)上述的轉(zhuǎn)換機(jī)制將數(shù)據(jù)類型強(qiáng)制成期望的數(shù)據(jù)類型。處理繼續(xù)到框1610。返回到框1609,如果屬性指定了輸入源是命令行,則獲取來(lái)自命令行的數(shù)據(jù)。獲取來(lái)自命令行的數(shù)據(jù)可以通過(guò)擴(kuò)展類型管理器來(lái)執(zhí)行。處理然后繼續(xù)到判別框1610。在判別框1610,判斷是否存在另一期望參數(shù)。如果存在另一期望參數(shù),則處理循環(huán)回到框1602,并如上所述地繼續(xù)。否則,處理完成并返回。由此,如圖所示,小命令擔(dān)當(dāng)用于切碎傳入數(shù)據(jù)以獲取期望參數(shù)的模版。另外,期望參數(shù)是在不知道提供期望參數(shù)的值的傳入對(duì)象的類型的情況下獲取的。這比傳統(tǒng)的管理環(huán)境要困難得多。傳統(tǒng)的管理環(huán)境是緊綁定的,并需要該對(duì)象的類型在編譯時(shí)是已知的。另外,在傳統(tǒng)環(huán)境中,期望參數(shù)將按傳值或按傳址被傳遞到函數(shù)。由此,本發(fā)明的語(yǔ)法分析(例如,“切碎”)機(jī)制允許程序員指定參數(shù)的類型,而無(wú)需他們具體地知道如何獲取這些參數(shù)的值。例如,給定對(duì)小命令Foo的以下聲明ClassFoo:Cmdlet{stringName;BoolRecurse;}命令行句法可以是以下的任一種$Foo-Name:(string)-Recurse:True$Foo-Name<string>-RecurseTrue$Foo-Name(string)該組規(guī)則可由系統(tǒng)管理員修改,以產(chǎn)生期望的句法。另外語(yǔ)法分析器可支持多組規(guī)則,使得用戶可使用一個(gè)以上句法。本質(zhì)上,與小命令構(gòu)造相關(guān)聯(lián)的語(yǔ)法(例如,stringName和BoolRecurse)驅(qū)動(dòng)語(yǔ)法分析器。一般而言,語(yǔ)法分析偽指令描述了作為命令串輸入的參數(shù)應(yīng)當(dāng)如何映射到小命令對(duì)象中識(shí)別的期望參數(shù)。核查輸入?yún)?shù)類型以判斷是否正確。如果輸入?yún)?shù)類型不正確,則可強(qiáng)制輸入?yún)?shù)成為正確。如果輸入?yún)?shù)類型不正確并且不能被強(qiáng)制,則打印使用出錯(cuò)。使用出錯(cuò)允許用戶變得知曉期望的正確句法。使用出錯(cuò)可從文檔編制偽指令獲取描述句法的信息。一旦映射或驗(yàn)證了輸入?yún)?shù)類型,則填充小命令對(duì)象實(shí)例中對(duì)應(yīng)的成員。當(dāng)填充成員時(shí),擴(kuò)展類型管理器提供了對(duì)輸入?yún)?shù)類型的處理。簡(jiǎn)言之,處理可包括屬性路徑機(jī)制、關(guān)鍵字機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、通配符處理機(jī)制、關(guān)系機(jī)制以及屬性集機(jī)制。這些機(jī)制的每一個(gè)在下文名為“擴(kuò)展類型管理器處理”一節(jié)中詳細(xì)描述,它也包括了說(shuō)明性示例。用于執(zhí)行小命令的示例性過(guò)程用于執(zhí)行小命令的示例性過(guò)程在圖7中示出,并現(xiàn)在描述。在一個(gè)示例性管理工具環(huán)境中,核心引擎執(zhí)行小命令。如上所述,對(duì)每一輸入對(duì)象執(zhí)行第二方法1440內(nèi)的代碼1442。處理在框1701開始,其中已填充了小命令。處理在框1702繼續(xù)。在框1702,檢索來(lái)自代碼542的語(yǔ)句用于執(zhí)行。處理在判別框1704繼續(xù)。在判別框1704,判斷語(yǔ)句內(nèi)是否包括掛鉤。簡(jiǎn)單地轉(zhuǎn)向圖5,掛鉤可包括調(diào)用由核心引擎提供的API。例如,圖5中小命令500的代碼542內(nèi)的語(yǔ)句550調(diào)用了指定必要參數(shù)、第一個(gè)串(如,“PID=”)以及參數(shù)(如,PID)的confirmprocessing(確認(rèn)處理)API。返回到圖17,如果語(yǔ)句包括掛鉤,則處理繼續(xù)到框1712。由此,如果指定了調(diào)用confirmprocessingAPI的指令,則小命令在由操作環(huán)境提供的備選執(zhí)行模式中操作。否則,處理在框1706繼續(xù),并且執(zhí)行在“正?!蹦J街欣^續(xù)。在框1706,處理該語(yǔ)句。處理然后前進(jìn)到判別框1708。在框1708,判斷代碼是否包括另一語(yǔ)句。如果有另一語(yǔ)句,則處理循環(huán)回到框1702,以獲取下一語(yǔ)句,并如上所述地前進(jìn)。否則,處理繼續(xù)到判別框1714。在判別框1714,判斷是否有另一輸入對(duì)象要處理。如果有另一輸入對(duì)象,則處理繼續(xù)到框1716,其中用來(lái)自下一對(duì)象的數(shù)據(jù)填充小命令。對(duì)下一對(duì)象執(zhí)行圖16中描述的填充過(guò)程。處理然后循環(huán)回到框1702,并如上所述地前進(jìn)。一旦處理了所有的對(duì)象,用于執(zhí)行小命令的過(guò)程完成并返回。返回到判別框1704,如果語(yǔ)句包括掛鉤,則處理繼續(xù)到框1712。在框1712,處理由管理工具環(huán)境提供的附加特征。處理在判別框1708繼續(xù),并如上所述地繼續(xù)?,F(xiàn)在結(jié)合圖6所示的示例性數(shù)據(jù)結(jié)構(gòu)600描述框1712內(nèi)執(zhí)行的附加處理。如上所述,在命令基類600內(nèi),可以聲明對(duì)應(yīng)于附加的期望輸入?yún)?shù)的參數(shù)(如,開關(guān))。開關(guān)包括預(yù)定義的串,并且當(dāng)被識(shí)別時(shí),指示核心引擎向小命令提供附加功能。如果在命令輸入中指定了參數(shù)verbose610,則執(zhí)行verbose語(yǔ)句614。以下是包括verbose開關(guān)的命令行的一個(gè)示例$get/rocess|where″han*-gt500″|stop/process-verbose一般而言,當(dāng)在命令輸入內(nèi)指定“-verbose”時(shí),核心引擎對(duì)每一輸入對(duì)象執(zhí)行該命令,并將對(duì)每一輸入對(duì)象執(zhí)行的實(shí)際命令轉(zhuǎn)發(fā)到主機(jī)程序用于顯示。以下是當(dāng)在示例性管理工具環(huán)境中執(zhí)行上述命令行時(shí)生成的輸出的示例$stop/processPID=15$stop/processPID=33如果在命令輸入中指定了參數(shù)whatif620,則執(zhí)行whatif語(yǔ)句624。以下是包括whatif開關(guān)的命令行的示例$get/process|where″han*-get500″|stop/process-whatif一般而言,當(dāng)指定“-whatif”時(shí),核心引擎實(shí)際上不執(zhí)行代碼542,而是相反將要被執(zhí)行的命令發(fā)送到主機(jī)程序用于顯示。以下是當(dāng)在本發(fā)明的管理工具環(huán)境中執(zhí)行上述命令行時(shí)生成的輸出示例$stop/processPID=15$stop/processPID=33如果在命令輸入中指定了參數(shù)confirm630,則執(zhí)行confirm語(yǔ)句634。以下是包括confirm開關(guān)的命令行的一個(gè)示例$get/process|where″han*-get500″|stop/process-confirm一般而言,當(dāng)指定了“-confirm”時(shí),核心引擎請(qǐng)求關(guān)于是否繼續(xù)命令的額外用戶輸入。以下是當(dāng)在本發(fā)明的管理工具環(huán)境中執(zhí)行上述命令行時(shí)生成的輸出示例。$stop/processPID15Y/NY$stop/processPID13Y/NN如上所述,示例性數(shù)據(jù)結(jié)構(gòu)600也可包括判斷所請(qǐng)求的用于執(zhí)行的任務(wù)是否應(yīng)當(dāng)被允許的安全性方法640。在傳統(tǒng)的管理環(huán)境中,每一命令負(fù)責(zé)核查執(zhí)行該命令的人是否具有足夠的特權(quán)來(lái)執(zhí)行該命令。為執(zhí)行這一核查,需要廣泛的代碼來(lái)訪問(wèn)來(lái)自若干來(lái)源的信息。由于這些復(fù)雜度,許多命令不執(zhí)行安全性核查。本發(fā)明的管理工具環(huán)境的發(fā)明人認(rèn)識(shí)到,當(dāng)在命令輸入中指定任務(wù)時(shí),用于執(zhí)行安全性核查的必要信息在管理工具環(huán)境內(nèi)是可用的。因此,管理工具框架執(zhí)行安全性核查,而不需要來(lái)自工具開發(fā)者的復(fù)雜代碼。該安全性核查可對(duì)在其小命令內(nèi)定義掛鉤的任一小命令執(zhí)行?;蛘撸瑨煦^可以是可任選的輸入?yún)?shù),它可在命令輸入中指定,類似于上述的verbose參數(shù)。實(shí)現(xiàn)安全性核查以支持基于角色的認(rèn)證,它一般被定義為基于用戶的角色控制哪些用戶具有對(duì)資源的訪問(wèn)的系統(tǒng)。由此,向每一角色分配對(duì)不同資源的某些訪問(wèn)權(quán)限。然后將用戶分配給一個(gè)或多個(gè)角色。一般而言,基于角色的認(rèn)證集中在三項(xiàng)上原則、資源和行動(dòng)。原則標(biāo)識(shí)了誰(shuí)請(qǐng)求了在資源上執(zhí)行行動(dòng)。本發(fā)明的發(fā)明人認(rèn)識(shí)到,所請(qǐng)求的小命令對(duì)應(yīng)于要執(zhí)行的行動(dòng)。另外,發(fā)明人理解,其中執(zhí)行管理工具框架的進(jìn)程的所有者對(duì)應(yīng)于原則。此外,發(fā)明人理解,資源是在小命令中指定的。因此,由于管理工具框架具有對(duì)這些項(xiàng)的訪問(wèn),因此發(fā)明人認(rèn)識(shí)到,可以從管理工具框架內(nèi)執(zhí)行安全性核查,而不需要工具開發(fā)者實(shí)現(xiàn)安全性核查。安全性核查的操作可以在當(dāng)小命令內(nèi)請(qǐng)求附加功能的任一時(shí)刻通過(guò)使用諸如confirmprocessingAPI等掛鉤來(lái)執(zhí)行?;蛘?,安全性核查可以通過(guò)核查在命令行上是否輸入了類似于verbose、whatif和confirm等安全開關(guān)來(lái)執(zhí)行。對(duì)于任一實(shí)現(xiàn),checkSecurity(核查安全性)方法調(diào)用了由安全性進(jìn)程(未示出)提供的API,該安全性進(jìn)程提供了用于判斷誰(shuí)被允許的一組API。安全性進(jìn)程采用由管理工具框架提供的信息,并提供指示任務(wù)是否可被完成的結(jié)果。管理工具框架然后可提供出錯(cuò)或僅僅停止任務(wù)的執(zhí)行。由此,通過(guò)在小命令內(nèi)提供掛鉤,開發(fā)者可使用由管理工具框架提供的附加處理。示例性擴(kuò)展類型管理器處理如上文結(jié)合圖18提到的,擴(kuò)展類型管理器可在提供的對(duì)象上執(zhí)行附加的處理。附加處理可以在語(yǔ)法分析器220、腳本引擎222或管道處理器402處執(zhí)行。附加處理包括屬性路徑機(jī)制、關(guān)鍵字機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、通配符處理機(jī)制、關(guān)系機(jī)制以及屬性集機(jī)制。本領(lǐng)域的技術(shù)人員可以理解,擴(kuò)展類型管理器也可以用其它處理來(lái)擴(kuò)展,而不脫離本發(fā)明的范圍。現(xiàn)在描述附加處理機(jī)制的每一個(gè)。首先,屬性路徑機(jī)制允許一個(gè)串導(dǎo)航對(duì)象的屬性。在當(dāng)前反射系統(tǒng)中,查詢可查詢對(duì)象的屬性。然而,在本發(fā)明的擴(kuò)展類型管理器中,可以指定提供到連續(xù)的對(duì)象屬性的導(dǎo)航路徑的串。以下是屬性路徑P1.P2.P3.P4的說(shuō)明性句法。每一組件(例如,P1、P2、P3和P4)包括可表示屬性、具有參數(shù)的方法、不是有參數(shù)的方法、字段、XPATH等等的串。XPATH指定了查詢串,以搜索元素(例如,“/Foo@=13”。在該串內(nèi),可以包括特殊的字符以具體地指示組件的類型。如果串不包含特殊的字符,則擴(kuò)展類型管理器可執(zhí)行查找以確定組件的類型。例如,如果組件P1是對(duì)象,則擴(kuò)展類型管理器可查詢P2是否為對(duì)象的屬性、方法上的對(duì)象、對(duì)象的字段或?qū)傩约R坏U(kuò)展類型管理器標(biāo)識(shí)了P2的類型,則執(zhí)行依照該類型的處理。如果組件不是上述類型之一,則擴(kuò)展類型管理器可進(jìn)一步查詢擴(kuò)展源,以判斷是否有將P1的類型轉(zhuǎn)換成P2的類型的轉(zhuǎn)換功能?,F(xiàn)在將使用說(shuō)明性命令串描述這些和其它查找,并示出代表性輸出。以下是包括屬性路徑的說(shuō)明性串$get/process|/wherehand*-gt>500|format/tablename.toupper,ws.kb,exe.*ver.*.description.tolower.trunc(30)在上述說(shuō)明性串中,有三個(gè)屬性路徑(1)“name.toupper”;(2)“ws.kb”;以及(3)“exe*.ver*.description.tolower.trunc(30)”。在描述這些屬性路徑之前,應(yīng)當(dāng)注意,“name”、“ws”和“exe”指定了表格的屬性。另外,應(yīng)當(dāng)注意,這些屬性的每一個(gè)是傳入對(duì)象的直接屬性,它們最初由“get/process”生成,然后通過(guò)各種小命令管道化?,F(xiàn)在描述三個(gè)屬性路徑的每一個(gè)所涉及的處理。在第一個(gè)屬性路徑(即,“name.toupper”)中,name是傳入對(duì)象的直接屬性,并且本身也是對(duì)象。擴(kuò)展類型管理器使用上述優(yōu)先級(jí)查找來(lái)查詢系統(tǒng),以確定toupper的類型。擴(kuò)展類型管理器發(fā)現(xiàn)toupper不是屬性。然而,toupper可以是由串類型繼承的方法,以將串內(nèi)的小寫字母轉(zhuǎn)換成大寫字母?;蛘撸瑪U(kuò)展類型管理器可能已查詢了擴(kuò)展的元數(shù)據(jù),以判斷是否有可將name對(duì)象轉(zhuǎn)換成大寫的第三方代碼。在找出組件類型之后,依照該組件類型執(zhí)行處理。在第二個(gè)屬性路徑中(即,“ws.kb”),“ws”是傳入對(duì)象的直接屬性,并本身也是對(duì)象。擴(kuò)展類型管理器確定“ws”是整數(shù)。然后,擴(kuò)展類型管理器查詢kb是否是整數(shù)的屬性、kb是否是整數(shù)的方法、并最終查詢是否有任何代碼知道如何采用整數(shù)并將該整數(shù)轉(zhuǎn)換成kb類型。注冊(cè)第三方代碼以執(zhí)行該轉(zhuǎn)換,并且執(zhí)行該轉(zhuǎn)換。在第三個(gè)屬性路徑中(即,“exe*.ver*.description.tolower.trunc(30)”),有若干個(gè)組件。第一個(gè)組件(“exe*”)是傳入對(duì)象的直接屬性,并且也是對(duì)象。再一次,擴(kuò)展類型管理器在查找查詢中向下前進(jìn),以處理第二個(gè)組件(“ver*”)?!癳xe*”對(duì)象不具有“ver*”屬性或方法,因此擴(kuò)展類型管理器查詢擴(kuò)展的元數(shù)據(jù),以判斷是否有被注冊(cè)來(lái)將可執(zhí)行名字轉(zhuǎn)換成版本的任何代碼。對(duì)于該示例,存在這一代碼。代碼可采用可執(zhí)行的名字串,并使用它來(lái)打開文件,然后訪問(wèn)版本塊對(duì)象,并返回版本塊對(duì)象的描述屬性(第三個(gè)組件(“description”))。擴(kuò)展類型管理器然后對(duì)第四個(gè)組件(“tolower”)和第五個(gè)組件(“trunc(40)”)執(zhí)行該同一查找機(jī)制。由此,如所示,擴(kuò)展類型管理器可在命令串上執(zhí)行相當(dāng)精細(xì)的處理,而無(wú)需管理員書寫任何特定代碼。表1示出了對(duì)說(shuō)明性串生成的輸出。Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18,556officeoutlookMSMSGS13,248messenger表1另一查詢機(jī)制1824包括關(guān)鍵字。關(guān)鍵字標(biāo)識(shí)了產(chǎn)生唯一數(shù)據(jù)類型的實(shí)例的一個(gè)或多個(gè)屬性。例如,在數(shù)據(jù)庫(kù)中,一列可以被標(biāo)識(shí)為可唯一地標(biāo)識(shí)每一行(例如,社會(huì)保障號(hào))的關(guān)鍵字。關(guān)鍵字儲(chǔ)存在與數(shù)據(jù)類型相關(guān)聯(lián)的類型元數(shù)據(jù)1840中。該關(guān)鍵字然后可由擴(kuò)展類型管理器在處理該數(shù)據(jù)類型的對(duì)象時(shí)使用。數(shù)據(jù)類型可以是擴(kuò)展的數(shù)據(jù)類型或現(xiàn)有的數(shù)據(jù)類型。另一查詢機(jī)制824包括比較機(jī)制。比較機(jī)制比較兩個(gè)對(duì)象。如果兩個(gè)對(duì)象直接支持比較功能,則執(zhí)行直接支持的比較功能。然而,如果沒(méi)有一個(gè)對(duì)象支持比較功能,則擴(kuò)展類型管理器可在類型元數(shù)據(jù)中查找被注冊(cè)來(lái)支持兩個(gè)對(duì)象之間的比較的代碼。下文在表2中示出了調(diào)用比較機(jī)制的一系列說(shuō)明性命令行串,以及對(duì)應(yīng)的輸出。$$a=$(get/date)$start/sleep5$$b=$(get/datecompare/time$a$bTicks51196579Days0Hours0Milliseconds119Minutes0Seconds5TotalDays5.92552997685185E-05TotalHours0.00142212719444444TotalMilliseconds5119.6579TotalMinutes0.00853276316666667TotalSecond5.1196579表2書寫compare/time小命令以比較兩個(gè)datetime對(duì)象。在這一情況下,DateTime對(duì)象支持IComparable接口。另一查詢機(jī)制1824包括轉(zhuǎn)換機(jī)制。擴(kuò)展類型管理器允許注冊(cè)規(guī)定其執(zhí)行特定轉(zhuǎn)換的能力的代碼。然后,當(dāng)輸入類型A的對(duì)象,并且小命令指定類型B的對(duì)象,擴(kuò)展類型管理器可使用注冊(cè)的轉(zhuǎn)換之一執(zhí)行轉(zhuǎn)換。擴(kuò)展類型管理器可執(zhí)行一系列轉(zhuǎn)換以將類型A強(qiáng)制成類型B。上述屬性路徑(“ws.kb”)示出了轉(zhuǎn)換機(jī)制。另一查詢機(jī)制1824包括通配符處理機(jī)制。通配符處理指的是串內(nèi)通配符字符。通配符處理機(jī)制輸入具有通配符字符串并產(chǎn)生一組對(duì)象。擴(kuò)展類型管理器允許要被注冊(cè)指定通配符處理的代碼。上述屬性路徑(“exe*.ver*.description.tolower.trunc(30)”)示出了通配符處理機(jī)制。注冊(cè)的進(jìn)程可提供對(duì)文件名、文件對(duì)象、傳入屬性等的通配符處理。另一查詢機(jī)制1824包括屬性集機(jī)制。屬性集機(jī)制允許對(duì)一組屬性定義名字。管理員然后可指定命令串內(nèi)的名字,以獲得屬性集。屬性集可以用各種方式來(lái)定義。在一種方法中,諸如“?”等預(yù)定義參數(shù)可以作為對(duì)小命令的輸入?yún)?shù)而被輸入。操作環(huán)境在識(shí)別預(yù)定義的參數(shù)之后列出傳入對(duì)象的所有屬性。列表可以是允許管理員容易地核查(例如,“點(diǎn)擊”)期望的屬性以及對(duì)屬性集命名的GUI。屬性集信息然后可儲(chǔ)存在擴(kuò)展的元數(shù)據(jù)中。以下在表3中示出了調(diào)用屬性集機(jī)制的說(shuō)明性串以及對(duì)應(yīng)的輸出$get/process|wherehan*-gt>500|format/tableconfig在這一說(shuō)明性串中,定義了名為“config”屬性集,以包括名字屬性、進(jìn)程id屬性(Pid)以及優(yōu)先級(jí)屬性。該表的輸出示出如下。NamePidPriorityETClient3528Normalcvsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一查詢機(jī)制1824包括關(guān)系機(jī)制。與支持一種關(guān)系(即,繼承)的傳統(tǒng)類型系統(tǒng)相反,關(guān)系機(jī)制支持表達(dá)類型之間的一個(gè)以上關(guān)系。再一次,這些關(guān)系被注冊(cè)。關(guān)系可包括找出對(duì)象消耗的項(xiàng),或找出消耗對(duì)象的項(xiàng)。擴(kuò)展類型管理器可訪問(wèn)描述各種關(guān)系的本體論。使用擴(kuò)展的元數(shù)據(jù)和代碼,可描述用于訪問(wèn)諸如OWL、DAWL等的任何本體論服務(wù)的規(guī)范。以下是使用關(guān)系機(jī)制的說(shuō)明性串的一部分.OWL:″string″。“OWL”標(biāo)識(shí)符標(biāo)識(shí)了本體論服務(wù),而“string”指定了本體論服務(wù)內(nèi)的特定串。由此,擴(kuò)展類型管理器可訪問(wèn)本體論服務(wù)提供的類型。用于顯示命令行數(shù)據(jù)的示例性過(guò)程本發(fā)明的機(jī)制提供了一種數(shù)據(jù)驅(qū)動(dòng)的命令行輸出。數(shù)據(jù)的格式化和輸出由小命令管道中的一個(gè)或多個(gè)小命令提供。通常,這些小命令包括在上文結(jié)合圖2描述的非管理小命令中。小命令可包括格式化(format)小命令、標(biāo)記(markup)小命令、轉(zhuǎn)換(convert)小命令、變換(transform)小命令以及輸出(out)小命令。圖19圖形地描繪了管道內(nèi)這些小命令的示例性序列1901-1907。第一序列1901示出輸出小命令1910為管道內(nèi)的最后一個(gè)小命令。以上文對(duì)于其它小命令描述的同一方式,輸出小命令1910接受由管道內(nèi)的其它小命令生成和處理的管道對(duì)象流。然而,與大多數(shù)小命令相反,輸出小命令1910不為其它小命令發(fā)出管道對(duì)象。相反,輸出小命令1910負(fù)責(zé)呈現(xiàn)/顯示由管道生成的結(jié)果。每一輸出小命令1910與一輸出目的地相關(guān)聯(lián),如設(shè)備、程序等。例如,對(duì)于控制臺(tái)設(shè)備,輸出小命令1910可被指定為out/console(輸出/控制臺(tái));對(duì)于內(nèi)聯(lián)網(wǎng)瀏覽器,輸出小命令1910可被指定為out/browser(輸出/瀏覽器);對(duì)于窗口,輸出小命令1910可被指定為out/window(輸出/窗口)。每一特定的輸出小命令熟悉其相關(guān)聯(lián)目的地的性能。場(chǎng)所信息(例如,日期和貨幣格式)由輸出小命令1910處理,除非管道中轉(zhuǎn)換小命令超過(guò)輸出小命令。在這一情況下,轉(zhuǎn)換小命令處理本地信息。每一主機(jī)負(fù)責(zé)支持某些輸出小命令,如out/console。主機(jī)也支持任一目標(biāo)專用主機(jī)小命令(例如,out/chart,它將輸出定向到由電子表格應(yīng)用程序提供的圖表)。另外,主機(jī)負(fù)責(zé)提供結(jié)果的默認(rèn)處理。這一序列中的輸出小命令可決定通過(guò)調(diào)用其它輸出處理小命令(如格式化/標(biāo)記/轉(zhuǎn)換/變換)來(lái)實(shí)現(xiàn)其行為。由此,輸出小命令可隱含地將序列1901修改成其它序列的任一個(gè),或可添加其自己的附加格式化/輸出小命令。第二序列1902示出了格式化小命令1920在輸出小命令1910之前。對(duì)于這一序列,格式化小命令1920接受由管道內(nèi)的其它小命令生成和處理的管道對(duì)象流。總體上,格式化小命令1920提供了選擇顯示屬性的方式以及指定諸如形狀、列寬度、頁(yè)眉、頁(yè)腳等頁(yè)面布局的方式。形狀可包括表格、寬列表、欄式列表等等。另外,格式化小命令1920可包括總計(jì)或總和的計(jì)算。由格式化小命令1920執(zhí)行的示例性處理在下文結(jié)合圖20描述。簡(jiǎn)言之,格式化小命令除發(fā)出管道對(duì)象之外還發(fā)出格式化對(duì)象。格式化小命令可由輸出小命令(例如,序列1902中的輸出小命令1902)通過(guò)擴(kuò)展類型管理器或其它機(jī)制來(lái)向下游識(shí)別。輸出小命令1920可選擇使用發(fā)出的格式化對(duì)象或可選擇忽略它們。輸出小命令基于顯示信息中指定的頁(yè)面布局?jǐn)?shù)據(jù)確定頁(yè)面布局。在某些情況下,對(duì)頁(yè)面布局的修改可由輸出小命令指定。在一個(gè)示例性過(guò)程中,輸出小命令可通過(guò)找出預(yù)定數(shù)量對(duì)象的每一屬性的最大長(zhǎng)度(例如,50)并將列寬度設(shè)為該最大長(zhǎng)度,來(lái)確定未指定的列寬度。格式化對(duì)象包括格式化信息、頁(yè)眉/頁(yè)腳信息等等。第三序列1903示出了格式化小命令1920在輸出小命令1910之前。然而,在第三序列1903中,在格式化小命令1920和輸出小命令1910之間管道化了標(biāo)記小命令1930。標(biāo)記小命令1930提供了用于向選擇的參數(shù)添加屬性注釋(例如,字體、顏色)的機(jī)制。由此,標(biāo)記小命令1930出現(xiàn)在輸出小命令1910之前。屬性注釋可以使用“陰影屬性袋(shadowpropertybag)”來(lái)實(shí)現(xiàn),或通過(guò)在屬性袋中添加自定義名字空間中的屬性注釋來(lái)實(shí)現(xiàn)。只要標(biāo)記注釋可在處理格式化小命令1920的過(guò)程中維護(hù),標(biāo)記小命令1930就可出現(xiàn)在格式化小命令1920之前。第四序列1904再次示出了格式化小命令1920在輸出小命令1910之前。然而,在第四序列1904中,在格式化小命令1920和輸出小命令1910之間管道化了轉(zhuǎn)換小命令1940。轉(zhuǎn)換小命令1940也被配置成處理由格式化小命令1920發(fā)出的格式化對(duì)象。轉(zhuǎn)換小命令1940將管道化的對(duì)象轉(zhuǎn)換成基于特定編碼的格式化對(duì)象。轉(zhuǎn)換小命令1940與該特定的編碼相關(guān)聯(lián)。例如,將管道化對(duì)象轉(zhuǎn)換成現(xiàn)用目錄對(duì)象(ADO)的轉(zhuǎn)換小命令1940可以在命令行上被聲明為“convert/ADO”。同樣,將管道化對(duì)象轉(zhuǎn)換成用逗號(hào)分隔的值(csv)的轉(zhuǎn)換小命令1940可在命令行上被聲明為“convert/csv”。某些格式化小命令1940(例如,convert/XML和convert/html)可以是阻斷的小命令,這意味著所有管道化對(duì)象在執(zhí)行轉(zhuǎn)換之前接收。通常輸出小命令1920可確定是否使用由格式化對(duì)象提供的格式化信息。然而,當(dāng)轉(zhuǎn)換小命令1920出現(xiàn)在輸出小命令1920之前時(shí),實(shí)際的數(shù)據(jù)轉(zhuǎn)換已經(jīng)在輸出小命令接收對(duì)象之前發(fā)生。因此,在這一情況下,輸出小命令不能忽略該轉(zhuǎn)換。第五序列1905示出了該順序的格式化小命令1920、標(biāo)記小命令1930、轉(zhuǎn)換小命令1940以及輸出小命令1910。由此,這示出了標(biāo)記小命令1930可發(fā)生在轉(zhuǎn)換小命令1940之前。第六序列1906示出了格式化小命令1920、特定轉(zhuǎn)換小命令(例如,convert/xml小命令1940′)、特定的變換小命令(例如,transfrom/xslt小命令1950)以及輸出小命令1910。convert/xml小命令1940′將管道化的對(duì)象轉(zhuǎn)換成可擴(kuò)展標(biāo)記語(yǔ)言(XML)文檔。transform/xslt小命令1950使用可擴(kuò)充樣式語(yǔ)言(XSL)樣式表將XML文檔變換成另一XML文檔。變換過(guò)程通常被稱為可擴(kuò)充樣式語(yǔ)言變換(XSLT),其中,XSL處理器讀取XML文檔,并遵循XSL樣式表中的指令來(lái)創(chuàng)建新的XML文檔。第七序列1907示出了格式化小命令1920、標(biāo)記小命令1930、特定的轉(zhuǎn)換小命令(例如,convert/xml小命令1940′)、特定的變換小命令(例如,transform/xslt小命令1950)以及輸出小命令1910。由此,第七序列1907示出了令標(biāo)記小命令1930在轉(zhuǎn)換小命令和變換小命令的上游。圖20示出了由格式化小命令執(zhí)行的示例性處理2000。格式化過(guò)程在由語(yǔ)法分析器和管道處理器以上述方式對(duì)格式化小命令進(jìn)行語(yǔ)法分析和調(diào)用之后,在框2001開始。處理在框2002繼續(xù)。在框2002,接收管道對(duì)象,作為格式化小命令的輸入。處理在框2004繼續(xù)。在框2004,啟動(dòng)查詢以識(shí)別管道化對(duì)象的類型。這一查詢由上文結(jié)合圖18描述的擴(kuò)展類型管理器執(zhí)行。一旦擴(kuò)展類型管理器識(shí)別了對(duì)象的類型,則處理在框2006繼續(xù)。在框2006,在顯示信息中查找識(shí)別的類型。顯示信息的示例性格式在圖21中示出,并在下文描述。處理在框2008繼續(xù)。在判別框2008,確定是否在顯示信息中指定了識(shí)別的類型。如果顯示信息中沒(méi)有識(shí)別類型的條目,則處理完成。否則,處理在框2010繼續(xù)。在框2010,從顯示信息獲取與識(shí)別的類型相關(guān)聯(lián)的格式化信息。處理在框2012繼續(xù)。在框2012,在管道上發(fā)出信息。一旦信息被發(fā)出,處理完成?,F(xiàn)在更詳細(xì)地描述可被發(fā)出的示例性信息。該信息可包括格式化信息、頁(yè)眉/頁(yè)腳信息以及組結(jié)束/開始信號(hào)對(duì)象。格式化信息可包括形狀、標(biāo)簽、編號(hào)/項(xiàng)目符號(hào)、列寬度、字符編碼類型、內(nèi)容字體屬性、頁(yè)長(zhǎng)度、“按……分組”屬性名等等。這些的每一個(gè)可具有與其相關(guān)聯(lián)的附加指定。例如,形狀可指定形狀是表格、列表還是其它。標(biāo)簽可指定是使用列標(biāo)題、列表標(biāo)簽還是其它。字符編碼可指定ASCII、UTF-8、Unicode等等。內(nèi)容字體屬性可指定應(yīng)用到顯示的屬性值的字體。如果內(nèi)容字體屬性未被指定,則可使用默認(rèn)字體屬性(例如,CourierNew,10磅)。頁(yè)眉/頁(yè)腳信息可包括頁(yè)眉/頁(yè)腳范圍、字體屬性、標(biāo)題、小標(biāo)題、日期、時(shí)間、頁(yè)編號(hào)、分隔符等等。例如,范圍可指定文檔、頁(yè)、組等。對(duì)頁(yè)眉或頁(yè)腳可指定另外的屬性。例如,對(duì)于組和文檔頁(yè)腳,另外的屬性可包括計(jì)算總和/總計(jì)的屬性或列、對(duì)象計(jì)數(shù)、用于總計(jì)和計(jì)數(shù)的標(biāo)簽串等等。組結(jié)束/開始信號(hào)對(duì)象在格式化小命令檢測(cè)到“按……分組”屬性改變之后被發(fā)出。當(dāng)發(fā)生這一情況時(shí),格式化小命令將管道對(duì)象流作為先前已排序來(lái)處理,并且不對(duì)它們重新排序。組結(jié)束/開始信號(hào)對(duì)象可以散布在管道對(duì)象中??蓪?duì)嵌套的排序指定多個(gè)“按……分組”屬性。格式化小命令也可發(fā)出包括最終的總和和總計(jì)的格式化結(jié)束對(duì)象。簡(jiǎn)要地轉(zhuǎn)向圖21,示例性顯示信息2100是結(jié)構(gòu)化的格式,并包含與定義的每一對(duì)象相關(guān)聯(lián)的信息(例如,格式化信息、頁(yè)眉/頁(yè)腳信息、“按……分組”屬性或方法)。例如,顯示信息2100可以是基于XML的。上述屬性的每一個(gè)然后可在顯示信息內(nèi)指定。顯示信息2100內(nèi)的信息可以由輸入的對(duì)象類型的所有者來(lái)填充。操作環(huán)境提供了允許所有者通過(guò)創(chuàng)建、刪除和修改條目來(lái)更新顯示信息的某些API和小命令。圖22是列出由于某些格式化小命令(例如,formate/table(格式化/表格)、format/list(格式化/列表)以及format/wide(格式化/寬))、標(biāo)記小命令(例如,add/markup(添加/標(biāo)記))、轉(zhuǎn)換小命令(例如,convert/text(轉(zhuǎn)換/文本)、convert/sv(轉(zhuǎn)換/sv)、convert/csv(轉(zhuǎn)換/csv)、convert/ADO(轉(zhuǎn)換/ADO)、convert/XML(轉(zhuǎn)換/XML))、變換小命令(例如,transform/XSLT(變換/XSLT))以及輸出小命令(例如,out/console(輸出/控制臺(tái))、out/file(輸出/文件))的示例性句法2201-2213。圖23示出了由使用輸出處理小命令(例如,格式化小命令、轉(zhuǎn)換小命令和標(biāo)記小命令)的各種管道序列的out/concole小命令呈現(xiàn)的結(jié)果。如上所述,獲取并應(yīng)用交互式環(huán)境中的約束的機(jī)制可用于管理工具環(huán)境中。然而,本領(lǐng)域的技術(shù)人員可以理解,該機(jī)制可以用于各種交互式環(huán)境中。盡管上文描述了具體實(shí)現(xiàn)和實(shí)施例的細(xì)節(jié),然而這些細(xì)節(jié)旨在滿足法定的公開約束,而非限制所附權(quán)利要求書的范圍。由此,所附權(quán)利要求書所定義的本發(fā)明不限于上文所描述的具體特征。相反,本發(fā)明是以落入所附權(quán)利要求書的正確范圍內(nèi)、依照等效技術(shù)方案的原則適當(dāng)解釋的其形式或修改的任一個(gè)要求保護(hù)的。權(quán)利要求1.一種具有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述指令包括接收交互式環(huán)境中的串;識(shí)別所述串內(nèi)的屬性;識(shí)別與所述屬性相關(guān)聯(lián)的構(gòu)造;以及保存將所述屬性與所述構(gòu)造相關(guān)的信息。2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了所述構(gòu)造的約束。3.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述構(gòu)造包括變量、結(jié)構(gòu)、函數(shù)或腳本。4.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述信息包括元數(shù)據(jù)。5.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括當(dāng)交互地遇到所述構(gòu)造時(shí),向所述構(gòu)造應(yīng)用所述屬性。6.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述串包括在命令行環(huán)境中輸入的命令串。7.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述串包括腳本的一部分。8.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,識(shí)別所述屬性包括識(shí)別與所述構(gòu)造相關(guān)聯(lián)的多個(gè)屬性。9.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了所述構(gòu)造的類型。10.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了向所述構(gòu)造應(yīng)用智能以自動(dòng)完成所述構(gòu)造。11.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了向所述串應(yīng)用用于判斷所述串的處理是否繼續(xù)的謂詞偽指令。12.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了應(yīng)用用于指示獲取所述構(gòu)造的方式的語(yǔ)法分析偽指令。13.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了用于生成儲(chǔ)存在所述構(gòu)造內(nèi)的一組信息的數(shù)據(jù)生成偽指令。14.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了用于判斷分配給所述構(gòu)造的值是否滿足由所述屬性指定的準(zhǔn)則的數(shù)據(jù)確認(rèn)偽指令。15.一種處理交互式環(huán)境內(nèi)指定的約束的方法,其特征在于,所述方法包括識(shí)別交互式環(huán)境內(nèi)輸入的串內(nèi)的預(yù)定義開始符號(hào)和結(jié)束符號(hào);識(shí)別所述開始符號(hào)和所述結(jié)束符號(hào)之間的約束名;以及識(shí)別所述結(jié)束符號(hào)之后的構(gòu)造。16.如權(quán)利要求15所述的方法,其特征在于,還包括,只要在所述交互式環(huán)境內(nèi)遇到所述構(gòu)造,則向所述構(gòu)造應(yīng)用所述約束。17.如權(quán)利要求16所述的方法,其特征在于,所述約束包括謂詞偽指令,并且應(yīng)用所述約束包括在繼續(xù)處理所述構(gòu)造前判斷是否滿足一條件。18.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了向所述構(gòu)造應(yīng)用智能以自動(dòng)完成所述構(gòu)造。19.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了應(yīng)用用于指示獲取所述構(gòu)造的方式的語(yǔ)法分析偽指令。20.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了用于生成儲(chǔ)存在所述構(gòu)造中的一組信息的數(shù)據(jù)生成偽指令。21.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述屬性指定了用于判斷分配給所述構(gòu)造的值是否滿足由所述屬性指定的準(zhǔn)則的數(shù)據(jù)確認(rèn)偽指令。22.如權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述開始符號(hào)包括左括號(hào),并且所述結(jié)束符號(hào)包括右括號(hào)。23.一種處理輸入?yún)?shù)的系統(tǒng),其特征在于,所述系統(tǒng)包括用于處理的裝置;以及存儲(chǔ)器裝置,所述存儲(chǔ)器裝置為多個(gè)計(jì)算機(jī)可執(zhí)行指令而分配,所述多個(gè)計(jì)算機(jī)可執(zhí)行指令被加載到所述存儲(chǔ)器裝置中,以供所述處理裝置執(zhí)行,所述計(jì)算機(jī)可執(zhí)行指令執(zhí)行一種方法,包括用于接收交互式環(huán)境中的串的裝置;用于識(shí)別所述串內(nèi)的屬性的裝置;用于識(shí)別與所述屬性相關(guān)聯(lián)的構(gòu)造的裝置;以及用于保存將所述屬性與所述構(gòu)造相關(guān)聯(lián)的信息的裝置。24.如權(quán)利要求23所述的系統(tǒng),其特征在于,還包括用于在交互地遇到所述構(gòu)造時(shí)向所述構(gòu)造應(yīng)用所述屬性的裝置。全文摘要本發(fā)明的機(jī)制獲取交互式環(huán)境內(nèi)的約束(1202)、將這些約束與構(gòu)造相關(guān)聯(lián)、然后在遇到構(gòu)造時(shí)向構(gòu)造應(yīng)用這些約束(1206)。約束可以保存在與相應(yīng)的構(gòu)造相關(guān)聯(lián)的元數(shù)據(jù)中(1204)。約束可指定構(gòu)造的數(shù)據(jù)類型、謂詞偽指令(1210)、文檔編制偽指令(1212)、語(yǔ)法分析偽指令(1214)、數(shù)據(jù)生成偽指令(1216)、數(shù)據(jù)確認(rèn)偽指令(1218)或?qū)ο筇幚砗途幋a偽指令(1220)??蓴U(kuò)充約束,以支持其它偽指令。該機(jī)制允許交互式用戶容易地、交互地指定約束。文檔編號(hào)G06F1/00GK101351771SQ200480001295公開日2009年1月21日申請(qǐng)日期2004年7月22日優(yōu)先權(quán)日2003年10月24日發(fā)明者J·P·史諾弗爾,J·W·物魯荷三世,K·普什帕瓦南,S·維斯瓦那山申請(qǐng)人:微軟公司