專(zhuān)利名稱(chēng)::管理工具環(huán)境的制作方法
技術(shù)領(lǐng)域:
:這里揭示的主題涉及運(yùn)行時(shí)間環(huán)境,而且尤其涉及自動(dòng)化管理任務(wù)的管理工具環(huán)境。
背景技術(shù):
:管理任務(wù)支持諸如膝上型、桌面等計(jì)算設(shè)備日復(fù)一日的運(yùn)行。例如,典型地,管理任務(wù)能使用戶(hù)創(chuàng)建新文件夾、安裝或更新應(yīng)用程序、以及完成各種其它系統(tǒng)任務(wù)。維護(hù)網(wǎng)絡(luò)化計(jì)算機(jī)的系統(tǒng)管理員完成甚至更復(fù)雜的管理任務(wù),諸如創(chuàng)建新用戶(hù)、部署軟件和軟件補(bǔ)丁、監(jiān)控網(wǎng)絡(luò)、查找網(wǎng)絡(luò)故障等等。通常,命令行界面或圖形用戶(hù)界面(GUI)方便于管理任務(wù)的執(zhí)行。大多數(shù)圖形用戶(hù)界面需要用戶(hù)導(dǎo)航一系列菜單或頁(yè)面,然后在所想要的選項(xiàng)上點(diǎn)擊。按照這樣的界面,需要用戶(hù)跟隨這一系列菜單或頁(yè)面,并且不允許在沒(méi)有開(kāi)始或者在這一系列頁(yè)面上下來(lái)回移動(dòng)過(guò)的情況下就從一個(gè)頁(yè)面跳到另一個(gè)。這樣的界面可稱(chēng)為受限的導(dǎo)航界面,其中用戶(hù)必須跟隨編制并預(yù)定好的過(guò)程來(lái)實(shí)現(xiàn)管理目標(biāo)。初學(xué)者用戶(hù)可能得益于使用這樣一種GUI,因?yàn)樗诿總€(gè)菜單或頁(yè)面上提供了幫助信息,指導(dǎo)初學(xué)者用戶(hù)到想要的管理任務(wù)。但是,對(duì)許多諸如系統(tǒng)管理員這樣的高級(jí)用戶(hù)而言,使用具有僵硬導(dǎo)航限制的GUI非常麻煩。這些高級(jí)用戶(hù)已經(jīng)了解了他們想要執(zhí)行的管理任務(wù)。另外,高級(jí)用戶(hù)期望至少某種程度的任務(wù)自動(dòng)化。但是,自動(dòng)化通過(guò)GUI訪問(wèn)的管理任務(wù)非常困難。而且,如果GUI改變了,相應(yīng)的自動(dòng)化可能不再正確運(yùn)行。這樣,許多高級(jí)用戶(hù)寧愿使用更健壯的命令行界面。命令行界面允許用戶(hù)直接通過(guò)鍵入命令執(zhí)行任務(wù)。用命令行界面的一個(gè)缺點(diǎn)是用戶(hù)必須知道要鍵入的準(zhǔn)確命令,因?yàn)閹椭畔⒉辉陲@示器上提供。但是,一旦知道了命令,鍵入命令就比導(dǎo)航一系列菜單更為有效得多。另外,從命令行界面執(zhí)行的任務(wù)可以被自動(dòng)化。例如,當(dāng)用戶(hù)注意到他們連續(xù)鍵入同樣的命令時(shí)(例如,一系列命令等),他們可創(chuàng)建包括這些重復(fù)命令的腳本(例如,.bat文件)。當(dāng)執(zhí)行腳本時(shí),就執(zhí)行所有列在腳本中的命令。用戶(hù)不久還可能注意到不同的腳本包含相似項(xiàng)。注意到這點(diǎn),用戶(hù)可能希望在腳本內(nèi)創(chuàng)建參數(shù)化的子例程來(lái)進(jìn)一步使任務(wù)自動(dòng)化。但是,許多提供復(fù)雜自動(dòng)化特性的腳本解決方案(例如,參數(shù)化子例程)都以與成熟的應(yīng)用程序相同的方法開(kāi)發(fā),并且需要系統(tǒng)編程知識(shí)。這樣。這些解決方案對(duì)于普遍不具有復(fù)雜編程知識(shí)的系統(tǒng)管理員不理想。因此,目前,系統(tǒng)管理員必須或者放棄自動(dòng)化,或者使用系統(tǒng)編程技能來(lái)自動(dòng)化。兩者中沒(méi)有一個(gè)選項(xiàng)是很合人意的。如果管理員選擇放棄自動(dòng)化,就要承受支持幾個(gè)其它管理員來(lái)幫助手工運(yùn)行任務(wù)的附加成本。但是如果管理員選擇使任務(wù)自動(dòng)化,則要承受支持編程環(huán)境并獲取必需的編程技能的成本。另外,因?yàn)橐坏┌l(fā)生變化時(shí),必須重建自動(dòng)化工具,維護(hù)成本很昂貴。因此,存在對(duì)使管理員能有效且高效率自動(dòng)化管理任務(wù)的管理工具框架的需求。發(fā)明概述設(shè)置了一種管理工具框架。提供用戶(hù)輸入給管理工具框架進(jìn)行處理。管理工具框架將用戶(hù)輸入映射到小命令對(duì)象。小命令對(duì)象關(guān)聯(lián)于分析用戶(hù)輸入和輸入對(duì)象以獲得在小命令內(nèi)識(shí)別的預(yù)期輸入?yún)?shù)的語(yǔ)法。語(yǔ)法可在小命令內(nèi)直接關(guān)聯(lián),諸如使用參數(shù)說(shuō)明??晒┻x擇地,語(yǔ)法可間接與小命令關(guān)聯(lián),諸如通過(guò)XML文檔。輸入對(duì)象由一個(gè)小命令發(fā)出并可用作另一個(gè)小命令的輸入。輸入對(duì)象可以是任何可進(jìn)行精確語(yǔ)法分析的輸入,諸如.NET對(duì)象、普通串、XML文檔等等。小命令可在同一進(jìn)程中運(yùn)行??晒┻x擇地,一個(gè)小命令本地運(yùn)行同時(shí)另一個(gè)小命令在另一個(gè)進(jìn)程中或遠(yuǎn)程運(yùn)行。小命令可由管理工具框架提供,或者可由第三方開(kāi)發(fā)者提供。用戶(hù)輸入可通過(guò)主機(jī)小命令提供給框架。圖1示出一示例性計(jì)算設(shè)備,它可使用一示例性管理工具環(huán)境。圖2是一方框圖,大致示出本管理工具環(huán)境的一示例性管理工具框架的概要。圖3是一方框圖,示出圖2所示管理工具框架的主機(jī)專(zhuān)用組件內(nèi)的組件。圖4是一方框圖,示出圖2所示的管理工具框架的核心引擎組件內(nèi)的組件。圖5是一示例性數(shù)據(jù)結(jié)構(gòu),詳細(xì)說(shuō)明適于在圖2所示管理工具框架內(nèi)使用的小命令。圖6是一示例數(shù)據(jù)結(jié)構(gòu),詳細(xì)說(shuō)明從中可導(dǎo)出圖5所示小命令的命令基類(lèi)。圖7是另一示例數(shù)據(jù)結(jié)構(gòu),詳細(xì)說(shuō)明適于在圖2所示管理工具框架內(nèi)使用的小命令。圖8是一邏輯流程圖,示出用于主機(jī)處理的示例性處理過(guò)程,它在圖2所示管理工具框架內(nèi)執(zhí)行。圖9是一邏輯流程圖,示出用于處理輸入的示例性處理過(guò)程,它在圖2所示管理工具框架內(nèi)進(jìn)行。圖10是一邏輯流程圖。示出用于處理腳本的過(guò)程,適于在圖9所示用于處理輸入的進(jìn)程內(nèi)使用。圖11是一邏輯流程圖,示出適于在圖10所示腳本處理過(guò)程內(nèi)使用的腳本預(yù)處理過(guò)程。圖12是一邏輯流程圖,示出用于施加約束的過(guò)程,適于在圖10所示的腳本處理過(guò)程內(nèi)使用。圖13是一功能流程圖,示出在圖2所示的管理工具框架中對(duì)命令串的處理。圖14是一邏輯流程圖,示出用于處理命令串的過(guò)程,適于在圖9所示用于處理輸入的處理過(guò)程內(nèi)使用。圖15是一邏輯流程圖,示出用于創(chuàng)建小命令實(shí)例的示例性進(jìn)程,適于在圖14所示的對(duì)命令串的處理內(nèi)使用。圖16是一邏輯流程圖,示出用于填充小命令屬性的示例性處理過(guò)程,適于在圖14所示對(duì)命令的處理內(nèi)使用。圖17是一邏輯流程圖,示出用于執(zhí)行小命令的示例性進(jìn)程,適于在圖14所示對(duì)命令的處理內(nèi)使用。圖18是一示例擴(kuò)展類(lèi)型管理程序的功能框圖,適于在圖2所示管理工具框架內(nèi)使用。圖19圖示了管道內(nèi)輸出處理小命令的示例性序列。圖20示出由圖19所示的輸出處理小命令之一所執(zhí)行的示例性處理。圖21圖示了在圖20的處理期間訪問(wèn)的顯示信息的示例性結(jié)構(gòu)。圖22是一表,列出了示例輸出處理小命令的示例性句法。圖23示出由out/console小命令使用輸出處理小命令的各種管道序列呈現(xiàn)的結(jié)果。詳細(xì)說(shuō)明簡(jiǎn)而言之,本管理工具環(huán)境提供了減少相關(guān)于維護(hù)和支持計(jì)算機(jī)和計(jì)算機(jī)網(wǎng)絡(luò)的管理成本的計(jì)算框架。另外,框架支持程序員和非程序員兩者對(duì)管理工具的快速特別開(kāi)發(fā)。以下闡述了特定示例性管理工具環(huán)境。其它示例環(huán)境可包括這個(gè)特定實(shí)施例特征和/或其它特征,其目標(biāo)是方便于管理任務(wù)。以下詳細(xì)描述分成幾個(gè)部分。第一部分描述在其中管理工具環(huán)境可運(yùn)行的說(shuō)明性的計(jì)算環(huán)境。第二部分描述管理工具環(huán)境的示例框架。接下來(lái)的部分描述示例性框架的各個(gè)組件和這些組件的運(yùn)行。示例性計(jì)算環(huán)境圖1示出了可在一個(gè)示例性管理工具環(huán)境中使用的一個(gè)示例性計(jì)算裝置。在十分基本的配置中,計(jì)算裝置100通常包括至少一個(gè)處理單元102和系統(tǒng)存儲(chǔ)器104。根據(jù)計(jì)算裝置的確切配置和類(lèi)型,系統(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,以支持管理工具(未示出)的開(kāi)發(fā)。這一基本配置在圖1中由虛線108內(nèi)的那些組件示出。計(jì)算裝置100可具有另外的特征或功能。例如,計(jì)算裝置100也可包括另外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)和/或不可移動(dòng)),如磁盤(pán)、光盤(pán)或磁帶。這類(lèi)另外的存儲(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ù)字多功能盤(pán)(DVD)或其它光存儲(chǔ)、磁盒、磁帶、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái)儲(chǔ)存期望的信息并可由計(jì)算裝置100訪問(wèn)的任一其它介質(zhì)。任一這類(lèi)計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是裝置100的一部分。計(jì)算裝置100也可具有(多個(gè))輸入設(shè)備112,如鍵盤(pán)、鼠標(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ī)專(zhuān)用組件204、主機(jī)無(wú)關(guān)組件206以及處理程序組件208。主機(jī)無(wú)關(guān)組件206可與其它組件(即,主機(jī)組件202、主機(jī)專(zhuān)用組件204和處理程序組件208)的每一個(gè)通信。這些組件的每一個(gè)在下文簡(jiǎn)要描述,并在需要時(shí)在隨后的章節(jié)中詳細(xì)描述。主機(jī)組件主機(jī)組件202包括一個(gè)或多個(gè)主機(jī)程序(如,主機(jī)程序210-214),它們向用戶(hù)或其它程序展示了用于相關(guān)聯(lián)的應(yīng)用程序的自動(dòng)化特征。每一主機(jī)程序210-214可以其自己特有的風(fēng)格展示這些自動(dòng)化特征,例如通過(guò)命令行、圖形用戶(hù)界面(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的用戶(hù)提供管理工具能力的表面。另外,該機(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)樾∶羁墒褂霉芾砉ぞ呖蚣芴峁┑墓霉δ?,例如語(yǔ)法分析、數(shù)據(jù)確認(rèn)、出錯(cuò)報(bào)告等等。由于這些公用功能可被實(shí)現(xiàn)一次并測(cè)試一次,因此貫穿管理工具框架對(duì)小命令的使用允許與應(yīng)用程序?qū)S霉δ芟嚓P(guān)聯(lián)的遞增開(kāi)發(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管理用戶(hù)和管理工具框架內(nèi)的其它組件之間的交互。這些交互可包括對(duì)參數(shù)的提示、錯(cuò)誤報(bào)告等等。通常,每一主機(jī)程序210-213可提供其自己的專(zhuān)用主機(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)單、一致的管理用戶(hù)界面,以供用戶(hù)創(chuàng)建、保存和打開(kāi)管理計(jì)算裝置的硬件、軟件和網(wǎng)絡(luò)組件的管理工具。為實(shí)現(xiàn)這些功能,主機(jī)程序210提供了用于在管理工具框架上構(gòu)建管理GUI的一組服務(wù)。GUI交互也可被展示為用戶(hù)可見(jiàn)的腳本,它幫助將由管理工具環(huán)境提供的腳本能力教給用戶(hù)。在另一示例中,主機(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)境在提供者小命令上用與其它小命令類(lèi)相同的優(yōu)先級(jí)操作。提供者小命令是使用與其它小命令相同的機(jī)制創(chuàng)建的。提供者小命令向管理工具框架展示了應(yīng)用程序或基礎(chǔ)結(jié)構(gòu)的特定功能。由此,通過(guò)使用小命令,產(chǎn)品開(kāi)發(fā)者只需創(chuàng)建一個(gè)主機(jī)程序,它然后將允許其產(chǎn)品對(duì)許多管理工具運(yùn)作。例如,采用示例性管理工具環(huán)境,系統(tǒng)級(jí)圖形用戶(hù)界面幫助菜單可以被集成并移植到現(xiàn)有的應(yīng)用程序中。主機(jī)專(zhuān)用組件主機(jī)專(zhuān)用組件204包括計(jì)算裝置(例如,圖1描述的計(jì)算裝置100)用于將管理工具框架與該框架所運(yùn)行的平臺(tái)細(xì)節(jié)相隔離的服務(wù)的集合。由此,對(duì)每一類(lèi)型的平臺(tái)有一組主機(jī)專(zhuān)用組件。主機(jī)專(zhuān)用組件允許用戶(hù)在不同的操作系統(tǒng)上使用同一管理工具。簡(jiǎn)要地轉(zhuǎn)向圖3,主機(jī)專(zhuān)用組件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ī)專(zhuān)用組件204也可包括日志記錄/審計(jì)組件310,核心引擎224使用該組件來(lái)與提供日志記錄和審計(jì)能力的主機(jī)專(zhuān)用(即,平臺(tái)專(zhuān)用)服務(wù)通信。在一個(gè)示例性管理工具框架中,智能感知/元數(shù)據(jù)訪問(wèn)組件302提供了命令、參數(shù)和參數(shù)值的自動(dòng)完成。幫助小命令組件304提供了基于主機(jī)用戶(hù)界面的定制幫助系統(tǒng)。處理器組件回頭參考圖2,處理器組件208包括傳統(tǒng)實(shí)用程序230、管理小命令232、非管理小命令234、遠(yuǎn)程小命令236以及web服務(wù)接口238。管理小命令232(也稱(chēng)為平臺(tái)小命令)包括查詢(xún)或操縱與計(jì)算裝置相關(guān)聯(lián)的配置信息的小命令。由于管理小命令232操作系統(tǒng)類(lèi)型信息,因此它們依賴(lài)于特定的平臺(tái)。然而,每一平臺(tái)通常具有提供與其它平臺(tái)上的管理小命令232類(lèi)似的行動(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ēng)為基礎(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ì)象)類(lèi)型無(wú)關(guān)地在反射的對(duì)象上進(jìn)行處理。由此,這些實(shí)用程序允許開(kāi)發(fā)者一次書(shū)寫(xiě)非管理小命令,然后跨計(jì)算系統(tǒng)上支持的所有對(duì)象類(lèi)應(yīng)用這些非管理小命令。在過(guò)去,開(kāi)發(fā)者必須首先充分理解要處理的數(shù)據(jù)的格式,然后書(shū)寫(xiě)應(yīng)用程序來(lái)僅處理該數(shù)據(jù)。結(jié)果,傳統(tǒng)應(yīng)用程序只能處理非常有限范圍的數(shù)據(jù)。用于與其對(duì)象類(lèi)型無(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ì)象類(lèi)型。由于傳統(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ī)制支持依賴(lài)于跨越多個(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)程客戶(hù)機(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)單地向用戶(hù)展現(xiàn)同一能力的不同的語(yǔ)言或句法的能力。例如,由于語(yǔ)法分析器220負(fù)責(zé)解釋輸入請(qǐng)求,因此語(yǔ)法分析器220內(nèi)影響期望輸入句法的代碼改變本質(zhì)上將影響管理工具框架的每一用戶(hù)。因此,系統(tǒng)管理員可在不同的計(jì)算裝置上提供支持不同句法的不同的語(yǔ)法分析器。然而,用同一語(yǔ)法分析器操作的每一用戶(hù)對(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ò)展類(lèi)型管理器412。示例性元數(shù)據(jù)處理器元數(shù)據(jù)處理器406被配置成訪問(wèn)元數(shù)據(jù)并將其儲(chǔ)存在諸如圖3所示的數(shù)據(jù)庫(kù)存儲(chǔ)314等元數(shù)據(jù)存儲(chǔ)中。元數(shù)據(jù)可以通過(guò)命令行、在小命令類(lèi)定義內(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ó)專(zhuān)利申請(qǐng)?zhí)朹____/美國(guó)專(zhuān)利號(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ò)展類(lèi)型管理器如上所述,管理工具框架提供了允許對(duì)象上的反射并允許獨(dú)立于其(對(duì)象)類(lèi)型在反射的對(duì)象上處理的一組實(shí)用程序。管理工具框架200與計(jì)算系統(tǒng)上的組件框架(圖1所示的組件框架120)交互,以執(zhí)行這一反射。本領(lǐng)域的技術(shù)人員可以理解,反射提供了查詢(xún)對(duì)象并獲取該對(duì)象的類(lèi)型,然后在各種對(duì)象以及與該類(lèi)型對(duì)象相關(guān)聯(lián)的屬性反射以獲取其它對(duì)象和/或需要的值的能力。即使反射向管理工具框架200提供了對(duì)象上的大量信息,因此發(fā)明人理解,反射集中在該類(lèi)型的對(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)生類(lèi)似的問(wèn)題。由此,發(fā)明人構(gòu)想了一種集中在類(lèi)型的使用上的擴(kuò)展類(lèi)型管理器412。對(duì)于這一擴(kuò)展類(lèi)型管理器,對(duì)象的類(lèi)型不是重要的。相反,擴(kuò)展類(lèi)型管理器對(duì)于該對(duì)象是否能用于獲取需要的信息是感興趣的。繼續(xù)上述數(shù)據(jù)表示例,發(fā)明人理解,知道數(shù)據(jù)表具有列屬性和行屬性并不是特別感興趣的,但是理解,一列包含感興趣的信息。集中在使用上,可將每一行與“對(duì)象”相關(guān)聯(lián),并將每一列與該“對(duì)象”的“屬性”相關(guān)聯(lián)。由此,擴(kuò)展類(lèi)型管理器412提供了一種從任一類(lèi)型的可精確語(yǔ)法分析輸入中創(chuàng)建“對(duì)象”的機(jī)制。如此,擴(kuò)展類(lèi)型管理器412補(bǔ)充了基于組件的框架120提供的反射能力,并將“反射”擴(kuò)展到任一類(lèi)型的可精確語(yǔ)法分析輸入??傮w上,擴(kuò)展類(lèi)型管理器被配置成訪問(wèn)可精確語(yǔ)法分析輸入(未示出),并將可精確語(yǔ)法分析輸入與請(qǐng)求的數(shù)據(jù)類(lèi)型相關(guān)。擴(kuò)展類(lèi)型管理器412然后向作出請(qǐng)求的組件,例如管道處理器402或語(yǔ)法分析器220提供所請(qǐng)求的信息。在以下討論中,可精確語(yǔ)法分析輸入被定義為其中可辨別屬性和值的輸入。某些示例性可精確語(yǔ)法分析輸入包括Windows管理規(guī)程(WMI)輸入、ActiveX數(shù)據(jù)對(duì)象(AD0)輸入、可擴(kuò)充標(biāo)記語(yǔ)言(XML)輸入以及諸如.NET對(duì)象等對(duì)象輸入。其它可精確語(yǔ)法分析輸入可包括第三方數(shù)據(jù)格式。簡(jiǎn)要地轉(zhuǎn)向圖18,示出了在管理工具框架內(nèi)使用的示例性擴(kuò)展類(lèi)型管理器的功能框圖。為解釋的目的,由擴(kuò)展類(lèi)型管理器提供的功能(由圓圈內(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)中,類(lèi)屬代碼1820(不依賴(lài)于任何數(shù)據(jù)類(lèi)型)查詢(xún)?cè)谡?qǐng)求的對(duì)象上執(zhí)行反射1810的系統(tǒng)1808,并向類(lèi)屬代碼1820返回關(guān)于該對(duì)象(如,對(duì)象A)的信息(例如,屬性P1和P2、方法M1和M2)。盡管未在對(duì)象A中示出,返回的信息可包括諸如銷(xiāo)售商、文件、日期等的附加信息。由此,通過(guò)反射,類(lèi)屬代碼1820至少包含緊綁定系統(tǒng)提供的相同信息。反射系統(tǒng)也允許調(diào)用者1802查詢(xún)系統(tǒng),并在沒(méi)有關(guān)于參數(shù)的任何先驗(yàn)知識(shí)的情況下獲取附加信息。在緊綁定系統(tǒng)和反射系統(tǒng)中,新數(shù)據(jù)類(lèi)型不能被容易地結(jié)合到操作環(huán)境中。例如,在緊綁定系統(tǒng)中,一旦操作環(huán)境被交付,則操作環(huán)境無(wú)法結(jié)合新數(shù)據(jù)類(lèi)型,因?yàn)樗仨毐恢貥?gòu)以支持它們。同樣,在反射系統(tǒng)中,每一對(duì)象類(lèi)的元數(shù)據(jù)是固定的。由此,結(jié)合新數(shù)據(jù)類(lèi)型通常未完成。然而,采用本發(fā)明的擴(kuò)展類(lèi)型管理器,可以將新數(shù)據(jù)類(lèi)型結(jié)合到操作系統(tǒng)中。采用擴(kuò)展類(lèi)型管理器1822,類(lèi)屬代碼1820可在請(qǐng)求的對(duì)象上反射,以獲取由各種外部源提供的擴(kuò)展數(shù)據(jù)類(lèi)型(如,對(duì)象A’),諸如第三方對(duì)象(如,對(duì)象A’和B)、語(yǔ)義web1832、本體論服務(wù)1834等等。如圖所示,第三方對(duì)象可擴(kuò)展現(xiàn)有對(duì)象(如,對(duì)象A’)或可創(chuàng)建全新的對(duì)象(如,對(duì)象B)。這些外部源的每一個(gè)可在類(lèi)型元數(shù)據(jù)1840內(nèi)注冊(cè)其唯一的構(gòu)造,并可提供代碼1842。當(dāng)對(duì)象被查詢(xún)時(shí),擴(kuò)展類(lèi)型管理器審閱類(lèi)型元數(shù)據(jù)1840,以判斷對(duì)象是否已被注冊(cè)。如果對(duì)象未在類(lèi)型元數(shù)據(jù)1840內(nèi)注冊(cè),則執(zhí)行反射。否則,執(zhí)行擴(kuò)展反射。代碼1842返回與反射的類(lèi)型相關(guān)聯(lián)的附加屬性和方法。例如,如果輸入類(lèi)型是XML,則代碼1842可包括描述使用XML來(lái)從XML文檔創(chuàng)建對(duì)象的方式的描述文件。由此,類(lèi)型元數(shù)據(jù)1840描述了擴(kuò)展類(lèi)型管理器412應(yīng)當(dāng)如何查詢(xún)各種類(lèi)型的可精確語(yǔ)法分析輸入(例如,第三方對(duì)象A’和B、語(yǔ)義web1832)來(lái)獲取用于對(duì)該特定輸入類(lèi)型創(chuàng)建對(duì)象的期望屬性,并且代碼1842提供了獲取這些期望屬性的指令。結(jié)果,擴(kuò)展類(lèi)型管理器412提供了一間接層,它允許在所有類(lèi)型的對(duì)象上“反射”除提供擴(kuò)展類(lèi)型之外,擴(kuò)展類(lèi)型管理器412提供了附加的查詢(xún)機(jī)制,如屬性路徑機(jī)制、關(guān)鍵字機(jī)制、比較機(jī)制、開(kāi)關(guān)機(jī)制、通配符處理(globber)機(jī)制、屬性設(shè)置機(jī)制、關(guān)系機(jī)制等等。這些查詢(xún)機(jī)制的每一個(gè)在下文“示例性擴(kuò)展類(lèi)型管理器處理”一節(jié)中詳細(xì)描述,它們?cè)谳斎朊畲畷r(shí)向系統(tǒng)管理員提供了靈活性。可使用各種技術(shù)來(lái)實(shí)現(xiàn)擴(kuò)展類(lèi)型管理器的語(yǔ)義。下文描述了三種技術(shù)。然而,本領(lǐng)域的技術(shù)人員可以理解,可使用這些技術(shù)的變體而不脫離要求保護(hù)的本發(fā)明的范圍。在一種技術(shù)中,可提供具有靜態(tài)方法(如,getproperty())的一系列類(lèi)。對(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ù)中,適配器類(lèi)對(duì)對(duì)象進(jìn)行細(xì)分類(lèi)。傳統(tǒng)上,細(xì)分類(lèi)在編譯之前發(fā)生。然而,對(duì)于某些操作環(huán)境,細(xì)分類(lèi)可動(dòng)態(tài)地發(fā)生。對(duì)于這些類(lèi)型的環(huán)境,以下是示出這一技術(shù)的偽代碼ClassAdaptor:A{getProperties(){returndata;}}由此,如圖18所示,擴(kuò)展類(lèi)型管理器允許開(kāi)發(fā)者創(chuàng)建新的數(shù)據(jù)類(lèi)型、注冊(cè)該數(shù)據(jù)類(lèi)型、并允許其它應(yīng)用程序和小命令使用該新的數(shù)據(jù)類(lèi)型。相反,在現(xiàn)有的管理環(huán)境中,在編譯時(shí)每一數(shù)據(jù)類(lèi)型必須是已知的,使得與從該數(shù)據(jù)類(lèi)型例示的對(duì)象相關(guān)聯(lián)的屬性或方法可被直接訪問(wèn)。因此,添加管理環(huán)境所支持的新數(shù)據(jù)類(lèi)型在過(guò)去很少完成。返回到圖2,總體上,管理工具框架200不依賴(lài)于用于協(xié)調(diào)用戶(hù)的命令輸入的執(zhí)行的外殼,但是相反,將功能分割成處理部分(例如,主機(jī)無(wú)關(guān)組件206)和用戶(hù)交互部分(例如,通過(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)建。然而,每一類(lèi)型的小命令以相同的方式創(chuàng)建并以相同的方式操作。小命令可以用任何語(yǔ)言來(lái)書(shū)寫(xiě),如C#。另外,小命令可以使用腳本語(yǔ)言或類(lèi)似語(yǔ)言來(lái)書(shū)寫(xiě)。當(dāng)管理工具環(huán)境用.NET框架來(lái)運(yùn)作時(shí),小命令可以是.NET對(duì)象。提供者小命令500(后文稱(chēng)為小命令500)是具有小命令類(lèi)名(例如,StopProcess(停止進(jìn)程)504)的公用類(lèi)。小命令500從小命令類(lèi)506導(dǎo)出。小命令類(lèi)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)自以下類(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í)行的操作。某些偽指令也可在類(lèi)級(jí)應(yīng)用,如用戶(hù)交互類(lèi)型偽指令。偽指令儲(chǔ)存在與小命令相關(guān)聯(lián)的元數(shù)據(jù)中。這些屬性的應(yīng)用在下文結(jié)合圖12描述。這些屬性也可反映小命令內(nèi)聲明的參數(shù)的填充。用于填充這些參數(shù)的一個(gè)示例性過(guò)程在下文結(jié)合圖16描述。核心引擎可應(yīng)用這些偽指令以確保依從性。偽指令500包括第一方法530(后文可互換地被稱(chēng)為StartProcessing(開(kāi)始處理)方法530)以及第二方法540(后文可互換地被稱(chēng)為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)管理員能夠開(kāi)發(fā)復(fù)雜的管理任務(wù),而無(wú)需學(xué)習(xí)復(fù)雜的編程語(yǔ)言。圖6是用于指定從其導(dǎo)出圖5所示的小命令的小命令基類(lèi)602的示例性數(shù)據(jù)結(jié)構(gòu)600。當(dāng)小命令包括掛鉤(hook)語(yǔ)句并且對(duì)應(yīng)的開(kāi)關(guān)是命令行上或腳本中的輸入(統(tǒng)稱(chēng)為命令輸入)的任何時(shí)候,小命令基類(lèi)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。總體上,該數(shù)據(jù)結(jié)構(gòu)700提供了用于清楚地表達(dá)管理工具框架和小命令之間的合約的方法。類(lèi)似于數(shù)據(jù)結(jié)構(gòu)500,該數(shù)據(jù)結(jié)構(gòu)700是從小命令類(lèi)704導(dǎo)出的公用類(lèi)。軟件開(kāi)發(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)詞或名詞可以在小命令名中是隱含的。同樣,類(lèi)似于數(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不覆蓋由小命令基類(lèi)提供的第一方法(如,StartProcessing)或第二方法(如,ProcessRecord)。該數(shù)據(jù)結(jié)構(gòu)700也可包括不被識(shí)別為輸入?yún)?shù)的私有成員740。私有成員740可用于儲(chǔ)存基于偽指令之一生成的數(shù)據(jù)。由此,如數(shù)據(jù)結(jié)構(gòu)700中所示的,通過(guò)使用在特定小命令類(lèi)中聲明公有屬性和偽指令,小命令開(kāi)發(fā)者可容易地為其小命令的期望輸入?yún)?shù)指定語(yǔ)法,并指定應(yīng)當(dāng)在期望輸入?yún)?shù)上執(zhí)行的處理,而無(wú)需小命令開(kāi)發(fā)者生成任一底層邏輯。數(shù)據(jù)結(jié)構(gòu)700示出了小命令和語(yǔ)法機(jī)制之間的直接關(guān)聯(lián)。如上所述,這一關(guān)聯(lián)也可以是間接的,如通過(guò)指定諸如XML文檔等外部源內(nèi)的期望參數(shù)定義。現(xiàn)在描述管理工具環(huán)境內(nèi)的示例性過(guò)程流。示例件主機(jī)處理流圖8所示是用于在圖2所示的管理工具框架內(nèi)執(zhí)行的主機(jī)處理的示例性過(guò)程的邏輯流程圖。該過(guò)程800在框801開(kāi)始,其中,接收到啟動(dòng)特定應(yīng)用程序的管理工具框架的請(qǐng)求。該請(qǐng)求可以通過(guò)諸如選擇應(yīng)用程序圖標(biāo)等鍵盤(pán)輸入本地發(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ì)用戶(hù)可用。通常,主機(jī)程序?qū)⒘钏械姆枪芾硇∶?34可用,并且令其自己的主機(jī)小命令218可用。另外,主機(jī)程序?qū)⒘罟芾硇∶?34的一個(gè)子集可用,如處理進(jìn)程、盤(pán)等的小命令。由此,一旦主機(jī)程序令小命令的子集可用,管理工具框架被有效地嵌入在對(duì)應(yīng)的應(yīng)用程序中。處理繼續(xù)到框804。在框804,通過(guò)特定的應(yīng)用程序獲取輸入。如上所述,輸入可采用若干形式,如命令行、腳本、語(yǔ)音、GUI等等。例如,當(dāng)輸入是通過(guò)命令行獲取時(shí),輸入從鍵盤(pán)上鍵入的按鍵來(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ī)小命令可將其特定類(lèi)型的輸入(如,語(yǔ)音)轉(zhuǎn)換成可由管理工具框架識(shí)別的一種類(lèi)型的輸入(如,文本串、腳本)。例如,語(yǔ)音輸入可以被轉(zhuǎn)換成腳本或命令行串,取決于語(yǔ)音輸入的內(nèi)容。由于每一主機(jī)程序負(fù)責(zé)將其類(lèi)型的輸入轉(zhuǎn)換成可由管理工具框架識(shí)別的輸入,因此管理工具框架可接受來(lái)自任意數(shù)量的各種主機(jī)組件的輸入。另外,管理工具框架提供了一組豐富的實(shí)用程序,當(dāng)輸入通過(guò)其小命令之一轉(zhuǎn)發(fā)時(shí),它們執(zhí)行數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換。其它組件在輸入上執(zhí)行的處理在下文結(jié)合若干其它附圖來(lái)描述。主機(jī)處理在判別框808繼續(xù)。在判別框808,判斷是否接收到對(duì)另外的輸入的請(qǐng)求。如果負(fù)責(zé)處理輸入的其它組件之一需要來(lái)自用戶(hù)的另外的輸入以完成其處理,則會(huì)發(fā)生這一情況。例如,可能需要口令來(lái)訪問(wèn)某些數(shù)據(jù)、可能需要特定行動(dòng)的確認(rèn)等等。對(duì)于某些類(lèi)型的主機(jī)程序(如,語(yǔ)音郵件),這樣的請(qǐng)求可能不是適當(dāng)?shù)?。由此,與向用戶(hù)查詢(xún)另外的輸入相反,主機(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ī)小命令書(shū)寫(xiě)的代碼是非常少的。由此,可顯示一組豐富的輸出,而無(wú)需開(kāi)發(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開(kāi)始,其中通過(guò)主機(jī)程序鍵入輸入,并將其轉(zhuǎn)發(fā)到管理工具框架內(nèi)的其它組件。處理在框902繼續(xù)。在框902,從主機(jī)程序接收輸入。在一個(gè)示例性管理工具框架中,輸入由語(yǔ)法分析器接收,它對(duì)輸入進(jìn)行譯碼,并定向輸入以供進(jìn)一步處理。處理在判別框904繼續(xù)。在判別框904,確定輸入是否為腳本。輸入可采用腳本或表示命令行的串(后文稱(chēng)為“命令串”)的形式。命令串可表示管道化在一起的一個(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開(kāi)始,將輸入識(shí)別為腳本。腳本引擎和語(yǔ)法分析器彼此通信,以執(zhí)行以下功能。處理在框1002繼續(xù)。在框1002,在腳本上執(zhí)行預(yù)處理。簡(jiǎn)要地轉(zhuǎn)向圖11,示出了一個(gè)邏輯流程圖,它示出了適于在腳本處理過(guò)程1000中使用的腳本預(yù)處理過(guò)程1100。腳本預(yù)處理在框1101開(kāi)始,并繼續(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ī)程序通知用戶(hù)腳本先前已失敗。這一通知允許用戶(hù)決定是繼續(xù)該腳本還是退出該腳本。如上文結(jié)合圖8所提到的,主機(jī)程序可以用各種方式處理該請(qǐng)求,取決于輸入的風(fēng)格(如,語(yǔ)音、命令行)。一旦從用戶(hù)接收到另外的輸入,腳本或者返回到圖10的框1004供處理,或者中止該腳本。返回到圖10的框1004,檢索來(lái)自腳本的一行。處理在判別框1006繼續(xù)。在判別框1006,判斷該行是否包含任何約束。約束可用預(yù)定義的開(kāi)始字符(例如,括號(hào)“[”]]]]]]和對(duì)應(yīng)的結(jié)束字符(例如,關(guān)閉括號(hào)“))))))”)來(lái)檢測(cè)。如果該行包括約束,則處理在框1008繼續(xù)。在框1008,應(yīng)用該行中包括的約束。一般而言,約束提供了管理工具框架內(nèi)的一種機(jī)制,以指定用于腳本中輸入的參數(shù)的類(lèi)型以及指定應(yīng)當(dāng)在該參數(shù)上執(zhí)行的確認(rèn)邏輯。該約束不僅應(yīng)用于參數(shù),也適用于腳本中輸入的任一類(lèi)型的構(gòu)造,例如變量。由此,約束提供了解釋環(huán)境內(nèi)的一種機(jī)制,以指定數(shù)據(jù)類(lèi)型以及確認(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)、開(kāi)關(guān)等控制構(gòu)造的執(zhí)行。內(nèi)建能力也可包括賦值類(lè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í)別小命令類(lèi),以及將對(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開(kāi)始,檢測(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)造在行指示符(如,回車(chē)鍵)的末端之前出現(xiàn)。處理在框1202繼續(xù)。在框1202,從解釋環(huán)境中獲取約束。在一個(gè)示例性管理工具環(huán)境中,語(yǔ)法分析器對(duì)輸入進(jìn)行譯碼,并確定約束的出現(xiàn)。約束可以來(lái)自以下類(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ù)類(lèi)型、謂詞偽指令1210、文檔編制偽指令1212、語(yǔ)法分析偽指令1214、數(shù)據(jù)生成偽指令1216、數(shù)據(jù)確認(rèn)偽指令1218以及對(duì)象處理和編碼偽指令1220。指定數(shù)據(jù)類(lèi)型的約束可指定管理工具框架所運(yùn)行的系統(tǒng)支持的任何數(shù)據(jù)類(lèi)型。謂詞偽指令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)自偽指令類(lèi)型1212-1220的示例性偽指令在表1-5中示出。腳本的處理然后完成。由此,應(yīng)用解釋環(huán)境內(nèi)的類(lèi)型和約束的本過(guò)程允許系統(tǒng)管理員容易地指定類(lèi)型、指定確認(rèn)要求等,而無(wú)需書(shū)寫(xiě)用于執(zhí)行這一處理的底層邏輯。以下是在如下指定的命令串上執(zhí)行的約束處理的一個(gè)示例[Integer][ValidationRange(3,5)]$a=4有兩種通過(guò)由“[]”表示的屬性標(biāo)記指定的約束。第一個(gè)屬性標(biāo)記指示了該變量是整數(shù)類(lèi)型,而第二個(gè)屬性標(biāo)記指示變量$a的值必須包括在3到5之間。示例命令串確保了如果變量$a在隨后的命令串或行中被賦值,則將對(duì)照兩個(gè)約束來(lái)校驗(yàn)變量$a。由此,以下命令串的每一個(gè)都將導(dǎo)致錯(cuò)誤$a=231$a=″apple″$a=$(get/1ocation)約束在管理工具框架的不同階段被應(yīng)用。例如,適用性偽指令、文檔編制偽指令以及語(yǔ)法分析準(zhǔn)則偽指令在語(yǔ)法分析器內(nèi)非常早期的階段處理。數(shù)據(jù)生成偽指令和確認(rèn)偽指令一旦在語(yǔ)法分析器完成了對(duì)所有輸入?yún)?shù)的語(yǔ)法分析之后在引擎內(nèi)處理。以下表格示出了各種類(lèi)別的代表性偽指令,以及由管理工具環(huán)境響應(yīng)于偽指令執(zhí)行的處理的解釋。表1適用性偽指令表2語(yǔ)法分析管道偽指令表3文檔編制偽指令表4數(shù)據(jù)確認(rèn)偽指令表5處理和編碼偽指令當(dāng)示例性管理工具在.NETTM框架內(nèi)運(yùn)作時(shí),每一類(lèi)別具有從基礎(chǔ)類(lèi)別類(lèi)(如,CmdAttribute)導(dǎo)出的積累。該基礎(chǔ)類(lèi)別類(lèi)從System.Attribute類(lèi)導(dǎo)出。每一類(lèi)別具有預(yù)定義的函數(shù)(如,attrib.func()),它由語(yǔ)法分析器在類(lèi)別處理期間調(diào)用。腳本作者可創(chuàng)建從自定義類(lèi)別類(lèi)(如,CmdCustomAttribute)導(dǎo)出的自定義類(lèi)別。腳本作者也可通過(guò)從類(lèi)別的基礎(chǔ)類(lèi)別類(lèi)導(dǎo)出偽指令類(lèi),然后用其實(shí)現(xiàn)覆蓋預(yù)定義的函數(shù),來(lái)擴(kuò)展現(xiàn)有的類(lèi)別。腳本作者也可覆蓋偽指令,并向預(yù)定義的偽指令集添加新的偽指令。這些偽指令的其它處理可以?xún)?chǔ)存在可由語(yǔ)法分析器訪問(wèn)的外部數(shù)據(jù)存儲(chǔ)中。管理工具框架查找注冊(cè)的類(lèi)別,并對(duì)該類(lèi)別中的每一偽指令調(diào)用函數(shù)(如,ProcessCustomDirective)。由此,類(lèi)別處理的順序通過(guò)將類(lèi)別執(zhí)行信息儲(chǔ)存在持久存儲(chǔ)中可以是動(dòng)態(tài)的。在不同的處理階段,語(yǔ)法分析器在持久存儲(chǔ)中進(jìn)行核查,以判斷是否有任何元數(shù)據(jù)類(lèi)別需要在那時(shí)執(zhí)行。這允許類(lèi)別通過(guò)從持久存儲(chǔ)中移除該類(lèi)別條目來(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)??梢宰⒁獾剑琾rocess命令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è)程序員書(shū)寫(xiě),因此命令行上輸入?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ā)明的管理工具框架提供了更一致的方法,并最小化了每一開(kāi)發(fā)者必須書(shū)寫(xiě)的重復(fù)代碼量。管理工具框架200提供了句法(如,語(yǔ)法)、對(duì)應(yīng)的語(yǔ)義(如,字典)、以及參考模型,以使開(kāi)發(fā)者能夠容易地利用管理工具框架200提供的公用功能。在進(jìn)一步描述本發(fā)明之前,提供對(duì)貫穿本說(shuō)明書(shū)出現(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)?!斑x項(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能夠向用戶(hù)發(fā)出一致的出錯(cuò)消息。如可以認(rèn)識(shí)到的,依照本發(fā)明的管理工具框架書(shū)寫(xiě)的可執(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開(kāi)始,其中語(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)的屬性。如上所述,開(kāi)發(fā)者聲明小命令類(lèi)內(nèi)或外部源內(nèi)的屬性。簡(jiǎn)言之,管理工具框架基于對(duì)屬性聲明的名字和類(lèi)型將傳入的對(duì)象譯碼成從小命令類(lèi)例示的小命令。如果類(lèi)型不同,則可通過(guò)擴(kuò)展數(shù)據(jù)類(lèi)型管理器來(lái)強(qiáng)制類(lèi)型。如先前所提到的,在管道化的命令串中,每一小命令的輸出可以是對(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ǔ)小命令類(lèi)提供的默認(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)上,開(kāi)發(fā)了小命令數(shù)據(jù)結(jié)構(gòu),并指定了屬性和期望的輸入?yún)?shù)。小命令被編譯并已被注冊(cè)。在注冊(cè)期間,類(lèi)名(即,小命令名)被寫(xiě)入注冊(cè)存儲(chǔ)中,并且儲(chǔ)存了與小命令相關(guān)聯(lián)的元數(shù)據(jù)。過(guò)程1500在框1501開(kāi)始,語(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ù)可以?xún)?chǔ)存在串行化格式的XML文件、外部數(shù)據(jù)庫(kù)等中。類(lèi)似于腳本處理過(guò)程中偽指令的處理,每一類(lèi)別的偽指令在不同的階段處理。每一元數(shù)據(jù)偽指令處理其自己的錯(cuò)誤處理。處理在框1506繼續(xù)。在框1506,基于識(shí)別的小命令類(lèi)例示小命令對(duì)象。處理在框1508繼續(xù)。在框1508,獲取關(guān)于小命令的信息。這可以通過(guò)反射或其它手段發(fā)生。信息是關(guān)于期望的輸入?yún)?shù)。如上所述,被聲明為公用的參數(shù)(例如,公用串Name730)對(duì)應(yīng)可以是在命令行上的命令串中指定或在輸入流中提供的期望輸入?yún)?shù)。管理工具框架通過(guò)圖18描述的擴(kuò)展類(lèi)型管理器提供用于向調(diào)用者返回信息(在需要的基礎(chǔ)上)的公用接口。處理在框1510繼續(xù)。在框1510,應(yīng)用適用性偽指令(例如,表1)。適用性偽指令確保了該類(lèi)在某些機(jī)器角色和/或用戶(hù)角色中使用。例如,某些小命令可能只能由域管理員使用。如果未滿(mǎn)足適用性偽指令之一中指定的約束,則出現(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ù)。這可在一旦用戶(hù)例如通過(guò)敲擊回車(chē)鍵指示了命令串的結(jié)束之后發(fā)生。在腳本中,新行指示命令串的結(jié)束。這一等待可包括從用戶(hù)獲取關(guān)于參數(shù)的額外信息并應(yīng)用其它偽指令。當(dāng)小命令是管道化參數(shù)之一時(shí),處理可立即開(kāi)始。一旦提供了必要的命令串和輸入?yún)?shù),處理完成。用于填充小命令的示例件過(guò)程用于填充小命令的示例性過(guò)程在圖16中示出,并現(xiàn)在結(jié)合圖5來(lái)描述。在一個(gè)示例性管理工具框架中,核心引擎執(zhí)行處理來(lái)填充小命令的參數(shù)。處理在創(chuàng)建了小命令的實(shí)例之后在框1601開(kāi)始。處理在框1602繼續(xù)。在框1602,檢索小命令中聲明的參數(shù)(例如,ProcessName(進(jìn)程名))?;趯?duì)小命令的聲明,核心引擎識(shí)別出傳入的輸入對(duì)象將提供名為“ProcessName”的屬性。如果傳入的屬性的類(lèi)型不同于參數(shù)聲明中指定的類(lèi)型,則該類(lèi)型將通過(guò)擴(kuò)展類(lèi)型管理器來(lái)強(qiáng)制。強(qiáng)制數(shù)據(jù)類(lèi)型的過(guò)程在下文名為“示例性擴(kuò)展類(lèi)型管理器處理”一節(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,查詢(xún)擴(kuò)展類(lèi)型對(duì)象以查找傳入對(duì)象內(nèi)的參數(shù)的值。如結(jié)合擴(kuò)展類(lèi)型管理器所解釋的,擴(kuò)展類(lèi)型管理器采用參數(shù)名并使用反射來(lái)識(shí)別傳入對(duì)象內(nèi)具有參數(shù)名的參數(shù)。如有必要,擴(kuò)展類(lèi)型管理器也可對(duì)參數(shù)執(zhí)行其它處理。例如,擴(kuò)展類(lèi)型管理器可通過(guò)上述的轉(zhuǎn)換機(jī)制將數(shù)據(jù)類(lèi)型強(qiáng)制成期望的數(shù)據(jù)類(lèi)型。處理繼續(xù)到框1610。返回到框1609,如果屬性指定了輸入源是命令行,則獲取來(lái)自命令行的數(shù)據(jù)。獲取來(lái)自命令行的數(shù)據(jù)可以通過(guò)擴(kuò)展類(lèi)型管理器來(lái)執(zhí)行。處理然后繼續(xù)到判別框1610。在判別框1610,判斷是否存在另一期望參數(shù)。如果存在另一期望參數(shù),則處理循環(huán)回到框1602,并如上所述地繼續(xù)。否則,處理完成并返回。由此,如圖所示,小命令擔(dān)當(dāng)用于切碎傳入數(shù)據(jù)以獲取期望參數(shù)的模版。另外,期望參數(shù)是在不知道提供期望參數(shù)的值的傳入對(duì)象的類(lèi)型的情況下獲取的。這比傳統(tǒng)的管理環(huán)境要困難得多。傳統(tǒng)的管理環(huán)境是緊綁定的,并需要該對(duì)象的類(lèi)型在編譯時(shí)是已知的。另外,在傳統(tǒng)環(huán)境中,期望參數(shù)將按傳值或按傳址被傳遞到函數(shù)。由此,本發(fā)明的語(yǔ)法分析(例如,“切碎”)機(jī)制允許程序員指定參數(shù)的類(lèi)型,而無(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ī)則,使得用戶(hù)可使用一個(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ù)類(lèi)型以判斷是否正確。如果輸入?yún)?shù)類(lèi)型不正確,則可強(qiáng)制輸入?yún)?shù)成為正確。如果輸入?yún)?shù)類(lèi)型不正確并且不能被強(qiáng)制,則打印使用出錯(cuò)。使用出錯(cuò)允許用戶(hù)變得知曉期望的正確句法。使用出錯(cuò)可從文檔編制偽指令獲取描述句法的信息。一旦映射或驗(yàn)證了輸入?yún)?shù)類(lèi)型,則填充小命令對(duì)象實(shí)例中對(duì)應(yīng)的成員。當(dāng)填充成員時(shí),擴(kuò)展類(lèi)型管理器提供了對(duì)輸入?yún)?shù)類(lèi)型的處理。簡(jiǎn)言之,處理可包括屬性路徑機(jī)制、關(guān)鍵字機(jī)制、比較機(jī)制、轉(zhuǎn)換機(jī)制、通配符處理機(jī)制、關(guān)系機(jī)制以及屬性集機(jī)制。這些機(jī)制的每一個(gè)在下文名為“擴(kuò)展類(lèi)型管理器處理”一節(jié)中詳細(xì)描述,它也包括了說(shuō)明性示例。用于執(zhí)行小命令的示例性過(guò)程用于執(zhí)行小命令的示例性過(guò)程在圖7中示出,并現(xiàn)在描述。在一個(gè)示例性管理工具環(huán)境中,核心引擎執(zhí)行小命令。如上所述,對(duì)每一輸入對(duì)象執(zhí)行第二方法1440內(nèi)的代碼1442。處理在框1701開(kāi)始,其中已填充了小命令。處理在框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í)行的附加處理。如上所述,在命令基類(lèi)600內(nèi),可以聲明對(duì)應(yīng)于附加的期望輸入?yún)?shù)的參數(shù)(如,開(kāi)關(guān))。開(kāi)關(guān)包括預(yù)定義的串,并且當(dāng)被識(shí)別時(shí),指示核心引擎向小命令提供附加功能。如果在命令輸入中指定了參數(shù)verbose610,則執(zhí)行verbose語(yǔ)句614。以下是包括verbose開(kāi)關(guān)的命令行的一個(gè)示例$get/process|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開(kāi)關(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開(kāi)關(guān)的命令行的一個(gè)示例$get/process|where″han*-get500″|stop/process-confirm一般而言,當(dāng)指定了“-confirm”時(shí),核心引擎請(qǐng)求關(guān)于是否繼續(xù)命令的額外用戶(hù)輸入。以下是當(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)自工具開(kāi)發(fā)者的復(fù)雜代碼。該安全性核查可對(duì)在其小命令內(nèi)定義掛鉤的任一小命令執(zhí)行?;蛘撸瑨煦^可以是可任選的輸入?yún)?shù),它可在命令輸入中指定,類(lèi)似于上述的verbose參數(shù)。實(shí)現(xiàn)安全性核查以支持基于角色的認(rèn)證,它一般被定義為基于用戶(hù)的角色控制哪些用戶(hù)具有對(duì)資源的訪問(wèn)的系統(tǒng)。由此,向每一角色分配對(duì)不同資源的某些訪問(wèn)權(quán)限。然后將用戶(hù)分配給一個(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í)行安全性核查,而不需要工具開(kāi)發(fā)者實(shí)現(xiàn)安全性核查。安全性核查的操作可以在當(dāng)小命令內(nèi)請(qǐng)求附加功能的任一時(shí)刻通過(guò)使用諸如confirmprocessingAPI等掛鉤來(lái)執(zhí)行?;蛘撸踩院瞬榭梢酝ㄟ^(guò)核查在命令行上是否輸入了類(lèi)似于verbose、whatif和confirm等安全開(kāi)關(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)提供掛鉤,開(kāi)發(fā)者可使用由管理工具框架提供的附加處理。示例性擴(kuò)展類(lèi)型管理器處理如上文結(jié)合圖18提到的,擴(kuò)展類(lèi)型管理器可在提供的對(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)型管理器也可以用其它處理來(lái)擴(kuò)展,而不脫離本發(fā)明的范圍?,F(xiàn)在描述附加處理機(jī)制的每一個(gè)。首先,屬性路徑機(jī)制允許一個(gè)串導(dǎo)航對(duì)象的屬性。在當(dāng)前反射系統(tǒng)中,查詢(xún)可查詢(xún)對(duì)象的屬性。然而,在本發(fā)明的擴(kuò)展類(lèi)型管理器中,可以指定提供到連續(xù)的對(duì)象屬性的導(dǎo)航路徑的串。以下是屬性路徑P1.P2.P3.P4的說(shuō)明性句法。每一組件(例如,P1、P2、P3和P4)包括可表示屬性、具有參數(shù)的方法、不是有參數(shù)的方法、字段、XPATH等等的串。XPATH指定了查詢(xún)串,以搜索元素(例如,“/Foo@=13”。在該串內(nèi),可以包括特殊的字符以具體地指示組件的類(lèi)型。如果串不包含特殊的字符,則擴(kuò)展類(lèi)型管理器可執(zhí)行查找以確定組件的類(lèi)型。例如,如果組件P1是對(duì)象,則擴(kuò)展類(lèi)型管理器可查詢(xún)P2是否為對(duì)象的屬性、方法上的對(duì)象、對(duì)象的字段或?qū)傩约?。一旦擴(kuò)展類(lèi)型管理器標(biāo)識(shí)了P2的類(lèi)型,則執(zhí)行依照該類(lèi)型的處理。如果組件不是上述類(lèi)型之一,則擴(kuò)展類(lèi)型管理器可進(jìn)一步查詢(xún)擴(kuò)展源,以判斷是否有將P1的類(lèi)型轉(zhuǎn)換成P2的類(lèi)型的轉(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ò)展類(lèi)型管理器使用上述優(yōu)先級(jí)查找來(lái)查詢(xún)系統(tǒng),以確定toupper的類(lèi)型。擴(kuò)展類(lèi)型管理器發(fā)現(xiàn)toupper不是屬性。然而,toupper可以是由串類(lèi)型繼承的方法,以將串內(nèi)的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母?;蛘?,擴(kuò)展類(lèi)型管理器可能已查詢(xún)了擴(kuò)展的元數(shù)據(jù),以判斷是否有可將name對(duì)象轉(zhuǎn)換成大寫(xiě)的第三方代碼。在找出組件類(lèi)型之后,依照該組件類(lèi)型執(zhí)行處理。在第二個(gè)屬性路徑中(即,“ws.kb”),“ws”是傳入對(duì)象的直接屬性,并本身也是對(duì)象。擴(kuò)展類(lèi)型管理器確定“ws”是整數(shù)。然后,擴(kuò)展類(lèi)型管理器查詢(xún)kb是否是整數(shù)的屬性、kb是否是整數(shù)的方法、并最終查詢(xún)是否有任何代碼知道如何采用整數(shù)并將該整數(shù)轉(zhuǎn)換成kb類(lèi)型。注冊(cè)第三方代碼以執(zhí)行該轉(zhuǎn)換,并且執(zhí)行該轉(zhuǎn)換。在第三個(gè)屬性路徑中(即,“exe*.ver*.description.tolower.trunc(30)”),有若干個(gè)組件。第一個(gè)組件(“exe*”)是傳入對(duì)象的直接屬性,并且也是對(duì)象。再一次,擴(kuò)展類(lèi)型管理器在查找查詢(xún)中向下前進(jìn),以處理第二個(gè)組件(“ver*”)。“exe*”對(duì)象不具有“ver*”屬性或方法,因此擴(kuò)展類(lèi)型管理器查詢(xún)擴(kuò)展的元數(shù)據(jù),以判斷是否有被注冊(cè)來(lái)將可執(zhí)行名字轉(zhuǎn)換成版本的任何代碼。對(duì)于該示例,存在這一代碼。代碼可采用可執(zhí)行的名字串,并使用它來(lái)打開(kāi)文件,然后訪問(wèn)版本塊對(duì)象,并返回版本塊對(duì)象的描述屬性(第三個(gè)組件(“description”))。擴(kuò)展類(lèi)型管理器然后對(duì)第四個(gè)組件(“tolower”)和第五個(gè)組件(“trunc(40)”)執(zhí)行該同一查找機(jī)制。由此,如所示,擴(kuò)展類(lèi)型管理器可在命令串上執(zhí)行相當(dāng)精細(xì)的處理,而無(wú)需管理員書(shū)寫(xiě)任何特定代碼。表1示出了對(duì)說(shuō)明性串生成的輸出。Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18,556officeoutlookMSMSGS13,248messenger表1另一查詢(xún)機(jī)制1824包括關(guān)鍵字。關(guān)鍵字標(biāo)識(shí)了產(chǎn)生唯一數(shù)據(jù)類(lèi)型的實(shí)例的一個(gè)或多個(gè)屬性。例如,在數(shù)據(jù)庫(kù)中,一列可以被標(biāo)識(shí)為可唯一地標(biāo)識(shí)每一行(例如,社會(huì)保障號(hào))的關(guān)鍵字。關(guān)鍵字儲(chǔ)存在與數(shù)據(jù)類(lèi)型相關(guān)聯(lián)的類(lèi)型元數(shù)據(jù)1840中。該關(guān)鍵字然后可由擴(kuò)展類(lèi)型管理器在處理該數(shù)據(jù)類(lèi)型的對(duì)象時(shí)使用。數(shù)據(jù)類(lèi)型可以是擴(kuò)展的數(shù)據(jù)類(lèi)型或現(xiàn)有的數(shù)據(jù)類(lèi)型。另一查詢(xún)機(jī)制824包括比較機(jī)制。比較機(jī)制比較兩個(gè)對(duì)象。如果兩個(gè)對(duì)象直接支持比較功能,則執(zhí)行直接支持的比較功能。然而,如果沒(méi)有一個(gè)對(duì)象支持比較功能,則擴(kuò)展類(lèi)型管理器可在類(lèi)型元數(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書(shū)寫(xiě)compare/time小命令以比較兩個(gè)datetime對(duì)象。在這一情況下,DateTime對(duì)象支持IComparable接口。另一查詢(xún)機(jī)制1824包括轉(zhuǎn)換機(jī)制。擴(kuò)展類(lèi)型管理器允許注冊(cè)規(guī)定其執(zhí)行特定轉(zhuǎn)換的能力的代碼。然后,當(dāng)輸入類(lèi)型A的對(duì)象,并且小命令指定類(lèi)型B的對(duì)象,擴(kuò)展類(lèi)型管理器可使用注冊(cè)的轉(zhuǎn)換之一執(zhí)行轉(zhuǎn)換。擴(kuò)展類(lèi)型管理器可執(zhí)行一系列轉(zhuǎn)換以將類(lèi)型A強(qiáng)制成類(lèi)型B。上述屬性路徑(“ws.kb”)示出了轉(zhuǎn)換機(jī)制。另一查詢(xún)機(jī)制1824包括通配符處理機(jī)制。通配符處理指的是串內(nèi)通配符字符。通配符處理機(jī)制輸入具有通配符字符串并產(chǎn)生一組對(duì)象。擴(kuò)展類(lèi)型管理器允許要被注冊(cè)指定通配符處理的代碼。上述屬性路徑(“exe*.ver*.description.tolower.trunc(30)”)示出了通配符處理機(jī)制。注冊(cè)的進(jìn)程可提供對(duì)文件名、文件對(duì)象、傳入屬性等的通配符處理。另一查詢(xún)機(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í)屬性。該表的輸出示出如下。NamePidPriorityETClient3528Normalcsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一查詢(xún)機(jī)制1824包括關(guān)系機(jī)制。與支持一種關(guān)系(即,繼承)的傳統(tǒng)類(lèi)型系統(tǒng)相反,關(guān)系機(jī)制支持表達(dá)類(lèi)型之間的一個(gè)以上關(guān)系。再一次,這些關(guān)系被注冊(cè)。關(guān)系可包括找出對(duì)象消耗的項(xiàng),或找出消耗對(duì)象的項(xiàng)。擴(kuò)展類(lèi)型管理器可訪問(wèn)描述各種關(guān)系的本體論。使用擴(kuò)展的元數(shù)據(jù)和代碼,可描述用于訪問(wèn)諸如OWL、DAWL等的任何本體論服務(wù)的規(guī)范。以下是使用關(guān)系機(jī)制的說(shuō)明性串的一部分.OWL:″string″?!癘WL”標(biāo)識(shí)符標(biāo)識(shí)了本體論服務(wù),而“string”指定了本體論服務(wù)內(nèi)的特定串。由此,擴(kuò)展類(lèi)型管理器可訪問(wèn)本體論服務(wù)提供的類(lèi)型。用于顯示命令行數(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)專(zhuān)用主機(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ò)展類(lèi)型管理器或其它機(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ì)象(AD0)的轉(zhuǎn)換小命令1940可以在命令行上被聲明為“convert/AD0”。同樣,將管道化對(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ò)程通常被稱(chēng)為可擴(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開(kāi)始。處理在框2002繼續(xù)。在框2002,接收管道對(duì)象,作為格式化小命令的輸入。處理在框2004繼續(xù)。在框2004,啟動(dòng)查詢(xún)以識(shí)別管道化對(duì)象的類(lèi)型。這一查詢(xún)由上文結(jié)合圖18描述的擴(kuò)展類(lèi)型管理器執(zhí)行。一旦擴(kuò)展類(lèi)型管理器識(shí)別了對(duì)象的類(lèi)型,則處理在框2006繼續(xù)。在框2006,在顯示信息中查找識(shí)別的類(lèi)型。顯示信息的示例性格式在圖21中示出,并在下文描述。處理在框2008繼續(xù)。在判別框2008,確定是否在顯示信息中指定了識(shí)別的類(lèi)型。如果顯示信息中沒(méi)有識(shí)別類(lèi)型的條目,則處理完成。否則,處理在框2010繼續(xù)。在框2010,從顯示信息獲取與識(shí)別的類(lèi)型相關(guān)聯(lián)的格式化信息。處理在框2012繼續(xù)。在框2012,在管道上發(fā)出信息。一旦信息被發(fā)出,處理完成?,F(xiàn)在更詳細(xì)地描述可被發(fā)出的示例性信息。該信息可包括格式化信息、頁(yè)眉/頁(yè)腳信息以及組結(jié)束/開(kāi)始信號(hào)對(duì)象。格式化信息可包括形狀、標(biāo)簽、編號(hào)/項(xiàng)目符號(hào)、列寬度、字符編碼類(lèi)型、內(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é)束/開(kāi)始信號(hào)對(duì)象在格式化小命令檢測(cè)到“按……分組”屬性改變之后被發(fā)出。當(dāng)發(fā)生這一情況時(shí),格式化小命令將管道對(duì)象流作為先前已排序來(lái)處理,并且不對(duì)它們重新排序。組結(jié)束/開(kāi)始信號(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)型的所有者來(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/AD0(轉(zhuǎn)換/AD0)、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é)果。由于本管理工具框架允許任務(wù)從任意主機(jī)啟動(dòng)(例如,用戶(hù)界面、命令行、編程方式),系統(tǒng)管理員和產(chǎn)品開(kāi)發(fā)者可共享使兩類(lèi)用戶(hù)更有效和更高效的代碼和經(jīng)驗(yàn)。另外,系統(tǒng)管理員將只需要學(xué)習(xí)一組概念、命令和尋找故障技術(shù)。同樣地,產(chǎn)品開(kāi)發(fā)者也只需要?jiǎng)?chuàng)建一個(gè)提供者小命令來(lái)利用所有管理工具。這樣,如所述的,由于本管理工具框架簡(jiǎn)化了管理對(duì)象的訪問(wèn)和控制并提供了透明的遠(yuǎn)程訪問(wèn),本管理工具框架降低了開(kāi)發(fā)管理工具所需的技術(shù)水平。另外,這一框架使開(kāi)發(fā)者能夠看到由幫助開(kāi)發(fā)者學(xué)習(xí)框架的GUI交互過(guò)程所運(yùn)行的腳本并創(chuàng)建他們自己的自動(dòng)化腳本。另外,由于已在由框架提供的功能上進(jìn)行了測(cè)試,將產(chǎn)品級(jí)測(cè)試減少到只測(cè)試啟用由框架提供的函數(shù)的GUI路徑。另一個(gè)好處是管理GUI可通過(guò)小命令公開(kāi)其內(nèi)部工作方式,小命令為開(kāi)發(fā)者和測(cè)試者提供對(duì)GUI內(nèi)部狀態(tài)和控制的方便訪問(wèn)用于調(diào)試/診斷/自動(dòng)化測(cè)試。盡管上面描述了特定實(shí)現(xiàn)和實(shí)施例的細(xì)節(jié),但這樣的細(xì)節(jié)旨在滿(mǎn)足法定公開(kāi)義務(wù),而不是限制以下權(quán)利要求書(shū)的范圍。因而,由權(quán)利要求書(shū)定義的本發(fā)明不限于上述具體的特征。相反,以本發(fā)明任何形式或修改主張的本發(fā)明都落入所附權(quán)利要求書(shū)的適當(dāng)范圍,適當(dāng)?shù)匕凑盏葍r(jià)原則解釋。權(quán)利要求1.至少一種具有為自動(dòng)化管理任務(wù)提供框架的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述框架包括一語(yǔ)法分析器組件,配置來(lái)分析輸入并根據(jù)所述輸入確定至少一個(gè)小命令;以及一引擎組件,配置成用來(lái)自輸入源的信息填充關(guān)聯(lián)于所述小命令的參數(shù),并執(zhí)行所述小命令以生成可進(jìn)行精確語(yǔ)法分析的流,其中,所述輸入源包括從另一小命令發(fā)出的可進(jìn)行精確語(yǔ)法分析的流。2.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括一主機(jī)組件,配置來(lái)為所述輸入提供至少一條命令。3.如權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述主機(jī)組件直接向所述語(yǔ)法分析器組件提供所述輸入。4.如權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述主機(jī)組件用在所述引擎組件內(nèi)處理為小命令之一的主機(jī)小命令提供所述輸入。5.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述小命令包括一基礎(chǔ)小命令,提供對(duì)多種數(shù)據(jù)類(lèi)型操作的公共實(shí)用程序。6.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述小命令包括一主機(jī)小命令,提供一系統(tǒng)實(shí)用程序。7.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述關(guān)聯(lián)于所述小命令的參數(shù)包括在所述小命令內(nèi)的參數(shù)的參數(shù)聲明。8.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述關(guān)聯(lián)于所述小命令的參數(shù)包括對(duì)定義所述參數(shù)的外部源的引用。9.如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述小命令包括一提供者小命令,提供關(guān)聯(lián)于一應(yīng)用程序的功能。10.至少一種計(jì)算機(jī)可讀介質(zhì),其特征在于,包含當(dāng)由一或多臺(tái)計(jì)算機(jī)執(zhí)行時(shí)執(zhí)行完成下列步驟的指令接收輸入;將一小命令關(guān)聯(lián)于所述輸入,所述小命令確定至少一個(gè)預(yù)期輸入?yún)?shù);對(duì)每個(gè)指定了從所述輸入獲取數(shù)據(jù)的預(yù)期輸入?yún)?shù),用來(lái)自所述輸入的數(shù)據(jù)填充所述預(yù)期輸入?yún)?shù);以及對(duì)每個(gè)指定從到所述小命令的輸入流獲取信息的預(yù)期輸入?yún)?shù),用所述信息填充預(yù)期輸入?yún)?shù),執(zhí)行所述小命令來(lái)基于所述信息和數(shù)據(jù)生成一對(duì)象流,并發(fā)出所述對(duì)象流,其中,所述輸入流包括由另一小命令發(fā)出的對(duì)象流。11.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述輸入對(duì)象包括.NET對(duì)象、XML文檔或現(xiàn)用目錄對(duì)象。12.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述小命令和所述其它小命令在同一進(jìn)程中運(yùn)行。13.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述小命令在本地進(jìn)程中運(yùn)行而所述其它小命令在遠(yuǎn)程進(jìn)程中運(yùn)行。14.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述輸入包括串。15.如權(quán)利要求10所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述輸入包括腳本。16.一系統(tǒng),為自動(dòng)化管理任務(wù)提供管理工具框架,其特征在于,包括一處理器;以及一存儲(chǔ)器,所述存儲(chǔ)器分配給多個(gè)載入所述存儲(chǔ)器由所述處理器執(zhí)行的計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令提供自動(dòng)化管理任務(wù)的方法,所述方法包括接收關(guān)于至少一條命令的接收輸入;分析所述輸入以識(shí)別一個(gè)小命令;用來(lái)自輸入源的信息填充在所述小命令內(nèi)定義的參數(shù);執(zhí)行所述小命令以生成一對(duì)象流;以及輸出所述對(duì)象流。17.如權(quán)利要求16所述的系統(tǒng),其特征在于,所述輸入源包括由另一小命令生成的對(duì)象流。18.一管理框架,配置來(lái)在計(jì)算設(shè)備上運(yùn)行,其特征在于,所述管理框架包括一用于接收輸入的裝置;一用于分析所述輸入為至少一個(gè)小命令的裝置,所述小命令提供用于描述關(guān)聯(lián)于輸入源的至少一個(gè)預(yù)期輸入?yún)?shù)的工具;一用于填充每個(gè)預(yù)期輸入?yún)?shù)的工具;以及一用于以一種使得所述輸入源包括由另一小命令生成的輸出流的方式處理所述小命令的裝置。19.如權(quán)利要求18所述的管理框架,其特征在于,所述一個(gè)小命令和所述其它小命令在同一進(jìn)程中執(zhí)行。20.如權(quán)利要求18所述的管理框架,其特征在于,所述對(duì)象流包括.NET對(duì)象。21.如權(quán)利要求18所述的管理框架,其特征在于,處理所述小命令包括用由所述對(duì)象流獲取的信息填充至少一個(gè)預(yù)期輸入屬性。22.如權(quán)利要求18所述的管理框架,其特征在于,所述至少一個(gè)小命令包括一個(gè)由所述管理框架提供的基礎(chǔ)小命令。23.如權(quán)利要求18所述的管理框架,其特征在于,所述至少一個(gè)小命令包括一個(gè)由第三方開(kāi)發(fā)者提供的第三方小命令。24.如權(quán)利要求18所述的管理框架,其特征在于,還提供一訪問(wèn)遠(yuǎn)程計(jì)算設(shè)備上的所述小命令的裝置。25.一計(jì)算機(jī)可讀介質(zhì),其特征在于,包含當(dāng)由計(jì)算機(jī)執(zhí)行時(shí)完成下列步驟的指令接受用戶(hù)輸入;將用戶(hù)輸入轉(zhuǎn)換為由管理工具框架認(rèn)識(shí)的輸入格式;以及將所述輸入格式轉(zhuǎn)送至所述管理工具框架,所述管理工具框架配置來(lái)分析所述輸入格式;根據(jù)所述輸入實(shí)例化一小命令,所述小命令指定一預(yù)期輸入?yún)?shù);以及從輸入源填充所述預(yù)期輸入?yún)?shù)。26.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述輸入源包括所述輸入格式。27.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述輸入源包括從另一小命令發(fā)出的輸入流。28.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括提供一主機(jī)小命令,所述主機(jī)小命令提供主機(jī)應(yīng)用程序與所述管理工具框架之間的接口。29.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述用戶(hù)輸入包括聲音輸入。30.如權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述用戶(hù)輸入包括在命令行上輸入的命令串。全文摘要在管理工具環(huán)境中,將用戶(hù)輸入提供給管理工具框架用于處理。管理工具框架將用戶(hù)輸入映射到小命令對(duì)象。小命令對(duì)象描述分析用戶(hù)輸入和輸入對(duì)象以獲得預(yù)期輸入?yún)?shù)的語(yǔ)法。輸入對(duì)象由一個(gè)小命令發(fā)出并可用作另一個(gè)小命令的輸入。輸入對(duì)象可以是任何可進(jìn)行精確語(yǔ)法分析的輸入,諸如.NET對(duì)象、普通串、XML文檔等等。各小命令可在同一進(jìn)程中運(yùn)行??晒┻x擇地,一個(gè)小命令可在本地運(yùn)行而另一個(gè)小命令在遠(yuǎn)程運(yùn)行。小命令可由管理工具框架提供,或者可由第三方開(kāi)發(fā)者提供。用戶(hù)輸入可通過(guò)主機(jī)小命令提供給框架。文檔編號(hào)G06F9/44GK101091160SQ200480001296公開(kāi)日2007年12月19日申請(qǐng)日期2004年7月23日優(yōu)先權(quán)日2003年10月24日發(fā)明者J·P·斯諾弗,D·W·雷,J·W·特露荷三世,B·G·帕耶特申請(qǐng)人:微軟公司