專利名稱::無縫地比較對象的系統(tǒng)和方法(1)
技術(shù)領(lǐng)域:
本文所揭示的發(fā)明涉及計算機實現(xiàn)的比較技術(shù),由其涉及在對象上操作的計算機實現(xiàn)的比較技術(shù)。(2)
背景技術(shù):
管理任務(wù)支持著諸如膝上計算機、臺式計算機等計算設(shè)備日復一日的運行。維護聯(lián)網(wǎng)計算設(shè)備的系統(tǒng)管理員執(zhí)行許多管理任務(wù)。一項管理任務(wù)涉及標識未如期望所運行的計算設(shè)備的問題。一種用于診斷此類問題的技術(shù)涉及將該計算設(shè)備與運行中的計算設(shè)備進行比較。此比較可包括使用圖形用戶界面在視覺上檢查兩個設(shè)備間的設(shè)置,或執(zhí)行在兩個設(shè)備上的相似的文件之間的比較。用于比較的不同實用程序相當長時間以來一直可用。然而,每類文件使用一種專屬于該類文件的工具,并有其自己的句法和屬性。例如,如果文件的類型是文本文件,則使用文本比較工具。類似地,如果文件的類型是二進制文件,則使用二進制比較工具。一般而言,這些比較使用程序的每一個走查文件直到遇到差異。當遇到差異,該差異被報告給系統(tǒng)管理員。盡管這些比較實用程序是有幫助的,然而它們常常報告與問題無關(guān)的差異。因而,需要提供更準確結(jié)果和更多功能性的比較技術(shù)。(3)
發(fā)明內(nèi)容本比較技術(shù)在同樣類型、相似類型、或不同類型的對象上操作。可對照一個或多個參考對象來比較多個比較對象。比較對象可從在基于對象的環(huán)境中運行的小命令(cmdlet)管道中的前一小命令獲得。參考對象和比較對象可以用基于順序的方式或用基于關(guān)鍵字的方式進行比較。此外,可以指定標識要在比較期間比較參考對象和比較對象的哪些屬性的特定屬性。比較可生成標識差異或相似性的輸出。該輸出可用管道運輸?shù)搅硪恍∶钜怨┻M一步的處理。(4)圖1示出其中可實現(xiàn)本比較技術(shù)的示例性計算設(shè)備。圖2是概括地示出結(jié)合本比較技術(shù)的基于對象的管理工具框架的概觀的框圖。圖3所示是圖2中所示的基于對象的管理工具框架的平臺專用的組件內(nèi)的組件的框圖。圖4所示是圖2中所示的基于對象的管理工具框架的核心引擎組件內(nèi)的組件的框圖。圖5是用于指定適合在圖2中所示的基于對象的管理工具框架內(nèi)使用的小命令的示例性數(shù)據(jù)結(jié)構(gòu)。圖6是用于指定適合在圖2中所示的基于對象的管理工具框架內(nèi)使用的小命令的示例性數(shù)據(jù)結(jié)構(gòu)。圖7所示是用于在圖2中所示的基于對象的管理工具框架內(nèi)執(zhí)行的主機處理的示例性過程的邏輯流程圖。圖8所示是在圖2中所示的基于對象的管理工具框架中處理命令串的功能流程圖。圖9所示是如圖8中所示地處理命令串的過程的邏輯流程圖。圖10所示是用于創(chuàng)建適于在圖9中所示的命令串處理內(nèi)使用的小命令實例的示例性過程的邏輯流程圖。圖11所示是用于填充適于在如圖9中所示的命令處理內(nèi)使用的小命令的屬性的示例性過程的邏輯流程圖。圖12所示是用于執(zhí)行適于在圖9中所示的命令處理內(nèi)使用的小命令的示例性過程的邏輯流程圖。圖13是適于在圖2中所示的基于對象的管理工具框架內(nèi)使用的示例性擴展類型管理器的功能框圖。圖14示出在圖2中所示的基于對象的管理工具框架內(nèi)實現(xiàn)的比較小命令的示例性句法。圖15示出比較小命令的調(diào)用以及所生成的結(jié)果的例子。圖16所示是用于執(zhí)行基于關(guān)鍵字的比較過程的示例性過程的邏輯流程圖。圖17所示是用于執(zhí)行基于順序的比較過程的示例性過程的邏輯流程圖。圖18所示是適于在圖17中所示的基于順序的比較過程內(nèi)使用的基于順序的對象比較過程的邏輯流程圖。圖19所示是適于在圖17中所示的基于順序的比較過程內(nèi)使用的基于順序的文本比較過程的邏輯流程圖。圖20示出另一種用于實現(xiàn)λ表達式的比較小命令的示例性句法。圖21所示是適于在圖16中使用的用于執(zhí)行與每個比較對象的基于關(guān)鍵字的比較的示例性過程的流程圖。圖22所示是適于在圖21中使用的用于比較參考對象和比較對象間屬性值的示例性過程的流程圖。圖23所示是適于在圖21中使用的用于發(fā)放結(jié)果的示例性過程的流程圖。(5)具體實施方式簡單地說,本比較技術(shù)在同樣類型、相似類型、或不同類型的對象上操作。該比較允許結(jié)果被自動地用作最終可修補問題的另一操作的輸入。以下詳細描述被分為若干章節(jié)。第一節(jié)描述了本比較技術(shù)可在其中操作的示例性計算環(huán)境。第二節(jié)描述了可其中可結(jié)合本比較技術(shù)的基于對象的管理工具環(huán)境的示例性框架。這包括對于該示例性框架的各個組件以及這些組件的操作的詳細描述。第三節(jié)描述該比較技術(shù)及其操作。第一節(jié)示例性計算環(huán)境圖1示出可用于實現(xiàn)本比較技術(shù)的示例性計算設(shè)備。在最基本的配置中,計算設(shè)備100通常包括至少一個處理單元102和系統(tǒng)存儲器104。取決于該計算設(shè)備的確切配置和類型,系統(tǒng)存儲器104可以是易失性的(諸如RAM)、非易失性的(諸如ROM、閃存、等等)或這兩者的某種組合。系統(tǒng)存儲器104通常包括操作系統(tǒng)105、一個或多個程序模塊106,且可包括一個或多個程序數(shù)據(jù)107。系統(tǒng)存儲器104還包括基于組件的框架120,它支持組件(包括屬性和事件)、對象、繼承、多態(tài)、反射,并提供諸如由華盛頓州雷蒙德市微軟公司制造的.NETTM等面向?qū)ο蟮幕诮M件的應(yīng)用程序編程接口(API)。系統(tǒng)存儲器104還包括管理工具框架200,它與基于組件的框架120交互以支持管理工具(未示出)的開發(fā)?;诮M件的框架120和管理工具框架200可作為操作系統(tǒng)105的一部分駐留(如圖所示),或可作為程序模塊106的一部分駐留。此基本配置在圖1中由虛線108內(nèi)的那些組件示出。計算設(shè)備100可具有額外的特征或功能。例如,計算設(shè)備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è)備,或任何其它可用于存儲期望信息并可由計算設(shè)備100訪問的介質(zhì)。任何此類計算機存儲介質(zhì)可以是設(shè)備100的一部分。計算設(shè)備100還可具有諸如鍵盤、鼠標、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等輸入設(shè)備112。還可包括諸如顯示器、揚聲器、打印機等輸出設(shè)備。這些設(shè)備在本領(lǐng)域中是公知的,且無需在此詳細討論。計算設(shè)備100還可包含允許該設(shè)備諸如通過網(wǎng)絡(luò)與其它計算設(shè)備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ì)包括諸如有線網(wǎng)絡(luò)或直線連接的有線介質(zhì),以及諸如聲學、RF、紅外及其它無線介質(zhì)的無線介質(zhì)。如本文所使用的術(shù)語計算機可讀介質(zhì)包括存儲介質(zhì)和通信介質(zhì)兩者。第二節(jié)管理工具框架圖2是概括地示出示例性管理工具框架200的概觀的框圖。管理工具框架200包括一個或多個主機組件202、平臺專用組件204、主機無關(guān)組件206、以及處理程序組件208。主機無關(guān)組件206可與其它組件(即,主機組件202、平臺專用組件204、及處理程序組件208)的每一個通信。這些組件的每一個在下文簡要描述,并按需在后續(xù)章節(jié)中更詳細地描述。主機組件主機組件202包括一個或多個主機程序(例如主機程序210-214),它們向用戶或其它程序展示相關(guān)聯(lián)應(yīng)用程序的自動化特征。自動化特征可使導航、診斷、配置、生命周期、操作等等自動化。每個主機程序210-214可以用其自己特有的樣式來展現(xiàn)這些自動化特征,諸如經(jīng)由命令行、圖形用戶界面(GUI)、語音識別接口、應(yīng)用程序編程接口(API)、腳本語言、web服務(wù)等來展現(xiàn)。然而,主機程序210-214的每一個通過由管理工具框架提供的機制來展現(xiàn)一個或多個自動化特征。在此例中,該機制使用小命令(cmdlet)向相關(guān)聯(lián)主機程序210-214的用戶顯露管理工具能力。此外,該機制使用一組主機提供的接口,以將管理工具環(huán)境嵌入到與對應(yīng)主機程序210-214相關(guān)聯(lián)的應(yīng)用程序內(nèi)。貫穿以下的討論,術(shù)語“小命令”用于指在參考圖2-13所描述的示例性管理工具環(huán)境內(nèi)所使用的命令。因而,小命令對應(yīng)于傳統(tǒng)管理環(huán)境中的命令,但和這些傳統(tǒng)命令相當不同。例如,小命令通常在大小上比它們的對等命令小,因為小命令可利用由管理工具框架提供的公用功能,諸如語法分析、數(shù)據(jù)確認、出錯報告等。因為此類公用功能可被實現(xiàn)一次和測試一次,因此貫穿管理工具框架使用小命令允許與應(yīng)用程序?qū)S霉δ芟嚓P(guān)聯(lián)的增量開發(fā)和測試成本與傳統(tǒng)環(huán)境相比相當?shù)牡?。此外,和傳統(tǒng)環(huán)境形成對比,小命令無需是獨立的可執(zhí)行程序。相反,小命令可在管理工具框架內(nèi)的各個同樣的進程中運行。這允許小命令在彼此間交換“活”對象。交換“活”對象的這一能力允許小命令直接在這些對象上調(diào)用方法。因而,術(shù)語“活”對象指具有直接可調(diào)用的方法的對象。相反,“死”對象指不具有直接可調(diào)用的方法的對象。創(chuàng)建和使用小命令的細節(jié)將在下文更具體地描述。概括而言,每個主機程序210-214管理用戶和管理工具框架內(nèi)的其它組件間的交互。這些交互可包括參數(shù)的提示、出錯報告等等。通常,每個主機程序210-214可提供其自己的一組專用主機小命令(例如,主機小命令218)。例如,如果主機程序是電子郵件程序,則該主機程序可提供與信箱和消息交互的主機小命令。即使圖2示出主機程序210-214,本領(lǐng)域技術(shù)人員應(yīng)理解,主機組件202可包括與現(xiàn)有或新創(chuàng)建的應(yīng)用程序相關(guān)聯(lián)的其它主機程序。這些其它主機程序也會將由管理工具環(huán)境提供的功能嵌入到其相關(guān)聯(lián)的應(yīng)用程序內(nèi)。主機程序提供的處理將在下文聯(lián)合圖7詳細描述。在圖2所示的例子中,主機程序可以是管理控制臺(即,主機程序210),它提供簡單、一致的管理用戶界面,以供用戶創(chuàng)建、保存、及打開管理計算設(shè)備的硬件、軟件、及網(wǎng)絡(luò)組件的管理工具。為實現(xiàn)這些功能,主機程序210提供一組用于在管理工具框架之上構(gòu)建管理6UI的服務(wù)。也可將GUI交互展現(xiàn)為幫助向用戶講授由管理工具環(huán)境提供的腳本能力的用戶可見的腳本。在另一例中,主機程序可以是命令行交互式外殼(即主機程序212)。命令行交互式外殼可允許輸入到命令行上的外殼元數(shù)據(jù)216影響命令行的處理。在又一例中,主機程序可以是web服務(wù)(即,主機程序214),它使用各平臺、編程語言和應(yīng)用程序間的分布式計算和互操作性的工業(yè)標準規(guī)范。除了這些例子以外,第三方可通過創(chuàng)建用于其主機程序或其它主機程序的“提供者”接口和提供者小命令,來添加其自己的主機組件。提供者接口展現(xiàn)應(yīng)用程序或基礎(chǔ)結(jié)構(gòu),從而該應(yīng)用程序或基礎(chǔ)結(jié)構(gòu)可被管理工具框架操縱。提供者小命令為導航、診斷、配置、生命周期、操作等提供自動化。提供者小命令展現(xiàn)一組完全異類的數(shù)據(jù)存儲上的多態(tài)小命令行為。管理工具環(huán)境在和其它小命令類具有同樣的優(yōu)先級的提供者小命令上操作。提供者小命令是使用和其它小命令同樣的機制來創(chuàng)建的。提供者小命令向管理工具框架展現(xiàn)應(yīng)用程序或基礎(chǔ)結(jié)構(gòu)的特定功能。因而,通過小命令的使用,產(chǎn)品開發(fā)者只需創(chuàng)建一個主機組件,該主機組件然后允許其產(chǎn)品能夠用許多管理工具來操作。例如,采用示例性管理工具環(huán)境,系統(tǒng)級圖形用戶界面幫助菜單可被集成和移植到現(xiàn)有的應(yīng)用程序中。平臺專用組件平臺專用組件204包括計算系統(tǒng)(例如圖1中的計算設(shè)備100)用于將管理工具框架從該框架所運行的平臺的細節(jié)隔離的服務(wù)的集合。因而,對于每一類平臺,都有一組平臺專用組件。平臺專用組件允許用戶在不同的操作系統(tǒng)上使用同樣的管理工具。簡要地轉(zhuǎn)向圖3,平臺專用組件204可包括元數(shù)據(jù)/上下文敏感輸入組件302、幫助組件304、配置/注冊組件306、小命令設(shè)置組件308、以及輸出接口組件309。組件302-308和與數(shù)據(jù)庫存儲314相關(guān)聯(lián)的數(shù)據(jù)庫存儲管理器312通信。語法分析器220和腳本引擎222與元數(shù)據(jù)/上下文敏感輸入組件302通信。核心引擎224和幫助小命令組件304、配置/注冊組件306、小命令設(shè)置組件308以及輸出接口組件309通信。輸出接口組件309包括由主機提供以輸出小命令的接口。所輸出的小命令隨即可調(diào)用主機的輸出對象以進行呈現(xiàn)。平臺專用組件204也可包括日志記錄/監(jiān)察組件310,核心引擎224使用該組件和提供日志記錄和監(jiān)察能力的主機專用(即平臺專用)服務(wù)通信。在示例性管理工具框架中,元數(shù)據(jù)/上下文敏感輸入組件302提供命令、參數(shù)和參數(shù)值的自動完成。幫助小命令組件304提供基于主機用戶界面的定制的幫助系統(tǒng)。處理程序組件回到圖2,處理程序組件208包括傳統(tǒng)實用程序230、管理小命令232、非管理小命令234、遠程化小命令236、及web服務(wù)接口238。這些的每一個將在下文更詳細地描述。管理小命令232(也稱為平臺小命令)包括查詢或操縱與計算設(shè)備相關(guān)聯(lián)的配置信息的小命令。因為管理小命令232操縱系統(tǒng)類型信息,它們是依賴于特定平臺的。然而,每個平臺通常具有提供和其它平臺上的管理小命令232相似的行動的管理小命令232。例如,每個平臺支持獲取和設(shè)置系統(tǒng)管理屬性(例如,get/process(獲得/處理)、set/IPAddress(設(shè)置/IP地址))的管理小命令232。主機無關(guān)組件206經(jīng)由公共API與管理小命令通信。非管理小命令234(有時稱為基礎(chǔ)小命令)包括對由管理小命令232和任何其它小命令提供的對象進行組合、分類、過濾及執(zhí)行其它處理的小命令。根據(jù)本比較技術(shù),非管理小命令234包括將在下文聯(lián)合圖14-32詳細描述的“比較對象”小命令。非管理小命令234在每個平臺上可以是相同的,并且提供一組經(jīng)由公共API和主機無關(guān)組件206交互的實用程序。非管理小命令234和主機無關(guān)組件206間的交互允許在對象上反射,并且允許對所反射的對象進行不依賴于其(對象)類型的處理。因而,這些實用程序允許開發(fā)者編寫非管理小命令一次,然后將這些非管理小命令應(yīng)用到計算系統(tǒng)上所支持的所有類的對象。在以往,開發(fā)者必需首先理解要處理的數(shù)據(jù)的格式,然后編寫僅處理該數(shù)據(jù)的應(yīng)用程序。因而,傳統(tǒng)應(yīng)用程序僅能處理非常有限范圍的數(shù)據(jù)。獨立于其對象類型處理對象的一種示例性機制在下文聯(lián)合圖13進行描述。傳統(tǒng)實用程序230包括諸如win32命令行可執(zhí)行碼等現(xiàn)有可執(zhí)行碼。每個傳統(tǒng)實用程序使用文本流(例如stdin、stdout和stderr)和管理工具框架通信,文本流是對象框架內(nèi)的一種對象類型。因為傳統(tǒng)實用程序230使用文本流,因此由管理工具框架提供的基于反射的操作不可用。傳統(tǒng)實用程序230在與管理工具框架不同的進程中執(zhí)行。盡管未示出,其它小命令也可在進程外操作。與web服務(wù)接口238結(jié)合的遠程化小命令236提供遠程化機制,以通過諸如因特網(wǎng)或內(nèi)聯(lián)網(wǎng)(例如,圖2中所示的因特網(wǎng)/內(nèi)聯(lián)網(wǎng)240)等通信介質(zhì)訪問其它計算設(shè)備上的交互式和程序性管理工具環(huán)境。在示例性管理工具框架中,遠程化機制支持依賴于跨越多個獨立控制域的基礎(chǔ)結(jié)構(gòu)的聯(lián)合服務(wù)。該遠程化機制允許腳本在遠程計算設(shè)備上執(zhí)行。腳本可在單個或多個遠程系統(tǒng)上運行。腳本的結(jié)果可以在每個單獨的腳本完成時處理,或者結(jié)果可以在各個計算設(shè)備上的所有腳本完成以后聚集并一起處理。例如,被示為主機組件202之一的web服務(wù)214可以是遠程代理。在另一實施例中,web服務(wù)214可以是通過通信介質(zhì)240和引擎通信的單獨組件(未示出)。對于任一配置,web服務(wù)214然后和被配置成與其它主機組件通信以控制小命令的引擎通信。遠程代理處理向目標系統(tǒng)上的語法分析器和管理工具框架的遠程命令請求的提交。遠程化小命令擔當遠程客戶機,以提供對遠程代理的訪問。遠程代理和遠程化小命令經(jīng)由經(jīng)語法分析的流通信。可在協(xié)議層保護此經(jīng)語法分析的流,或者可使用額外的小命令來加密并隨后解密該經(jīng)語法分析的流。主機無關(guān)組件主機無關(guān)組件206包括語法分析器220、腳本引擎222和核心引擎224。主機無關(guān)組件206提供組合多個小命令、協(xié)調(diào)小命令的操作、以及協(xié)調(diào)其它資源、會話以及作業(yè)與小命令的交互的機制和服務(wù)。示例性語法分析器語法分析器220提供用于從各個主機程序接收輸入請求,并將輸入請求映像到遍及管理工具框架(諸如在核心引擎224內(nèi))使用的統(tǒng)一小命令對象的機制。此外,語法分析器220可基于所收到的輸入執(zhí)行數(shù)據(jù)處理。語法分析器220提供容易地向用戶展現(xiàn)同一能力的不同語言或句法的能力。例如,因為語法分析器220負責解釋輸入請求,因此語法分析器220內(nèi)影響期望輸入句法的代碼改變本質(zhì)上會影響管理工具框架的每個用戶。因此,系統(tǒng)管理員可在支持不同句法的不同計算設(shè)備上提供不同的語法分析器。然而,用同一語法分析器操作的每個用戶對于每個小命令會體驗一致的句法。相反,在傳統(tǒng)環(huán)境中,每個命令實現(xiàn)其自己的句法。因此,有了數(shù)以千計的命令,每個環(huán)境支持數(shù)種不同的句法,通常其中許多句法彼此不一致。示例性腳本引擎腳本引擎222提供用腳本將多個小命令捆綁到一起的機制和服務(wù)。腳本是在嚴格的繼承規(guī)則下共享會話狀態(tài)的命令行的聚集?;谳斎胝埱笾刑峁┑木浞?,腳本內(nèi)的多個命令行可以同步或者異步地執(zhí)行。腳本引擎222具有處理諸如循環(huán)和條件子句等控制結(jié)構(gòu),以及處理腳本內(nèi)的變量的能力。腳本引擎還管理會話狀態(tài),并基于策略(未示出)向小命令提供對會話數(shù)據(jù)的訪問。示例性核心引擎核心引擎224負責處理由語法分析器220標識的小命令。簡要地轉(zhuǎn)向圖4,示出了管理工具框架200內(nèi)的示例性核心引擎224。該示例性核心引擎224包括管道處理器402、加載器404、元數(shù)據(jù)處理器406、出錯和事件處理程序408、會話管理器410、以及擴展類型管理器412。示例性元數(shù)據(jù)處理器元數(shù)據(jù)處理器406被配置成訪問和存儲諸如圖3所示的數(shù)據(jù)庫存儲314等元數(shù)據(jù)存儲內(nèi)的元數(shù)據(jù)。元數(shù)據(jù)可以經(jīng)由命令行、在小命令類定義內(nèi)提供。當執(zhí)行它們的處理時,管理工具框架200內(nèi)的不同組件可以請求元數(shù)據(jù)。例如,語法分析器202可以請求元數(shù)據(jù)以確認在命令行上提供的參數(shù)。示例性出錯和事件處理器出錯和事件處理器408提供錯誤對象,用于存儲關(guān)于在處理命令行期間每個出錯發(fā)生的信息。示例性會話管理器會話管理器410向管理工具框架200內(nèi)的其它組件提供會話和狀態(tài)信息。由會話管理器管理的狀態(tài)信息可由任何小命令、主機、或核心引擎經(jīng)由編程接口來訪問。這些編程接口允許創(chuàng)建、修改和刪除服從安全策略約束的狀態(tài)信息。示例性管道處理器和加載器加載器404被配置成按照順序加載存儲器中的每個小命令,以供管道處理器402執(zhí)行該小命令。管道處理器402包括小命令處理器420和小命令管理器422。小命令處理器420分派個別的小命令。如果小命令需要在一個或一組遠程機器上執(zhí)行,則小命令處理器420與圖2中所示的遠程化小命令236協(xié)調(diào)執(zhí)行。小命令管理器422處理小命令聚集的執(zhí)行。為了在從主機程序210-214接收到的輸入上執(zhí)行處理,小命令管理器422、小命令處理器420和腳本引擎222(圖2)相互通信。該通信本質(zhì)上可以是遞歸的。例如,如果主機程序提供腳本,該腳本可調(diào)用小命令管理器422以執(zhí)行小命令,而該小命令自身可能也是腳本。該腳本隨即可由腳本引擎222執(zhí)行。核心引擎的一個示例性過程流在下文聯(lián)合圖14詳細描述。示例性擴展類型管理器如前所述,管理工具框架提供一組允許對象的反射并允許對所反射的對象進行不依賴于其(對象)類型的處理的實用程序。管理工具框架200與計算系統(tǒng)上的組件框架(圖1中的組件框架120)交互以執(zhí)行此反射。如本領(lǐng)域技術(shù)人員應(yīng)當理解的,反射提供了查詢對象并獲得該對象的類型,及隨后對各對象和與該類對象相關(guān)聯(lián)的屬性進行反射以獲得其它對象和/或期望值的能力。即使反射為管理工具框架200提供了對象上的可觀數(shù)量的信息,反射仍集中于對象的類型。例如,當對數(shù)據(jù)庫數(shù)據(jù)表進行反射時,所返回的信息是該數(shù)據(jù)表有兩個屬性列屬性和行屬性。這兩個屬性未提供關(guān)于數(shù)據(jù)表內(nèi)“對象”的足夠細節(jié)。當反射被用于可擴展標記語言(XML)和其它對象時,類似的問題也會出現(xiàn)。因而,擴展類型管理器412集中于類型的使用,而非集中于對象的類型,以確定對象是否能用于獲得所需的信息。繼續(xù)上文數(shù)據(jù)表的例子,該數(shù)據(jù)表有列屬性和行屬性的事實并不是特別值得關(guān)注。相反地,值得關(guān)注的是有一列包含關(guān)注的信息。因此,集中于使用,擴展類型管理器412將每行與一個“對象”相關(guān)聯(lián),并將每列與該“對象”的一個“屬性”相關(guān)聯(lián)。因而,擴展類型管理器412提供了從任何類型的可精確地分析語法的輸入創(chuàng)建“對象”的機制。以此方式,擴展類型管理器412補充了由基于組件的框架120提供的反射能力,并將“反射”擴展到任何類型的可精確地分析語法的輸入??偠灾?,擴展類型管理器被配置成訪問可精確地分析語法的輸入(未示出),并將可精確地分析語法的輸入與所請求的數(shù)據(jù)類型相關(guān)。擴展類型管理器412隨即向諸如管道處理器402或語法分析器220等作出請求的組件提供所請求的信息。在以下討論中,可精確地分析語法的輸入被定義為可辨別其屬性和值的輸入。一些示例性的可精確地分析語法的輸入包括Windows管理規(guī)程(WMI)輸入、ActiveX數(shù)據(jù)對象(ADO)輸入、可擴展標記語言(XML)輸入、和諸如.NET對象等對象輸入。其它可精確地分析語法的輸入可包括第三方數(shù)據(jù)格式。簡要地轉(zhuǎn)向圖13,示出了供管理工具框架內(nèi)使用的示例性擴展類型管理器的功能框圖。出于解釋的目的,把由擴展類型管理器提供的功能(由圈內(nèi)的數(shù)字“3”表示)與由傳統(tǒng)的緊捆綁系統(tǒng)(tightlyboundsystem)提供的功能(由圈內(nèi)的數(shù)字“1”表示),和由反射系統(tǒng)提供的功能(由圈內(nèi)的數(shù)字“2”表示)進行對照。在傳統(tǒng)的緊捆綁系統(tǒng)中,應(yīng)用程序內(nèi)的調(diào)用者1302直接訪問對象A內(nèi)的信息(例如,屬性A和B、方法M1和M2)。如上所述,調(diào)用者1302必須事先知道由對象A在編譯時提供的屬性(例如,屬性A和B)和方法(例如,方法M1和M2)。在反射系統(tǒng)中,類屬代碼1320(不依賴于任何數(shù)據(jù)類型)查詢對所請求的對象進行反射1310、并向類屬代碼1320返回關(guān)于該對象(例如對象A)的信息(例如,屬性A和B、方法M1和M2)的系統(tǒng)1308。盡管未在對象A中示出,所返回的信息可包括諸如供應(yīng)商、文件、日期等附加信息。因此,通過反射,類屬代碼1320獲得至少和緊捆綁系統(tǒng)所提供的一樣的信息。反射系統(tǒng)還允許調(diào)用者1302無需任何關(guān)于參數(shù)的先驗知識,即可查詢系統(tǒng)并獲得附加信息。在緊捆綁系統(tǒng)和反射系統(tǒng)中,新數(shù)據(jù)類型都不能被容易地結(jié)合到操作環(huán)境中。例如,在緊捆綁系統(tǒng)中,一旦交付了操作環(huán)境,該操作環(huán)境不能再結(jié)合新的數(shù)據(jù)類型,因為為了支持它們,它必須被重新構(gòu)建。類似地,在反射系統(tǒng)中,每個對象類的元數(shù)據(jù)是固定的。因此,通常不進行新數(shù)據(jù)類型的結(jié)合。然而,有了本擴展類型管理器,新的數(shù)據(jù)類型能被結(jié)合到操作系統(tǒng)中。采用擴展類型管理器1322,類屬代碼1320可對所請求的對象進行反射,以獲得由諸如第三方對象(例如,對象A’和B)、語義web1332、本體(ontology)服務(wù)1334等各種外部源提供的擴展數(shù)據(jù)類型(例如,對象A’)。如圖所示,第三方對象可擴展現(xiàn)有對象(例如,對象A’)或者可以創(chuàng)建全新的對象(例如,對象B)。這些外部源的每一個可在類型元數(shù)據(jù)1340內(nèi)注冊其唯一的結(jié)構(gòu),并提供代碼1342。當對象被查詢,擴展類型管理器檢查類型元數(shù)據(jù)1340以確定該對象是否已被注冊。如果該對象未在類型元數(shù)據(jù)1340內(nèi)注冊,則執(zhí)行反射。否則執(zhí)行擴展反射。代碼1342返回與被反射的類型相關(guān)聯(lián)的附加屬性和方法。例如,如果輸入類型是XML,則代碼1342可包括描繪XML用于從XML創(chuàng)文檔建對象的方式的描述文件。因此,類型元數(shù)據(jù)1340描述了擴展類型管理器412應(yīng)如何查詢各類可精確地分析語法的輸入(例如,第三方對象A’和B、語義web1332)以獲得用于為該特定輸入類型創(chuàng)建對象的期望屬性,且代碼1342提供獲得這些期望屬性的指令。結(jié)果,擴展類型管理器412提供了允許對所有類型對象進行“反射”的間接層。除了提供擴展類型以外,擴展類型管理器412提供附加查詢機制,諸如屬性路徑機制、關(guān)鍵字機制、比較機制、轉(zhuǎn)換機制、通配符(globber)機制、屬性組機制、關(guān)系機制等。當輸入命令串時,在以下“示例性擴展類型管理器的處理”一節(jié)中描述的這些查詢機制的每一個都向系統(tǒng)管理員提供了靈活性。各種技術(shù)可被用于實現(xiàn)擴展類型管理器的語義。以下描述了三種技術(shù)。然而,本領(lǐng)域技術(shù)人員應(yīng)理解,可使用這些技術(shù)的變體而不會偏離要求保護的本發(fā)明的范疇。在一種技術(shù)中,可提供一系列具有靜態(tài)方法(例如,getproperty())的類。對象被輸入到靜態(tài)方法(例如,getproperty(object))中,且該靜態(tài)方法返回一組結(jié)果。在另一種技術(shù)中,操作環(huán)境用適配器(adaptor)封裝對象。因而不提供輸入。適配器的每個實例具有作用于被封裝對象并返回被封裝對象的屬性的getproperty方法。以下是示出此技術(shù)的偽代碼ClassAdaptor{ObjectX;getProperties();}在又一種技術(shù)中,適配器類子類化該對象。傳統(tǒng)上,子類化在編譯前發(fā)生。然而,在某些操作環(huán)境中,子類化可動態(tài)發(fā)生。對于這些類型的環(huán)境,以下是示出此技術(shù)的偽代碼ClassAAdaptor{getProperties(){returndata;}}因此,如圖13中所示,擴展類型管理器允許開發(fā)者創(chuàng)建新的數(shù)據(jù)類型;注冊該數(shù)據(jù)類型;并允許其它應(yīng)用程序和小命令使用該新數(shù)據(jù)類型。相反,在現(xiàn)有的管理環(huán)境中,必須在編譯時知道每種數(shù)據(jù)類型,從而與從該數(shù)據(jù)類型實例化的對象相關(guān)聯(lián)的屬性或方法可被直接訪問。因而,以前很少進行由管理環(huán)境支持的新數(shù)據(jù)類型的添加?;氐綀D2,總而言之,管理工具框架200不靠外殼來協(xié)調(diào)用戶的命令輸入的執(zhí)行,而是相反,將該功能分為處理部分(例如,主機無關(guān)組件206)和用戶交互部分(例如,經(jīng)由主機小命令)。此外,該管理工具環(huán)境大大地簡化了管理工具的編程,因為語法分析和數(shù)據(jù)確認所需的代碼不再被包括在每個命令中,而是相反由管理工具框架內(nèi)的組件(例如,語法分析器220)提供。以下描述管理工具框架內(nèi)所執(zhí)行的示例性處理。示例性操作圖5-6圖示出在管理工具環(huán)境內(nèi)使用的示例性數(shù)據(jù)結(jié)構(gòu)。圖7-12圖示出管理工具環(huán)境內(nèi)的示例性處理流程。本領(lǐng)域技術(shù)人員應(yīng)理解,某些處理可由與下述組件不同的組件執(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)。當完成時,該小命令可以是管理小命令、非管理小命令、主機小命令、提供者小命令等等。以下討論描述關(guān)于軟件開發(fā)者的觀點的小命令(即,提供者小命令)的創(chuàng)建。然而,每類小命令是以同樣方式創(chuàng)建,并以相似方式操作的。小命令可以用諸如C#等的任何語言編寫。此外,可使用腳本語言等編寫小命令。當管理工具環(huán)境用.NET框架操作時,小命令可以是.NET對象。提供者小命令500(在下文稱為小命令500)是具有小命令類名(例如,StopProcess504)的公有類。小命令500源自小命令類506(cmdlet)。以下聯(lián)合圖6描述小命令類504的示例性數(shù)據(jù)結(jié)構(gòu)。每個小命令500與將名稱(例如,Stop/Process(停止/進程))與小命令500相關(guān)聯(lián)的命令屬性502相關(guān)聯(lián)。名稱在管理工具環(huán)境中注冊。如下文將描述的,當具有該名稱(例如,Stop/Process)的命令串作為輸入在命令行或腳本中提供時,語法分析器查看小命令注冊表以標識小命令500。小命令500與為小命令的期望輸入?yún)?shù)定義語法的語法機制相關(guān)聯(lián)。該語法機制可直接或間接與小命令相關(guān)聯(lián)。例如,小命令500示出了直接語法關(guān)聯(lián)。在此小命令500中,聲明了一個或多個公有參數(shù)(例如,ProcessName510和PID512)。公有參數(shù)的聲明將輸入對象的語法分析驅(qū)動至小命令500?;蛘?,參數(shù)的描述可出現(xiàn)在諸如XML文檔等外部源中。此外部源中的參數(shù)描述隨即將輸入對象的語法分析驅(qū)動至該小命令。每個公有參數(shù)510、512可具有與其相關(guān)聯(lián)的一個或多個屬性(即,偽指令)。偽指令可來自任何以下類別語法分析偽指令520、數(shù)據(jù)確認偽指令512、數(shù)據(jù)生成偽指令522、處理偽指令523、編碼偽指令524、以及文檔編制偽指令525。這些偽指令可由方括號括住。每個偽指令描述了一種要在以下期望的輸入?yún)?shù)上執(zhí)行的操作。諸如用戶交互類型偽指令等的某些偽指令還可在類級應(yīng)用。偽指令被存儲在與小命令相關(guān)聯(lián)的元數(shù)據(jù)中。這些屬性也可影響在小命令內(nèi)聲明的參數(shù)的填充。以下聯(lián)合圖11描述填充這些參數(shù)的過程。核心引擎可應(yīng)用這些偽指令以確保順應(yīng)性。小命令500包括第一方法530(此后可互換地稱作BeginProcess(開始進程)方法530)和第二方法540(此后可互換地稱作ProcessRecord(處理記錄)方法540)。核心引擎使用第一和第二方法530、540以指導小命令500的處理。例如,第一方法530被執(zhí)行一次,并執(zhí)行設(shè)置功能。為每個需要由小命令500處理的對象(例如,記錄)執(zhí)行第二方法540內(nèi)的代碼542。小命令500還可包括在小命令500后進行清除的第三方法(未示出)。因此,如圖5中所示,第二方法540內(nèi)的代碼542通常很簡短,并且不包含諸如語法分析代碼、數(shù)據(jù)確認代碼等傳統(tǒng)管理工具環(huán)境中所需的功能。因此,系統(tǒng)管理員無需學習復雜編程語言即可開發(fā)復雜的管理任務(wù)。圖6是用于指定小命令的示例性數(shù)據(jù)結(jié)構(gòu)600??偟膩碚f,數(shù)據(jù)結(jié)構(gòu)600提供一種用于清楚地表達管理工具框架和小命令間的合同的手段。數(shù)據(jù)結(jié)構(gòu)600是源自小命令類604(CmdLet)的公有類。軟件開發(fā)者指定將諸如“get/process(獲得/進程)”和“format/table(格式化/表)”等名詞/動詞對與小命令600相關(guān)聯(lián)的cmdletDeclaration602(小命令聲明)。該名詞/動詞對在管理工具環(huán)境中注冊。該動詞或名詞可內(nèi)含于小命令名中。并且,類似于數(shù)據(jù)結(jié)構(gòu)500,數(shù)據(jù)結(jié)構(gòu)600可包括一個或多個可與聯(lián)合數(shù)據(jù)結(jié)構(gòu)500描述的一個或多個偽指令520-525相關(guān)聯(lián)的公有成員(例如,Name(名稱)630、Recurse(遞歸)632)。然而,在此示例性數(shù)據(jù)結(jié)構(gòu)600中,每個期望的輸入?yún)?shù)630和632分別與輸入屬性631和633相關(guān)聯(lián)。輸入屬性631和633指定關(guān)于其各自參數(shù)630和632的數(shù)據(jù)應(yīng)從命令行獲得。因此,在此示例性數(shù)據(jù)結(jié)構(gòu)600中,沒有任何從由另一個小命令發(fā)出的通過管道傳送的對象填充的期望的輸入?yún)?shù)。因此,數(shù)據(jù)結(jié)構(gòu)600不覆蓋由小命令基類提供的第一方法(例如,BeginProcessing)或第二方法(例如,ProcessRecord)。數(shù)據(jù)結(jié)構(gòu)600還可包括另一個不被識別為輸入?yún)?shù)的成員640。另一成員640可用于存儲基于偽指令之一所生成的,并且可以是私有或者公有的數(shù)據(jù)。因此,如數(shù)據(jù)結(jié)構(gòu)600中所示,通過使用在特定小命令類中聲明公有屬性和偽指令,小命令開發(fā)者可以容易地為對其小命令的期望輸入?yún)?shù)指定語法,并指定應(yīng)對期望輸入?yún)?shù)執(zhí)行的處理,而無需小命令開發(fā)者生成任何底層邏輯。數(shù)據(jù)結(jié)構(gòu)600示出小命令和語法機制間的直接關(guān)聯(lián)。如上所述,此關(guān)聯(lián)也可以是間接的,諸如通過在諸如XML文檔等外部源內(nèi)指定期望參數(shù)的定義?,F(xiàn)在描述管理工具環(huán)境內(nèi)的示例性過程流程。示例性主機處理流程圖7所示是在圖2中所示的管理工具框架內(nèi)執(zhí)行的主機處理的示例性過程的流程圖。過程700在框701開始,接收到為特定應(yīng)用程序啟動管理工具環(huán)境的請求。該請求可通過諸如選擇應(yīng)用程序圖標等鍵盤輸入本地發(fā)送,或通過不同計算設(shè)備的web服務(wù)接口遠程地發(fā)送。對于任一情景,處理繼續(xù)前往框702。在框702,“目標”計算設(shè)備上的特定應(yīng)用程序(例如,主機程序)建立其環(huán)境。這包括確定小命令的哪一子集(例如,管理小命令232、非管理小命令234、及主機小命令218)對用戶可用。通常,主機程序會使所有非管理小命令234及其自己的主機小命令218可用。此外,主機程序會使管理小命令234的一個子集可用,諸如處理進程、磁盤等的小命令。因此,一旦主機程序使小命令的子集可用,管理工具框架被有效地嵌入到對應(yīng)的應(yīng)用程序內(nèi)。處理繼續(xù)前行至框704。在框704,通過特定應(yīng)用程序獲得輸入。如上所述,輸入可采取諸如命令行、腳本、語音、GUI等數(shù)種形式。例如,當經(jīng)由命令行獲得輸入,則從輸入到鍵盤上的鍵擊檢索輸入。對于GUI主機,則基于與GUI相關(guān)聯(lián)的輸入機制組成串。處理在框706繼續(xù)。在框706,向管理工具框架內(nèi)的其它組件提供該輸入供處理。主機程序可將輸入直接轉(zhuǎn)發(fā)給諸如語法分析器等其它組件?;蛘撸鳈C程序可經(jīng)由其主機小命令中的一個來轉(zhuǎn)發(fā)輸入。主機小命令可將其特定類型的輸入(例如,語音)轉(zhuǎn)化為一類由管理工具框架識別的輸入(例如,文本串、腳本)。例如,取決于語音輸入的內(nèi)容,語音輸入可被轉(zhuǎn)換成腳本或命令行串。因為每個主機程序負責將其輸入類型轉(zhuǎn)換成由管理工具框架識別的輸入,因此管理工具框架能接受來自任意數(shù)量的各種主機組件的輸入。此外,管理工具框架提供一組豐富的實用程序,當經(jīng)由其小命令中的一個轉(zhuǎn)發(fā)輸入時,該組實用程序執(zhí)行數(shù)據(jù)類型間的轉(zhuǎn)換。由其它組件對輸入執(zhí)行的處理在下文聯(lián)合若干其它附圖描述。主機處理在判定框708繼續(xù)。在判定框708,判定是否接收到附加輸入的請求。如果負責處理輸入的其它組件之一需要來自用戶的附加信息來完成其處理,則可能發(fā)生這種情況。例如,可能需要密碼以訪問某些數(shù)據(jù)、可能需要特定行動的確認等等。對于某些類型的主機程序(例如,語音郵件),諸如此類的請求可能不恰當。因此,主機程序可串行化狀態(tài)、掛起狀態(tài)、并發(fā)送通知,而不是向用戶查詢附加信息,從而稍后該狀態(tài)可重新開始,并繼續(xù)輸入的執(zhí)行。在另一變體中,主機程序可在預定時間段之后提供一默認值。如果收到對附加輸入的請求,處理回到框704,獲得附加輸入。處理隨即如上所述繼續(xù)經(jīng)過框706和708。如果未收到對附加輸入的請求,且輸入已被處理,則處理繼續(xù)前進至框710。在框710,從管理工具框架內(nèi)的其它組件接收到結(jié)果。結(jié)果可包括出錯消息、狀態(tài)、進度、等等。結(jié)果是由管理工具框架內(nèi)的主機小命令識別和處理的對象形式。如將在以下描述的,為每個主機小命令編寫的代碼非常小。因此,無需大量開發(fā)成本中的投資,即可顯示一組豐富的輸出。處理在框712繼續(xù)。在框712,可查看結(jié)果。主機小命令將結(jié)果轉(zhuǎn)化為主機程序支持的顯示樣式。例如,返回的對象可由GUI主機程序使用諸如圖標、吠犬(barkingdog)等圖形描繪來顯示。主機小命令為數(shù)據(jù)提供默認格式和輸出。在可任選地顯示結(jié)果后,即完成了主機處理。用于處理輸入的示例性過程流程現(xiàn)在描述用于處理命令串的示例性過程。圖8是圖示通過圖2中所示的管理工具框架內(nèi)的語法分析器220和核心引擎224處理命令串850的功能流程圖。該示例性命令串850將若干命令(即,proeess命令860、where命令862、sort命令864、以及table命令866)排入管道。命令行850可將輸入?yún)?shù)傳遞給任何命令(例如,“handlecount>400”被傳遞給where命令862)。注意,處理命令860不具有任何相關(guān)聯(lián)的輸入?yún)?shù)。語法分析器220將可分析語法的流(例如,命令串850)語法分析成組成部分820-826(例如,where部分822)。每個部分820-826與小命令830-836之一相關(guān)聯(lián)。語法分析器220和引擎224執(zhí)行諸如語法分析、參數(shù)確認、數(shù)據(jù)生成、參數(shù)處理、參數(shù)編碼、和參數(shù)文檔編制等各種處理。因為語法分析器220和引擎224對命令行上的輸入?yún)?shù)執(zhí)行公共功能,管理工具框架200能向用戶發(fā)放一致的出錯消息。應(yīng)當認識到,可執(zhí)行小命令830-836和現(xiàn)有管理環(huán)境中的命令相比,需要更少的代碼。每個可執(zhí)行小命令830-836用其各自的組成部分820-826標識。此外,每個可執(zhí)行小命令830-836將作為輸入對象所輸入(由箭頭841、843和845表示)的對象輸出(由箭頭840、842、844和846表示)到下一管線化的小命令??赏ㄟ^向?qū)ο髠鬟f引用(例如,句柄)來輸入這些對象??蓤?zhí)行小命令830-836可隨即對傳入的對象執(zhí)行額外的處理。圖9是更詳細地示出命令串的處理的邏輯流程圖。命令串的處理開始于框901,其中語法分析器或腳本引擎識別輸入內(nèi)的命令串。一般而言,核心引擎執(zhí)行小命令的數(shù)據(jù)流的建立與定序。對一個小命令的建立與定序在下文描述,但它可應(yīng)用于管道中的每個小命令。處理在框904繼續(xù)。在框904,標識出小命令??赏ㄟ^注冊來標識小命令。核心引擎確定小命令是本地的還是遠程的。小命令可在以下位置執(zhí)行1)在管理工具框架的應(yīng)用程序域內(nèi);2)在和管理工具框架同一進程的另一應(yīng)用程序域內(nèi);3)在同一計算設(shè)備上的另一進程內(nèi);或者4)在遠程計算設(shè)備內(nèi)。在同一進程內(nèi)操作的小命令間的通信是通過對象進行的。在不同進程內(nèi)操作的小命令間的通信是通過串行化的結(jié)構(gòu)化數(shù)據(jù)格式進行的。一個示例性串行化的結(jié)構(gòu)化數(shù)據(jù)格式是基于可擴展標記語言(XML)。處理在框906繼續(xù)。在框906,創(chuàng)建小命令對象的實例。創(chuàng)建小命令的實例的示例性過程在下文結(jié)合圖10描述。一旦創(chuàng)建了小命令對象,處理在框908繼續(xù)。在框908,填充與小命令對象相關(guān)聯(lián)的屬性。如上所述,開發(fā)者在小命令類內(nèi)或外部源內(nèi)聲明屬性。簡單地說,管理工具框架會基于為該屬性所聲明的名稱和類型,將傳入對象譯解為從小命令類實例化的小命令。如果類型不同,可經(jīng)由擴展數(shù)據(jù)類型管理器強制類型。如較早所提及的,在排入管道的命令串中,每個小命令的輸出可以是對象句柄的列表。下一個小命令可輸入此對象句柄的列表、執(zhí)行處理、并將另一個對象句柄列表傳遞給下一個小命令。此外,如圖6中所示,可將輸入?yún)?shù)指定為來自命令行。填充與小命令相關(guān)聯(lián)的屬性的一種示例性方法將在下文結(jié)合圖11描述。一旦填充了小命令,處理在框910繼續(xù)。在框910,執(zhí)行小命令??偟膩碚f,由小命令提供的處理被執(zhí)行至少一次,包括對小命令的每個輸入對象的處理。因此,如果小命令是排入管道的命令串中的第一個小命令,則處理被執(zhí)行一次。對于后續(xù)的小命令,對傳遞給小命令的每個對象執(zhí)行處理。一種執(zhí)行小命令的方法在下文結(jié)合圖5描述。當輸入?yún)?shù)僅來自于命令行時,小命令的執(zhí)行使用基本小命令范例提供的默認方法。一旦完成執(zhí)行小命令,處理前進至框912。在框912,小命令被清除。這包括為負責解除分配存儲器等的相關(guān)聯(lián)小命令對象調(diào)用析構(gòu)函數(shù)。命令串的處理隨后完成。用于創(chuàng)建小命令對象的示例性過程。圖10所示是用于創(chuàng)建適于在圖9中所示的命令串的處理內(nèi)使用的小命令對象的示例性過程的邏輯流程圖。在這點上,已開發(fā)了小命令數(shù)據(jù)結(jié)構(gòu),并指定了屬性和期望輸入?yún)?shù)。小命令已被編譯和注冊。在注冊期間,類名(即,小命令名)被寫入注冊存儲,并且與該小命令相關(guān)聯(lián)的元數(shù)據(jù)已被存儲。過程1000在框1001開始,其中語法分析器接收到指示小命令的輸入(例如,鍵擊)。語法分析器可通過從注冊表內(nèi)查找該輸入,并將該輸入與已注冊的小命令之一相關(guān)聯(lián),來識別該輸入為小命令。處理前進至框1006。在前進至框1006之前,可讀入與該小命令對象類相關(guān)聯(lián)的元數(shù)據(jù)。元數(shù)據(jù)包括任何與該小命令相關(guān)聯(lián)的偽指令。偽指令可應(yīng)用于小命令本身或應(yīng)用于一個或多個參數(shù)。在小命令注冊期間,注冊代碼將元數(shù)據(jù)注冊到持久存儲中。元數(shù)據(jù)可以用串行化格式存儲在XML文件中、存儲外部數(shù)據(jù)庫中,等等。每個類別的偽指令在不同的階段處理。每個元數(shù)據(jù)偽指令處理其自己的出錯處理。在框1006,基于已標識的小命令類實例化小命令對象。處理在框1008繼續(xù)。在框1008,獲得關(guān)于小命令的信息。這可通過反射或其它手段發(fā)生。該信息關(guān)于期望的輸入?yún)?shù)。如上所述,聲明為公有的參數(shù)(例如,公有串Name630)對應(yīng)于可在命令行上的命令串中指定,或在輸入流中提供的期望輸入?yún)?shù)。管理工具框架通過圖13中所描述的擴展類型管理器,提供公共接口以供將信息返回(在需要的基礎(chǔ)上)給調(diào)用者。處理在框1010繼續(xù)。在框1010,應(yīng)用適用性偽指令。適用性偽指令確保類被用于某些機器角色和/或用戶角色中。例如,某些小命令僅可由域管理員使用。如果在適用性偽指令之一中指定的約束未被滿足,就發(fā)生錯誤。過程在框1012繼續(xù)。在框1012,使用元數(shù)據(jù)。在處理中的這個點上,還未輸入整個命令串。然而,管理工具框架知道可用的小命令。一旦確定了小命令,管理工具框架通過對小命令對象進行反射得知所允許的輸入?yún)?shù)。因此,一旦提供了小命令名的無岐義部分,管理工具框架可自動完成小命令,并且一旦在命令行上打入輸入?yún)?shù)的無岐義部分,則自動完成輸入?yún)?shù)。一旦輸入?yún)?shù)的部分可無岐義地標識輸入?yún)?shù)之一,自動完成可立即發(fā)生。此外,自動完成也可在小命令名與操作數(shù)上發(fā)生。處理在框1014繼續(xù)。在框1014,過程等待,直到輸入了小命令的輸入?yún)?shù)。一旦用戶諸如通過擊回車鍵等來指示命令串的結(jié)束,這即可發(fā)生。在腳本中,新行指示命令串的結(jié)束。此等待可包括從用戶獲得關(guān)于參數(shù)的附加信息及應(yīng)用其它偽指令。當小命令是排入管道的參數(shù)之一,處理可立即開始。一旦提供了必需的命令串和輸入?yún)?shù),處理即完成。用于填充小命令的示例性過程用于填充小命令的示例性過程在圖11中示出,并于現(xiàn)在聯(lián)合圖5進行描述。在一個管理工具框架中,核心引擎執(zhí)行為小命令填充參數(shù)的處理。在創(chuàng)建了小命令的實例后,處理在框1101開始。處理繼續(xù)前進至框1102。在框1102,檢索在小命令內(nèi)聲明的參數(shù)(例如,ProcessName)?;谛∶畹穆暶鳎诵囊孀R別傳入輸入對象將提供名為“ProcessName”的屬性。如果傳入屬性的類型與在參數(shù)聲明中指定的類型不同,將經(jīng)由擴展類型管理器強制該類型。強制數(shù)據(jù)類型的過程在下面題為“示例性擴展類型管理器處理”的小節(jié)中解釋。處理繼續(xù)前進至框1103。在框1103,獲得與參數(shù)相關(guān)聯(lián)的屬性。該屬性標識了參數(shù)的輸入源是命令行還是來自管道。處理前進至判定框1104。在判定框1104,判定屬性是否指定輸入源為命令行。如果輸入源是命令行,處理在框1109繼續(xù)。否則,處理在判定框1105繼續(xù)。在判定框1105,判定是該使用在聲明中指定的屬性名,還是應(yīng)該使用屬性名的映射。此判定基于命令輸入是否為參數(shù)指定映射。以下一行示出參數(shù)“ProcessName”到傳入對象的“foo”成員的示例性映射$get-process|where{$_.hcount-gt500}|stop-process-ProcessName<-foo處理在框1106繼續(xù)。在框1106,應(yīng)用該映射。該映射將期望的參數(shù)名從“ProcessName”替換為“foo”,隨后由核心引擎使用該參數(shù)名以對傳入對象進行語法分析,并標識正確的期望參數(shù)。處理在框1108繼續(xù)。在框1108,查詢擴展類型管理器,以定位傳入對象內(nèi)的參數(shù)的值。如聯(lián)合擴展類型管理器所解釋的,擴展類型管理器取參數(shù)名,并且使用反射來以參數(shù)名標識傳入對象內(nèi)的參數(shù)。如果需要,擴展類型管理器還可為參數(shù)執(zhí)行其它處理。例如,擴展類型管理器可通過上述的轉(zhuǎn)換機制,將數(shù)據(jù)類型強制為期望的數(shù)據(jù)類型。處理繼續(xù)前進至判定框1110?;氐娇?109,如果屬性指定輸入源為命令行,則從命令行獲取數(shù)據(jù)。從命令行獲取數(shù)據(jù)可經(jīng)由擴展類型管理器來執(zhí)行。處理隨即前進至判定框1110。在判定框1110,判定是否有另一個期望的參數(shù)。如果有另一個期望的參數(shù),處理回到框1102并如上述前進。否則,處理完成并返回。因此,如圖所示,小命令擔當用于切碎(shred)傳入數(shù)據(jù)分成碎片以獲取期望的參數(shù)的模板。此外,無需知道提供期望參數(shù)的值的傳入對象的類型即可獲得期望的參數(shù)。這與傳統(tǒng)的管理環(huán)境相當不同。傳統(tǒng)的管理環(huán)境是緊捆綁的,并且要求在編譯時知道對象的類型。此外,在傳統(tǒng)環(huán)境中,期望的參數(shù)將通過值或通過引用傳遞到函數(shù)中。因而,本語法分析(例如,“切碎”)機制允許程序員指定參數(shù)的類型,而不要求他們明確地知道如何獲得這些參數(shù)的值。例如,給定以下小命令Foo的聲明classFooCmdlet{stringName;BoolRecurse;}命令行句法可以是以下任何一種$Foo-Name(string)-RecurseTrue$Foo-Name<string>-RecurseTrue$Foo-Name(string)為了產(chǎn)生期望的句法,這組規(guī)則可由系統(tǒng)管理員修改。此外,語法分析器可支持多組規(guī)則,從而用戶可使用一種以上的句法。本質(zhì)上,與小命令結(jié)構(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īng)的成員即被填充。在成員被填充時,擴展類型管理器提供輸入?yún)?shù)類型的處理。簡單地說,該處理可包括屬性路徑機制、關(guān)鍵字機制、比較機制、轉(zhuǎn)換機制、通配符機制、關(guān)系機制以及屬性組機制。這些機制的每一個在以下題為“擴展類型管理器處理”一節(jié)中詳細描述,該節(jié)還包括說明性例子。用于執(zhí)行小命令的示例性過程用于執(zhí)行小命令的示例性過程在圖12中示出,并將于現(xiàn)在進行描述。在一個示例性管理工具環(huán)境中,核心引擎執(zhí)行小命令。如上所述,為每個輸入對象執(zhí)行第二方法540內(nèi)的代碼542。處理在框1201開始,其中小命令已被填充。處理在框1202繼續(xù)。在框1202,從代碼542檢索語句以供執(zhí)行。過程在框1206繼續(xù)。在框1206,該語句被處理。處理隨即前進至判定框1208。在框1208,判定代碼是否包括另一語句。如果有另一語句,處理返回框1202以獲取下一語句并如上所述繼續(xù)。否則,處理繼續(xù)前進至判定框1214。在判定框1214,判定是否有另一輸入對象要處理。如果有另一輸入對象,處理繼續(xù)前進至框1216,用來自下一個對象的數(shù)據(jù)來填充小命令。圖10中所描述的填充過程對下一個對象執(zhí)行。處理隨即返回框1202并如上述繼續(xù)。一旦處理了所有對象,執(zhí)行小命令的過程完成并返回。示例性擴展類型管理器處理如聯(lián)合圖13在上文簡要提及的,擴展類型管理器可對所提供的對象執(zhí)行附加處理。附加處理框可在語法分析器220、腳本引擎222或管道處理器402請求時執(zhí)行。附加處理包括屬性路徑機制、關(guān)鍵字機制、比較機制、轉(zhuǎn)換機制、通配符機制、關(guān)系機制以及屬性組機制。本領(lǐng)域技術(shù)人員應(yīng)理解,擴展類型管理器還可以用其它處理來擴展,而不會偏離要求保護的本發(fā)明的范疇。現(xiàn)在描述每個附加處理機制。首先,屬性路徑機制允許串導航對象的屬性。在現(xiàn)有的反射系統(tǒng)中,查詢可查詢對象的屬性。然而,在本擴展類型管理器中,可指定提供到對象的相繼屬性的導航路徑的串。以下是屬性路徑的說明性句法A.B.C.D。每個分量(例如,A、B、C和D)包含可表示屬性、有參數(shù)的方法、無參數(shù)的方法、字段、XPATH等的串。XPATH指定查詢串以搜索元素(例如,“/FOO@=13”)。在串內(nèi),可包括特定字符以明確指示分量的類型。如果串不包含特定字符,則擴展類型管理器可執(zhí)行查找以確定分量的類型。例如,如果分量A是對象,則擴展類型管理器可查詢B是否為該對象的屬性、該對象的方法、該對象的字段、或?qū)傩越M。一旦擴展類型管理器為B標識了類型,即根據(jù)該類型執(zhí)行處理。如果分量不是以上類型之一,則擴展類型管理器可進一步查詢擴展源以確定是否有將類型A轉(zhuǎn)換為類型B的轉(zhuǎn)換函數(shù)?,F(xiàn)在將使用說明性命令串,并顯示相應(yīng)的輸出來描述這些及其它查找。以下是包括屬性路徑的說明性串$get-process|where{$_.handlecount-gt500}|format-tablename.toupper,ws.kb,exe*.ver*.description.tolower.trunk(30)在以上說明性串中,有3條屬性路徑(1)“name.toupper”;(2)“ws.kb”;以及(3)“exe*.ver*.description.tolower.trunk(30)”。在描述這些屬性路徑之前,應(yīng)當注意“name”、“ws”和“exe”指定了表屬性。此外,應(yīng)當注意,這些屬性的每一個都是傳入對象的直接屬性,該傳入對象最初由“get/process”(獲取/進程)生成,然后通過各種小命令排入管道。現(xiàn)在描述這3個屬性路徑的每一個所涉及的處理。在第一個屬性路徑(即,“name.toupper”)中,name是傳入對象的直接屬性,并且其自身也是對象。擴展類型管理器使用上述的優(yōu)先級查找來查詢系統(tǒng),以確定toupper的類型。擴展類型管理器發(fā)現(xiàn)toupper不是屬性。然而,toupper可以是由串類型繼承、在串內(nèi)將小寫字母轉(zhuǎn)換到大寫字母的方法?;蛘撸瑪U展類型管理器可查詢擴展元數(shù)據(jù)以確定是否有能將name對象轉(zhuǎn)換為大寫的任何第三方代碼。一找到分量類型,即根據(jù)該分量類型來執(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.trunk(30)”),有若干個分量。第一個分量(“exe*”)是傳入對象的直接屬性,而且也是對象。為了處理第二個分量(“ver*”),擴展類型管理器再一次在查找查詢往下繼續(xù)。“exe*”對象不具有“ver*”屬性或方法,因此擴展類型管理器查詢擴展元數(shù)據(jù)以確定是否有任何將可執(zhí)行名稱轉(zhuǎn)換為版本的任何已注冊代碼。對于此例,此類代碼存在。該代碼可取可執(zhí)行名稱串并用其來打開文件,然后訪問版本塊對象,并返回該版本塊對象的描述屬性(第三分量(“description”))。擴展類型管理器隨即為第四分量(“tolower”)和第五分量(“trunk(30)”)執(zhí)行這個同樣的查找機制。因此,如所示,擴展類型管理器可對命令串執(zhí)行相當復雜的處理,而管理員無需編寫任何特殊代碼。表1示出為說明性串生成的輸出。Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18,556officeoutlookMSMSGS13,248messenger表1另一種查詢機制1324包括關(guān)鍵字。關(guān)鍵字標識了使數(shù)據(jù)類型的實例唯一的一個或多個屬性。例如,在數(shù)據(jù)庫中,一列可被標識為能唯一地標識每行(例如,社會保險號)的關(guān)鍵字。關(guān)鍵字被存儲在與數(shù)據(jù)類型相關(guān)聯(lián)的類型元數(shù)據(jù)1340內(nèi)。此關(guān)鍵字隨后可由擴展類型管理器在處理該數(shù)據(jù)類型的對象時使用。該數(shù)據(jù)類型可以是擴展數(shù)據(jù)類型或現(xiàn)有數(shù)據(jù)類型。另一種查詢機制1324包括比較機制。簡單地說,比較機制比較兩個對象,以下將聯(lián)合圖14-23進行詳細描述。如果兩個對象直接支持比較功能,則執(zhí)行該直接支持的比較功能。然而,如果兩個對象都不支持比較功能,則擴展類型管理器可在類型元數(shù)據(jù)中查找支持在這兩個對象間進行比較的已注冊代碼。下面示出調(diào)用比較機制的一系列說明性命令行串,以及表2中對應(yīng)的輸出。$$a=$(get-date)$start-sleep5$$b=$(get-date)$compare-time$a$bTicks51196579Days0Hours0Milliseconds119Minutes0Seconds5TotalDays5.92552997685185E-05TotalHours0.00142212719444444TotalMilliseconds5119.6579TotalMinutes0.0853276316666667TotalSeconds5.1196579表2compare-time小命令被編寫成比較兩個日期時間(datetime)對象。在此例中,DateTime對象支持IComparable接口。另一種查詢機制1324包括轉(zhuǎn)換機制。擴展類型管理器允許注冊聲明其執(zhí)行特定轉(zhuǎn)換的能力的代碼。然后,當輸入類型A的對象,且小命令指定類型B的對象時,擴展類型管理器可使用已注冊轉(zhuǎn)換之一來執(zhí)行轉(zhuǎn)換。為了將類型A強制為類型B,擴展類型管理器執(zhí)行一系列轉(zhuǎn)換。上述屬性路徑(“ws.kb”)示出了轉(zhuǎn)換機制。另一種查詢機制1324包括通配符機制。通配符指串內(nèi)的通配字符。通配符機制輸入具有通配符字符的串并生成一組對象。擴展類型管理器允許注冊指定通配符處理的代碼。上述屬性路徑(“exe*.ver*.description.tolower.trunk(30)”)示出了通配符機制。已注冊過程可為文件名、文件對象、傳入屬性等等提供通配符處理。另一種查詢機制1324包括屬性組機制。屬性組機制允許為一組屬性定義名稱。管理員隨后可在命令串內(nèi)指定該名稱以獲得該組屬性。屬性組可以用各種方式來定義。在一種方式中,可輸入諸如“?”等預定義參數(shù)作為小命令的輸入?yún)?shù)。操作環(huán)境一識別出該預定義參數(shù),即列出傳入對象的所有屬性。該列表可以是允許管理員容易地檢查(例如,“點擊”)期望的屬性并命名該屬性組的GUI。屬性組信息隨即被存儲在擴展元數(shù)據(jù)中。以下示出調(diào)用屬性組機制的說明性串,以及表3中的對應(yīng)輸出。$get-process|where{$_.handlecount-gt500}|format-tableconfig在此說明性串中,定義了名為“config”的屬性組以包括名稱屬性、進程id屬性(Pid)以及優(yōu)先級屬性。關(guān)于此表的輸入在以下示出。NamePidPrioritvETClient3528Normalcsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一種查詢機制1324包括關(guān)系機制。與支持一種關(guān)系(即,繼承)的傳統(tǒng)類型系統(tǒng)形成對比,此關(guān)系機制機制支持表達類型間一種以上的關(guān)系。這些關(guān)系也被注冊。關(guān)系可包括尋找對象所消耗的項,或?qū)ふ蚁膶ο蟮捻?。擴展類型管理器可訪問描述各種關(guān)系的本體。使用擴展元數(shù)據(jù)及代碼,可描述用于訪問諸如OWL、DAWL等任何本體服務(wù)的規(guī)范。以下是使用關(guān)系機制的示例性串的一部分.OWL”string”?!癘WL”標識符標識本體服務(wù),“string”指定該本體服務(wù)內(nèi)的特定串。因此,擴展類型管理器可訪問由本體服務(wù)提供的類型。第三節(jié)示例性比較技術(shù)圖14-23示出可在以上第二節(jié)中所討論的基于對象的管理工具框架內(nèi)操作的本比較技術(shù)的示例性實施例。本比較技術(shù)提供優(yōu)于現(xiàn)有比較技術(shù)的若干優(yōu)勢。例如,本比較技術(shù)允許不同數(shù)據(jù)類型的對象彼此進行比較。此外,來自該比較技術(shù)的結(jié)果可被自動地用作可最終修補問題的另一操作的輸入。在閱讀以下詳細描述后,這些及其它優(yōu)勢將變得顯而易見。圖14示出在圖2所示的基于對象的管理框架內(nèi)實現(xiàn)的比較小命令的示例性句法的實施例。第一句法1400對應(yīng)于在圖16的流程圖中示出、并聯(lián)合其描述的基于關(guān)鍵字的比較。第二句法1401對應(yīng)于在圖17的流程圖中示出、并聯(lián)合其描述的基于順序的比較。為了區(qū)分這兩種比較技術(shù),當調(diào)用compare-object(比較對象)小命令時,在命令串中包括KeyBased(基于關(guān)鍵字)參數(shù)1406或OrderBased(基于順序)參數(shù)1408。KeyBased參數(shù)1406包括開關(guān)(例如,“-KeyBased”)和關(guān)鍵字名。關(guān)鍵字名標識要比較哪些對象。于是,僅具有與該關(guān)鍵字名相關(guān)聯(lián)的屬性的對象被包括到比較中。關(guān)鍵字名可以是單個屬性或一組屬性。第一句法1400和第二句法1401都包括其它參數(shù)。一般而言,大多數(shù)參數(shù)包括開關(guān)和數(shù)據(jù)。開關(guān)表示當調(diào)用compare-object小命令時在命令串內(nèi)出現(xiàn)的預定義文本。數(shù)據(jù)則取決于開關(guān)。例如,某些開關(guān)可能與布爾數(shù)據(jù)相關(guān)聯(lián)。其它開關(guān)可能與屬性相關(guān)聯(lián)。某些開關(guān)可能不隨其相關(guān)聯(lián)數(shù)據(jù)被包括到命令串內(nèi)。當這種情況發(fā)生,輸入到命令串中的數(shù)據(jù)可變?yōu)橐蕾囉陧樞颍蛑辽僖蕾囉谠谠摫容^小命令的定義中為輸入?yún)?shù)指定的任何屬性?,F(xiàn)在分別描述這些其它參數(shù)的每一個。ReferenceObject(參考對象)參數(shù)1402包括“-ReferenceObject”開關(guān)和參考對象。該參考對象標識將由其它對象對照來比較的一個或多個對象。ComparisonObject(比較對象)參數(shù)1404包括“-ComparisionObject”開關(guān)和比較對象。該比較對象標識對照參考對象來比較的一個或多個對象。如將示出的,可從基于對象的管道提供比較對象。因此,參考對象可被用作標準,并與任何數(shù)量的比較對象進行比較。例如,參考對象可以是計算設(shè)備的標準配置,每個比較對象可對應(yīng)于系統(tǒng)管理員希望類似于標準配置進行配置的不同計算設(shè)備。Property(屬性)參數(shù)1410包括“-Property”開關(guān)和屬性名。屬性名可列出一個或多個屬性,或者列出一組屬性。Property參數(shù)1410允許比較特定屬性,而不是比較對象內(nèi)的所有屬性。這個指定特定屬性的能力將被報告的非重要差異的數(shù)量最小化。例如,如果進程A當前未運行(在下文稱作今日進程A),但它在昨天工作(在下文稱作昨日進程A),Property參數(shù)1410允許已知在今日進程A和昨日進程A間不同的屬性(例如,CPU時間,工作區(qū))不被包括在比較內(nèi)。因此,本比較技術(shù)的輸出提供信息性更高的信息以幫助判定故障的原因。CaseSensitive(大小寫敏感)參數(shù)1412包括“-CaseSensitive”開關(guān)和用于指示“False(假)”或“True(真)”的可任選布爾值。當包括具有“False”值的“-CaseSensitive”開關(guān),則不考慮參考對象和比較對象內(nèi)各個串的大小寫。相反,當指定“True”值,則在確定差異時考慮各個串的大小寫。當參考對象和比較對象是串類型時,可利用CaseSensitive參數(shù)1412。對于其它數(shù)據(jù)類型,可忽略CaseSensitive參數(shù)1412。Culture(文化)參數(shù)1414包括“-Culture”開關(guān)和文化設(shè)置值。所指定的文化設(shè)置值覆蓋當前文化設(shè)置。將參考對象和比較對象視為具有同樣的文化。當參考對象和比較對象是串類型時,可利用Culture參數(shù)1414,并確保用同種語言執(zhí)行文本的比較。對于其它數(shù)據(jù)類型,可忽略Culture參數(shù)1414。IgnoreWhiteSpace(忽略空格)參數(shù)1416包括“-IgnoreWhiteSpace”開關(guān)和可任選布爾值。當該布爾值為“false”,在比較期間空格被視為文本的一部分。相反,如果該布爾值為“true”,則在比較期間忽略文本內(nèi)的空格。當參考對象和比較對象是串類型時,可利用IgnoreWhiteSpace參數(shù)1416。對于其它數(shù)據(jù)類型,可忽略IgnoreWhiteSpace參數(shù)1416。RecordDifference(記錄差異)參數(shù)1418包括“-RecordDifference”開關(guān)和可任選布爾值。當該布爾值為“false”,參考對象和比較對象間的差異不被發(fā)送到輸出。相反,當該布爾值為“true”,差異被發(fā)送到輸出。RecordEqual(記錄相等)參數(shù)1420包括“-RecordEqual”開關(guān)和可任選布爾值。當該布爾值為“false”,參考對象和比較對象具有同樣值的屬性不被發(fā)送到輸出。當該布爾值為“true”,參考對象和比較對象具有相同值的屬性被發(fā)送到輸出。PassThru(通過)參數(shù)1422包括“-PassThru”開關(guān)和可任選布爾值。當該布爾值為“false”,該比較輸出關(guān)鍵字名、屬性值、相等指示符以及副指示符(sideIndicator)。副指示符圖解地指示是輸出與參考對象相關(guān)聯(lián),還是輸出與比較對象相關(guān)聯(lián)。例如,左副指示符“<=”指示后面的信息是來自參考對象。右副指示符“=>”指示后面的信息是來自比較對象。相等副標識符“==”指示比較對象和參考對象具有相同的值。當該布爾值為“true”,參考對象和比較對象都被注釋并輸出。注意到,各種符號或圖形都可用于副指示符,而不會偏離本比較技術(shù)的范疇。圖15提供了示出調(diào)用比較小命令的命令串、并示出所生成的輸出的例子。例子1510和1520都是基于表1502和表1504所示的信息示例。表1502和1504都有兩行和兩列進程名(ProcessName)和句柄計數(shù)(handlecount)。第一行對應(yīng)于進程名為“MSH”的進程,第二行對應(yīng)于進程名為“Calc”的進程。在表1502中,MSH的句柄計數(shù)為100,Calc的句柄計數(shù)為100。在表1504中,MSH的句柄計數(shù)仍為100,但Calc的句柄計數(shù)為500。作為說明,假設(shè)表1504中的信息比表1502中的信息晚生成10秒。在第一個例子1510中,在命令行上輸入命令“$a=get-process”。如上文所解釋的,當基于對象的管理框架遇到此命令,從get-process小命令生成的信息(例如,表1502)被分配給對象a。在10秒后,輸入了以下的命令compare-object-ReferenceObject$a-ComparisonObject$(get-process)-KeyBasedName-PropertyHandlecount當基于對象的管理框架遇到以上命令,參考對象是與表1502中的信息相關(guān)聯(lián)的對象“a”。比較對象是從生成表1504中的信息的get-process小命令生成的對象。在命令串和信號中包括KeyBased(基于關(guān)鍵字)參數(shù)1406,以對具有名為“ProcessName”(進程名)的屬性的對象執(zhí)行基于關(guān)鍵字的比較。該命令串還包括將“Handlecount”(句柄計數(shù))標識為要比較的屬性的Property(屬性)參數(shù)1410。因此,對于每個具有ProcessName屬性的比較對象,將其handlecount屬性與參考對象中的handlecount屬性相比較。輸出1512隨后指示MSH進程名在參考對象中具有同樣的信息。輸出1512也指示Calc進程名在參考對象和比較對象中具有不同的信息。在例子1520中,第一命令和例子1510中的一樣,但第二命令如下compare-object-ReferenceObject$a-ComparisonObject$(get-process)-KeyBasedName-PropertyHandlecount-RecordDifferencefalse-RecordEqual因此,示例1520包括RecordDifference開關(guān)和RecordEqual開關(guān)??蓪ecordDifference開關(guān)設(shè)為假,并將RecordEqual開關(guān)設(shè)為真。如上文所解釋的,有了這些開關(guān),輸出1522不列出與參考對象或者比較對象相關(guān)聯(lián)的Calc進程的句柄計數(shù),因為RecordEqual參數(shù)指定僅輸出相等的屬性。盡管例子1510和1520示出了compare-object小命令的操作,本領(lǐng)域技術(shù)人員應(yīng)當理解,可使用各種開關(guān)和其它小命令來表示任何數(shù)量的命令串以獲得有用的信息。此外,如以上第二節(jié)中所描述的,一個小命令的結(jié)果可用管道運輸?shù)狡渌∶?。因而,因為compare-object小命令創(chuàng)建了標識每個對象及其差異的差異記錄,此差異記錄可由其它小命令進一步操縱。這些其它小命令可提供諸如過濾、報告、填數(shù)據(jù)庫或分解差異記錄中列出的差異的控制循環(huán)等處理。將差異記錄用管道運輸?shù)娇刂蒲h(huán)的能力極大地增強了本比較技術(shù)的有用性。此外,該比較技術(shù)可生成一個或多個輸出對象,它們以這些對象的完整語義在輸出對象中可用的方式來封裝原始參考對象和原始比較對象。在此實施例中,可將寫到差異記錄的信息作為注釋添加到原始參考對象。擴展類型管理器可執(zhí)行此加注??蓪⑤敵鰧ο笈渲贸砂▍⒖紝ο蠛捅容^對象、有差異的對象、匹配的對象等的每一個。因為本比較技術(shù)具有生成封裝原始對象一部分的輸出對象的能力,所以可以先基于一組屬性來比較各原始對象,然后在基于另一組屬性對其進行處理,該另一組屬性可不包括來自第一組的任何屬性、或可包括其一部分。此外,差異指示符注釋允許后續(xù)處理基于其自身的需要來選擇它們自己的屬性組。由輸出封裝原始對象的對象提供的另一個優(yōu)點是可在輸出對象上調(diào)用由原始對象展現(xiàn)的查詢和控制方法。該比較技術(shù)的操作現(xiàn)在結(jié)合圖16-23的流程圖來描述。圖16所示是用于執(zhí)行基于關(guān)鍵字的比較過程的示例性過程的邏輯流程圖。該過程在框1601開始,并前進至框1602。在框1602,檢索參考對象。參考對象是在比較過程期間其它對象所對照來進行比較的對象。處理在判定框1604繼續(xù)。在判定框1604,判定參考對象是否包括與以KeyBased參數(shù)指定的關(guān)鍵字名相關(guān)聯(lián)的屬性。當有多個關(guān)鍵字時,參考對象包括與多個關(guān)鍵字的每一個相關(guān)聯(lián)的屬性。如果參考對象不包括指定的屬性,處理在判定框1610繼續(xù)。在進一步的改進中,在前進至框1610之前,可將參考對象添加到將基于隨命令所指定的參數(shù)發(fā)放的列表。否則,處理在判定框1606繼續(xù)。在判定框1606,檢查參考組以確定在參考組內(nèi)是否已存在具有同樣關(guān)鍵字值的參考對象。如果這樣的參考對象存在,處理在判定框1610繼續(xù)。否則,處理在判定框1608繼續(xù)。在框1608,將參考對象添加到參考組。處理隨即在判定框1610繼續(xù)。在判定框1610,確定是否有另一個參考對象在比較過程中使用。如果有另一個參考對象,處理返回到框1602并如上述的繼續(xù)。否則,將所有包含指定的一個或多個關(guān)鍵字的參考對象添加到參考組。處理在框1612繼續(xù)。在框1612,使用參考組中的每個參考對象和每個可用的比較對象來執(zhí)行比較。簡單地說,在參考對象和每個比較對象間對每個以Property參數(shù)指定的屬性進行比較,以下將聯(lián)合圖21進行詳細描述。在執(zhí)行此比較之后,處理隨即完成。圖21所示是適于在圖16的框1612中使用的、用于將每個比較對象與參考對象進行比較的示例性過程的流程圖。過程2100在框2101開始,并前進至框2102。在框2102,獲得比較對象。如上所述,可以有多個比較對象。因此,檢查每個比較對象以確定是否應(yīng)對照參考對象來比較它。處理在判定框2104繼續(xù)。在判定框2104,判定比較對象是否具有與關(guān)鍵字名相關(guān)聯(lián)的屬性。重要的是注意,可使用多個關(guān)鍵字。如果有多個關(guān)鍵字,參考對象和比較對象都必須具有與這多個關(guān)鍵字相關(guān)聯(lián)的屬性。如果比較對象不具有與關(guān)鍵字名相關(guān)聯(lián)的屬性,則處理前進至判定框2116,其中將比較對象添加到缺失列表,并且處理在以下描述的判定框2118繼續(xù)。如果在框2104的判定斷定比較對象的確具有與關(guān)鍵字名相關(guān)聯(lián)的屬性,處理在判定框2106繼續(xù)。在判定框2106,確定比較對象是否為具有該關(guān)鍵字值的第一個比較對象。如果它不是第一個比較對象,處理也在判定框2118繼續(xù)。否則,處理在判定框2108繼續(xù)。在判定框2108,確定在參考組內(nèi)是否存在具有同樣關(guān)鍵字值的參考對象。如果不存在這樣的參考對象,處理在框2114繼續(xù),其中發(fā)放僅比較對象記錄。僅比較對象記錄示意具有特定關(guān)鍵字的比較對象存在,但類似的參考對象不存在。如上所述,當將計算設(shè)備與標準設(shè)備進行比較時,此信息有助于通知潛在的配置問題。在發(fā)放僅比較對象記錄后,處理又在判定框2118繼續(xù)。然而,如果判定框2108的結(jié)果斷定參考對象的確存在,則處理在框2110繼續(xù)。在框2110,對參考對象和比較對象的屬性值進行比較。簡單地說,此比較對每個指定的屬性進行比較,以下將聯(lián)合圖22進行詳細描述。因此,如上所述,僅對關(guān)注的屬性進行比較,而不是要求對每個屬性進行比較。在比較了各屬性值之后,處理在框2112繼續(xù)。在框2112,從參考組移除參考對象。在此點上可移除參考對象,因為框2106檢查比較對象是否與已被處理的另一比較對象重復。移除參考對象便于在稍后發(fā)放結(jié)果時進行枚舉。因此,在檢索并比較了所有比較對象之后,如果在參考組中仍存在任何參考對象,這就標識了差異。處理在判定框2118繼續(xù)。在判定框2118,確定是否有另一個比較對象可供處理。如果有另一個比較對象,處理返回到框2102并如上述地繼續(xù)。然而,一旦所有比較對象都已被處理,則處理在框2120繼續(xù)。在框2120,發(fā)放比較的剩余結(jié)果。簡單地說,所發(fā)放的結(jié)果是基于聯(lián)合比較命令所指定的開關(guān),以下將聯(lián)合圖23進行詳細描述。處理隨即完成。圖22所示是適于在圖21中使用的、用于在參考對象和比較對象間比較屬性值的示例性過程的流程圖。該過程在框2201開始,并前進至框2202。在框2202,將比較對象中的指定屬性之一與參考對象中的對應(yīng)屬性進行比較。重要的是注意,參考對象和比較對象的數(shù)據(jù)類型不必相同。如果數(shù)據(jù)類型不同,則基于對象的管理框架的擴展類型管理器識別不同的數(shù)據(jù)類型,并以比較相似數(shù)據(jù)類型的方式將其轉(zhuǎn)換。因此,可將比較對象轉(zhuǎn)換成參考對象的數(shù)據(jù)類型。反過來,可將參考對象轉(zhuǎn)換成比較對象的數(shù)據(jù)類型。此外,為了執(zhí)行比較,每個指定屬性可被單獨轉(zhuǎn)換。因此,本比較技術(shù)可比較不同類型的對象。本比較技術(shù)將參考對象視為可與同樣被視為虛擬對象的比較對象相比較的虛擬對象。同樣重要的是注意,比較可包括模糊比較,從而在報告出錯前,參考對象和比較對象中屬性的值可在誤差界限之內(nèi)。例如,如果誤差界限被設(shè)置為1M字節(jié),則10MB和12MB的值產(chǎn)生差異。然而,10.5MB和11MB的值不產(chǎn)生差異。此模糊比較改善了信噪比。因此,實現(xiàn)模糊比較的比較技術(shù)提供了更好且更顯著有關(guān)的差異檢測??墒褂米鳛槊畲囊徊糠痔峁┑淖远x比較器,如“-compare-objectcolorCompare-ReferenceObject$a-ComparisonObject$b”,來實現(xiàn)模糊比較。對于此特定例子,colorCompare(色彩比較)可比較存儲不同顏色的文本串,從而“mossgreen”(苔綠色)與“sage”(灰綠色)被報告為相同。因此,自定義比較器允許在不同對象間更靈活地執(zhí)行比較。一旦比較了指定的屬性,處理在判定框2204繼續(xù)。在判定框2204,判定比較對象中的屬性值是否和參考對象中的屬性值相等。如果兩個值不相等,處理在框2210繼續(xù),其中可發(fā)放對于該指定屬性在比較對象和參考對象間的差異的差異記錄。此差異記錄取決于隨比較命令指定的參數(shù)。處理在判定框2212繼續(xù)。然而,如果比較對象和參考對象中的屬性值相等,處理在判定框2206繼續(xù)。在判定框2206,判定對比較命令的調(diào)用是否指定要輸出相等的對象。如上所述,實現(xiàn)此判定的一種方法是使用圖14中所示的RecordEqual(記錄相等)參數(shù)1420。如果不應(yīng)在輸出中包括相等的對象,則處理在判定框2212繼續(xù)。否則,處理在框2208繼續(xù)。在框2208,為比較對象發(fā)放相等記錄。相等記錄指示比較對象的值和屬性。處理在判定框2212繼續(xù)。在判定框2212,判定是否有需要比較的另一個指定屬性。如果有另一個屬性,處理返回到框2202并如上述地繼續(xù)。否則,處理完成并結(jié)束。圖23所示是適于在圖21中使用的、用于發(fā)放結(jié)果的示例性過程的流程圖。過程2300在框2301開始,并前進至框2302。在框2302,枚舉參考組中的對象,并發(fā)放“僅參考對象”記錄。因此,這輸出了不具有對應(yīng)比較對象的參考對象。處理在判定框2304繼續(xù)。在判定框2304,判定是否應(yīng)輸出在缺失列表內(nèi)標識的對象。如果不應(yīng)輸出缺失關(guān)鍵字對象,則處理完成。否則,處理在框2306繼續(xù)。在框2306,發(fā)放缺失列表內(nèi)標識的參考對象。處理隨即完成并返回。圖17所示是用于執(zhí)行基于順序的比較過程的示例性過程的邏輯流程圖。對于某些管理任務(wù),基于順序的比較優(yōu)于基于關(guān)鍵字的比較。例如,當比較訪問控制列表(ACL)時,基于順序的比較是較佳的。因為ACL指示用戶的許可與訪問權(quán)限,所以對這些權(quán)限進行分析的順序是很重要的。處理在框1701開始,并前進至框1702。在框1702,獲取參考對象。處理在框1704繼續(xù),獲取了比較對象。如上所述,參考對象和比較對象的數(shù)據(jù)類型不必相同。擴展類型管理器處理需要在比較發(fā)生之前執(zhí)行的任何轉(zhuǎn)換。處理在判定框1702繼續(xù)。在判定框1706,判定參考對象和比較對象的數(shù)據(jù)類型是否為文本。如果數(shù)據(jù)類型不是文本(例如,串、文件),則處理在框1708繼續(xù)。在框1708,對參考對象和比較對象的屬性進行比較。簡單地說,當參考對象和比較對象的屬性的值不同和/或順序不同,則對象比較報告差異,以下將聯(lián)合圖18進行詳細描述。處理在判定框1706繼續(xù)。在判定框1706,判定是否有另一個比較對象。如果有,則處理返回到框1704,并如上述前進。否則,處理完成。返回到判定框1706,如果參考對象和比較對象的數(shù)據(jù)類型是文本,則處理在框1708繼續(xù)。在框1708,在參考對象和比較對象間執(zhí)行文本比較。簡單地說,該文本比較與當前可用的基于文本的比較技術(shù)類似地操作,以下將聯(lián)合圖19進行詳細描述。處理也前進至判定框1706,并如上述前進。盡管圖17未示出多個參考對象,然而本領(lǐng)域技術(shù)人員應(yīng)理解,可實現(xiàn)另一個判定框以容納多個參考對象。圖18所示是適于在圖17中所示的基于順序的比較過程內(nèi)使用的基于順序的對象比較過程的邏輯流程圖。處理在框1801開始,并前進至框1802。在框1802,獲取來自參考對象的屬性。因為此比較是依賴于順序的,通常按連續(xù)順序獲取各屬性。處理在框1804繼續(xù)。在框1804,獲取來自比較對象的屬性。獲取比較對象中的屬性的順序和獲取參考對象中的屬性的順序是一樣的。處理前進至判定框1806。在判定框1806,判定參考屬性和差異屬性是否可比較。首先,該過程驗證參考屬性的名稱是否與差異屬性的名稱相同。這可以用反射來執(zhí)行。除了反射,本比較技術(shù)還提供如以上聯(lián)合圖13中的擴展類型系統(tǒng)所解釋的屬性別名。因此,通過使用屬性別名,在比較期間可將參考對象和比較對象中不同的屬性名視為等價物。例如,某些對象可使用屬性名“ProcessName”來標識與進程的名稱相關(guān)聯(lián)的屬性。其它對象可使用屬性名“Name”來標識與進程的名稱相關(guān)聯(lián)的屬性。通過將“ProcessName”作為“Name”的別名,在比較期間這兩個不同對象的屬性被視為相同。重要的是注意,擴展類型系統(tǒng)可將兩個屬性之一的數(shù)據(jù)類型強制為與另一個屬性的數(shù)據(jù)類型相同。例如,如果參考屬性是整數(shù)數(shù)據(jù)類型,而比較屬性是串數(shù)據(jù)類型,則如以上聯(lián)合圖13所描述的,擴展類型管理器可將串強制為整數(shù)值。這與嚴格對象比較形成對比,在嚴格對象比較中,因為不同的數(shù)據(jù)類型,差異會產(chǎn)生錯誤。如果兩屬性不能立即彼此進行比較,處理在框1818繼續(xù)。在框1808,為允許對兩個屬性進行比較,執(zhí)行必需的轉(zhuǎn)換。如上所述,這可涉及強制數(shù)據(jù)類型等等。一旦兩個屬性能進行比較,處理前進至框1810。在框1810,對兩個屬性進行比較。如上所述,該比較可利用自定義比較機制、執(zhí)行模糊比較等等。一旦已對兩個屬性進行比較,處理前進至框1812。在框1812,基于在命令串內(nèi)提供的開關(guān)來報告差異。差異可包括屬性的值中的差異和/或順序中的差異。處理在判定框1814繼續(xù)。在判定框1814,判定是否要比較另一個屬性。對于對象的基于順序的比較,重要的是標識屬性的值之間和/或?qū)傩缘捻樞蛑g的任何差異。如果有另一個屬性,則處理返回到框1802,并如上述地前進。否則,處理完成。圖19所示是適于在圖17中示出的基于順序的比較過程內(nèi)使用的文本比較過程的邏輯流程圖。處理在框1901開始,并前進至框1908。在框1908,對文本進行比較,直至標識出差異或直至文本的結(jié)尾。在框1908期間,文本比較可利用公知的文本比較技術(shù)。一旦檢測到差異,或檢測到結(jié)尾,處理前進至判定框1910。在判定框1910,判定是否到達了文本的結(jié)尾。如果已到達文本的結(jié)尾,處理前進至框1918。否則,處理前進至框1912。在框1912,執(zhí)行對導致差異的文本的搜索。此搜索可在與參考對象或者比較對象相關(guān)聯(lián)的文本中執(zhí)行。執(zhí)行此搜索,直至找到該文本或者直至完成指定的同步窗口。對于本領(lǐng)域技術(shù)人員,同步窗口的使用是公知的,且無需再加以解釋。處理前進至判定框1914。在判定框1914,判定在搜索期間是否找到該文本。如果找到了該文本,處理前進至框1916,其中諸如通過在參考對象或者比較對象中注解所添加的文本來更新差異記錄。處理隨即返回到框1908,并如上述前進。如果在判定框1914未找到文本,則處理前進至框1918,其中以來自比較的信息更新差異記錄。處理隨即完成。圖20示出compare小命令的另一種示例性句法。句法2000支持λ表達式??偟膩碚f,λ表達式允許本比較技術(shù)基于從參考對象和/或比較對象的屬性導出的、但不在對象本身上存在的關(guān)鍵字和值來比較兩組對象。因此,為了獲得必需的值,擴展類型系統(tǒng)不是簡單地返回值,而是允許執(zhí)行處理。句法2000包括以上聯(lián)合圖14所描述的許多參數(shù)。此外,句法2000可包括以下參數(shù)中的一個或多個ReferenceKey(參考關(guān)鍵字)參數(shù)2002、ComparisonKey(比較關(guān)鍵字)參數(shù)2004、ReferenceValue(參考值)參數(shù)2006、以及ComparisonValue(比較值)參數(shù)2008。這些參數(shù)也包括開關(guān),并可包括與開關(guān)相關(guān)聯(lián)的數(shù)據(jù)。ReferenceKey參數(shù)2002包括“-ReferenceKey”開關(guān)和參考關(guān)鍵字對象。參考關(guān)鍵字對象可以是任何為每個參考對象計算關(guān)鍵字的函數(shù)、腳本、λ表達式等等(在下文統(tǒng)稱為λ表達式)。類似地,ComparisonKey參數(shù)2004包括“-ComparisonKey”開關(guān)和比較關(guān)鍵字對象,其中比較關(guān)鍵字對象可以是為每個比較對象計算關(guān)鍵字的λ表達式。ReferenceValue參數(shù)2006包括“-ReferenceValue”開關(guān)和參考值對象。參考值對象可以是為每個參考對象計算值的λ表達式。類似地,ComparisonValue參數(shù)2008包括“-ComparisonValue”開關(guān)和比較值對象。比較值對象可以是為每個比較對象計算值的λ表達式。λ表達式的使用最好通過例子來理解。因此,假設(shè)命令串包含以上屬性2002-2008的每一個的λ表達式。此外,假設(shè)每個λ表達式基于對應(yīng)對象的屬性執(zhí)行數(shù)據(jù)庫檢索。例如,與ReferenceKey參數(shù)2002相關(guān)聯(lián)的參考關(guān)鍵字λ表達式可返回對于屬性A的數(shù)據(jù)庫查找結(jié)果。與ComparisonKey參數(shù)2004相關(guān)聯(lián)的比較關(guān)鍵字λ表達式可返回對于屬性B的數(shù)據(jù)庫查找結(jié)果。在偽代碼中,參考關(guān)鍵字λ表達式可表示為“{$db.fetch($_.A)}”,其中$db指數(shù)據(jù)庫對象,.fetch($_.A)指使用擴展類型管理器,經(jīng)由輸入組中的單個參考對象的fetch方法檢索屬性A。類似地,比較關(guān)鍵字λ表達式的偽代碼可表示為“{$db.fetch($_.B)}”。因此,在以上聯(lián)合圖16-19及23所描述的處理期間,只要獲取了關(guān)鍵字并對其求值,即應(yīng)用對應(yīng)的關(guān)鍵字λ表達式。關(guān)鍵字相等性的測試使用如上述的相同規(guī)則。然而,可指定在各關(guān)鍵字間執(zhí)行實際比較的另一λ表達式。從而,對于具有匹配關(guān)鍵字的每一參考對象和比較對象,比較小命令應(yīng)用對應(yīng)的關(guān)鍵字λ表達式。例如,如果參考值λ表達式為“{$db.fetch($_.C)}”,而比較值λ表達式為{$db.fetch($_.D)},則比較小命令將把$db.fetch($R.C)的結(jié)果與$db.fetch($C.D)的結(jié)果進行比較,其中$R是參考對象,$C是比較對象。此比較也可利用上述包括執(zhí)行可任選值比較λ表達式的比較過程。在支持λ表達式的另一實施例中,可以用將從λ表達式計算所得的關(guān)鍵字和值作為注釋添加到輸入對象上的方式,來過濾參考對象和比較對象。指定λ表達式以支持本比較技術(shù)的這些及其它變體提供了標識錯誤時很大的靈活性。因此,通過使用λ表達式,只要每個參考對象的關(guān)鍵字函數(shù)生成兼容的結(jié)果,并且每個參考對象的值函數(shù)生成兼容的結(jié)果,則具有不同對象類型且無公有屬性的參考對象可被比較。此外,用于每個對象的關(guān)鍵字或值函數(shù)可以是可調(diào)用外部系統(tǒng)能力(例如,數(shù)據(jù)庫查找)并執(zhí)行網(wǎng)絡(luò)操作以從遠程系統(tǒng)檢索數(shù)據(jù)的任意復雜的計算。在進一步的改進中,關(guān)鍵字或值函數(shù)可提供允許對使用不同名稱而語義上相等的屬性進行比較的別名能力。指定λ表達式時生成的輸出對象可包括計算所得的關(guān)鍵字和計算所得的值,作為所生成的對象的一部分,或者作為通過模式中對原始對象的注釋。這允許使用計算所得的值進一步處理所生成的輸出。在另一種改進中,關(guān)鍵字函數(shù)可用于為應(yīng)從輸入數(shù)據(jù)中排除的數(shù)據(jù)返回空值。通過應(yīng)用λ表達式,比較可通過將通過模式中執(zhí)行的一個比較的輸出用作對另一比較的輸入,跨越多個輸入組(例如,參考對象)。當完成時,指示對象的來源的屬性的名稱和值可能改變。這允許在任意一組輸入組間跟蹤差異。在另一個變體中,比較可通過將多個輸入組組合到單個流中來跨越多個輸入組。盡管以上描述了具體實現(xiàn)和實施例的細節(jié),然而此類細節(jié)旨在滿足法定的公開義務(wù),而不是要限制所附權(quán)利要求書的范疇。因此,由權(quán)利要求書定義的本發(fā)明不限于以上所描述的具體特征。相反,以落入所附權(quán)利要求書的適當范疇內(nèi)的其形式或者修改的任一個來要求保護本發(fā)明,并根據(jù)等效技術(shù)方案的原則來恰當?shù)亟忉尡景l(fā)明。權(quán)利要求1.至少一種具有執(zhí)行一種方法的計算機可執(zhí)行指令的計算機可讀介質(zhì),所述方法包含獲得一參考對象;獲得至少一個比較對象;以及基于在基于對象的環(huán)境中的命令串內(nèi)指定的至少一個參數(shù),在所述參考對象與所述至少一個比較對象間執(zhí)行比較。2.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述至少一個比較對象是從在基于對象的環(huán)境中執(zhí)行的小命令生成的。3.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)包含基于關(guān)鍵字的開關(guān)和關(guān)鍵詞,并且所述比較是在確認所述參考對象和所述比較對象包含與所述關(guān)鍵詞相關(guān)聯(lián)的屬性之后執(zhí)行的。4.如權(quán)利要求3所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)包含基于關(guān)鍵字的開關(guān)和關(guān)鍵詞,所述關(guān)鍵詞指定所述命令串上的表達式,所述表達式生成與所述參考對象相關(guān)聯(lián)的參考關(guān)鍵字,并且所述比較是在確認所述參考關(guān)鍵字和與所述比較對象相關(guān)聯(lián)的比較關(guān)鍵字相匹配之后執(zhí)行的。5.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)包含屬性開關(guān)和至少一個屬性,并且所述比較僅在所述至少一個屬性上執(zhí)行。6.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)包含順序開關(guān),并且所述比較是以基于順序的方式執(zhí)行的。7.如權(quán)利要求6所述的計算機可讀介質(zhì),其特征在于,所述參考對象與所述至少一個比較對象包含文本數(shù)據(jù)類型,并且所述比較包含文本比較。8.如權(quán)利要求7所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)還包含大小寫敏感開關(guān),并且所述文本比較是大小寫敏感的。9.如權(quán)利要求7所述的計算機可讀介質(zhì),其特征在于,所述至少一個參數(shù)還包含空格開關(guān),并且所述文本比較在比較所述參考對象與所述比較對象時排除空格。10.如權(quán)利要求6所述的計算機可讀介質(zhì),其特征在于,所述參考對象與所述至少一個比較對象包含非文本數(shù)據(jù)類型,并且所述比較將所述參考對象的屬性的參考值與所述比較對象的對應(yīng)屬性的比較值相比較。11.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,還包含基于所述至少一個參數(shù)和所述比較,生成輸出記錄。12.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,所述輸出記錄包括所述參考對象與所述比較對象間的差異。13.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,所述輸出記錄封裝所述參考對象,并且在比較期間所標識的差異作為注釋被添加到所述輸出記錄。14.如權(quán)利要求11所述的計算機可讀介質(zhì),其特征在于,所述輸出記錄封裝所述比較對象,并且在比較期間所標識的差異作為注釋被添加到所述輸出記錄。15.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述比較包含在所述命令串中被指定為表達式的自定義比較。16.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述參考對象的參考值是由所述命令串中指定的表達式生成的,在比較期間將所述參考值和與所述比較對象相關(guān)聯(lián)的比較值相比較。17.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述比較對象的比較值是由所述命令串中指定的表達式生成的,在比較期間將所述比較值和與所述參考對象相關(guān)聯(lián)的參考值相比較。18.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述參考對象是第一數(shù)據(jù)類型,而所述比較對象是第二數(shù)據(jù)類型,并且所述數(shù)據(jù)類型中至少一種被強制,從而在執(zhí)行所述比較之前,所述參考對象和所述比較對象具有同樣的數(shù)據(jù)類型。19.一種具有計算機可執(zhí)行指令的計算機可讀介質(zhì),其特征在于,所述指令包含在基于對象的環(huán)境中標識命令串內(nèi)的比較小命令;基于所述命令串內(nèi)的參考對象的指定獲取參考對象;基于所述命令串內(nèi)的比較對象的指定獲取比較對象;在所述參考對象與所述比較對象間執(zhí)行比較。20.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,還包含生成差異記錄作為所述比較的結(jié)果。21.如權(quán)利要求20所述的計算機可讀介質(zhì),其特征在于,提供所述差異記錄作為用管道從所述比較小命令傳輸?shù)牧硪恍∶畹妮斎搿?2.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,還包含獲取所述命令串內(nèi)的表達式,所述表達式標識要在所述參考對象與所述比較對象間執(zhí)行的比較。23.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,還包含獲取所述命令串內(nèi)的表達式,所述表達式生成標識了執(zhí)行所述比較所必需的參考對象的屬性的關(guān)鍵詞。24.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,還包含獲取所述命令串內(nèi)的表達式,所述表達式為所述參考對象生成參考值,在比較期間將所述參考值和與所述比較對象相關(guān)聯(lián)的比較值相比較。25.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,還包含獲取所指定的屬性,所指定的屬性標識了當執(zhí)行所述比較時所比較的所述參考對象和所述比較對象的特定屬性。26.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述比較是以基于順序的方式執(zhí)行的。27.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述參考對象是第一數(shù)據(jù)類型,而所述比較對象是第二數(shù)據(jù)類型,并且在所述比較之前,所述參考對象被強制為所述第二數(shù)據(jù)類型。28.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述參考對象是第一數(shù)據(jù)類型,而所述比較對象是第二數(shù)據(jù)類型,并且在所述比較之前,所述比較對象被強制為所述第一數(shù)據(jù)類型。29.如權(quán)利要求19所述的計算機可讀介質(zhì),其特征在于,所述參考對象是第一數(shù)據(jù)類型,而所述比較對象是第二數(shù)據(jù)類型,并且在所述比較之前,所述參考對象和所述比較對象被強制為具有同樣的數(shù)據(jù)類型。30.一種系統(tǒng),其特征在于,包含處理器;以及加載多個指令的存儲器,所述多個指令執(zhí)行一種方法,所述方法包含獲取一參考對象;獲取至少一個比較對象;以及基于在基于對象的環(huán)境中在命令串內(nèi)指定的至少一個參數(shù),在所述參考對象與所述至少一個比較對象間執(zhí)行比較。31.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述至少一個比較對象是從在基于對象的環(huán)境中執(zhí)行的小命令生成的。32.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述比較是在確認所述參考對象和所述比較對象包含與所述命令串上指定的關(guān)鍵詞相關(guān)聯(lián)的屬性之后執(zhí)行的。33.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述至少一個參數(shù)包含屬性開關(guān)和至少一個屬性,并且所述比較僅在所述參考對象和所述比較對象中的至少一個屬性上執(zhí)行。34.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述至少一個參數(shù)包含順序開關(guān),并且所述比較是以基于順序的方式執(zhí)行的。35.如權(quán)利要求30所述的系統(tǒng),其特征在于,還包含基于所述至少一個參數(shù)和所述比較,生成輸出記錄。36.如權(quán)利要求34所述的系統(tǒng),其特征在于,所述輸出記錄包括所述參考對象與所述比較對象間的差異。37.如權(quán)利要求35所述的系統(tǒng),其特征在于,所述輸出記錄封裝所述參考對象,并且在比較期間所標識的差異作為注釋被添加到所述輸出記錄。38.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述比較包含在所述命令串中指定為表達式的自定義比較。39.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述參考對象的參考值是由所述命令串中指定的表達式生成的,在比較期間將所述參考值和與所述比較對象相關(guān)聯(lián)的比較值相比較。40.如權(quán)利要求30所述的系統(tǒng),其特征在于,所述參考對象是第一數(shù)據(jù)類型,并且所述比較對象是第二數(shù)據(jù)類型,并且所述數(shù)據(jù)類型中的至少一種被強制,從而在執(zhí)行所述比較之前,所述參考對象和所述比較對象具有同樣的數(shù)據(jù)類型。全文摘要本比較技術(shù)在具有同樣類型、相似類型、或不同類型的對象上操作??蓪⒍鄠€比較對象對照一個或多個參考對象進行比較??梢詮脑诨趯ο蟓h(huán)境中操作的小命令管道中的前一小命令獲取比較對象??梢杂没陧樞虻姆绞交蚧陉P(guān)鍵字的方式對參考對象和比較對象進行比較。此外,可指定標識在比較期間要比較參考對象和比較對象的哪些屬性的特定屬性。該比較可生成標識差異和/或相似性的輸出??捎霉艿缹⒃撦敵鰝鬏?shù)搅硪粋€小命令以供進一步處理。文檔編號G06F9/44GK1740970SQ20051008819公開日2006年3月1日申請日期2005年7月25日優(yōu)先權(quán)日2004年8月27日發(fā)明者B·S·潘迪特,B·R·丹尼爾斯,J·W·特呂赫三世,J·P·斯諾弗,J·S·紐曼申請人:微軟公司