两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

向命令行指令提供擴展功能的機制的制作方法

文檔序號:6475072閱讀:161來源:國知局

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