專利名稱::命令的輸入?yún)?shù)的基于反射的處理的制作方法
背景技術(shù):
:多用戶計(jì)算機(jī)系統(tǒng)的系統(tǒng)管理是十分專門化的。負(fù)責(zé)系統(tǒng)管理的系統(tǒng)管理員希望知道及理解使用不一致的語法的諸命令,錯(cuò)誤報(bào)告等。因?yàn)槊钍怯扇舾刹煌能浖_發(fā)者使用自己的風(fēng)格寫的,就發(fā)生命令之間的這些不致性。這些不一致性對(duì)系統(tǒng)管理員造成了困難。一種困難涉及到命令的可用性。存在不一致的命令使得系統(tǒng)管理員更難以掌握及使用。例如,某些開發(fā)者在參數(shù)之間喜歡使用劃(“-”),另外一些喜歡正斜杠(“/”),又一些喜歡使用其他獨(dú)特的語法。各開發(fā)者在報(bào)告錯(cuò)誤消息時(shí)也各具有他們自己的風(fēng)格。因此,系統(tǒng)管理員必須知道每條命令的語法,并掌握每個(gè)錯(cuò)誤消息的格式。另外的困難關(guān)系到命令的維護(hù)。例如,當(dāng)寫一條命令的開發(fā)者離開時(shí),其他開發(fā)者必須查看代碼本身或查看關(guān)于該命令的文檔。所有這些方法均是非常不希望的。在試圖使命令更一致之前著眼于提供完成常用功能的例行程序庫。雖然此庫能減少用于完成由庫例行程序提供的常用功能的代碼的量,開發(fā)者們?nèi)允褂盟麄冏约旱娘L(fēng)格處理由使用任何的庫例行程序引起的錯(cuò)誤條件。此外,庫的使用不影響每條命令需要包含從命令行獲的輸入?yún)?shù)的邏輯。因此,雖然使用例行程序庫能減少需要寫的代碼的量,對(duì)每條命令仍然有相當(dāng)數(shù)量的復(fù)制代碼要產(chǎn)生,以便完成語法分析,數(shù)據(jù)驗(yàn)證,和錯(cuò)誤報(bào)告。因此需要一個(gè)環(huán)境,其中以更一致的方式獲取和處理對(duì)命令的輸入?yún)?shù),同時(shí)減少對(duì)該命令所需的代碼的量,并在對(duì)所有命令的參數(shù)獲取階段中提供一致的錯(cuò)誤報(bào)告。
發(fā)明內(nèi)容本發(fā)明的目標(biāo)是基于反射的外殼(reflection-basedshell),它對(duì)命令提供輸入?yún)?shù)的基于反射的處理?;诜瓷涞奶幚戆ㄕZ法分析,數(shù)據(jù)生成,數(shù)據(jù)驗(yàn)證,對(duì)象編碼,對(duì)象處理,文檔等?;诜瓷涞奶帤ぬ峁┮粰C(jī)制,用于使用類來規(guī)定對(duì)輸入?yún)?shù)的文法。第三方開發(fā)者使用類規(guī)定對(duì)他們的命令的文法。在操作中,本發(fā)明接收可語法分析的流。可語法分析的流能從命令行,語音輸入,腳本等獲得。可語法分析的流包括命令和至少一個(gè)參數(shù)。檢查描述對(duì)命令的預(yù)期參數(shù)的基于語法分析的流,定義信息。使用定義信息創(chuàng)建一對(duì)象(即由開發(fā)者創(chuàng)建的類的范例)。該對(duì)象以按預(yù)期的參數(shù)的描述的格式存儲(chǔ)至少一個(gè)參數(shù)。然后該對(duì)象轉(zhuǎn)到作單獨(dú)處理的命令。定義信息能包括控制指令(directive),它規(guī)定在可語法分析的流上擬完成的活動(dòng),例如如何映射參數(shù)到預(yù)期的參數(shù),如何獲得參數(shù)(如交互式的)等??刂浦噶钜材馨P(guān)于語法分析,驗(yàn)證,文檔,數(shù)據(jù)生成,和數(shù)據(jù)處理的活動(dòng)。因此,本發(fā)明的一個(gè)優(yōu)點(diǎn)在于命令的開發(fā)者對(duì)他們的命令的輸入?yún)?shù)很容易地規(guī)定文法,而不需要寫分析命令行以得到輸入?yún)?shù),或驗(yàn)證輸入?yún)?shù)的邏輯。這樣,本發(fā)明就減少了開發(fā)者需要寫的代碼的量,并使得對(duì)命令的語法更加一致,而十分通用。圖1示出能用于本發(fā)明的一個(gè)示例性實(shí)施例的示例性計(jì)算設(shè)備。圖2是功能流圖,示出在通過按本發(fā)明的基于反射的外殼中的語法分析程序和引擎對(duì)命令行的處理。圖3是數(shù)據(jù)結(jié)構(gòu)的實(shí)施例,用于按本發(fā)明規(guī)定對(duì)命令的輸入?yún)?shù)的文法。圖4是邏輯流程圖,示出在本發(fā)明的基于反射的外殼中處理在命令行輸入的輸入?yún)?shù)的示例性過程。具體實(shí)施例方式簡言之,本發(fā)明的目標(biāo)是基于反射的外殼,它提供對(duì)命令的輸入?yún)?shù)的基于反射為處理。閱讀下面的詳述后將明白,本發(fā)明使第三方開發(fā)者需要寫的代碼的量最少,并使系統(tǒng)管理員為完成系統(tǒng)管理的任務(wù)需要知道的知識(shí)最少。從而,本發(fā)明大大減輕了系統(tǒng)管理員的任務(wù)。此外,本發(fā)明對(duì)輸入?yún)?shù)提供更一致的語法,并為與輸入?yún)?shù)有關(guān)的處理提供常用的功能。圖1示出能在本發(fā)明的示例性實(shí)施例中使用的示例性計(jì)算設(shè)備。在十分基本的配置中,計(jì)算設(shè)備100通常至少包括一個(gè)處理單元102和系統(tǒng)存儲(chǔ)器104。根據(jù)確切的配置和計(jì)算設(shè)備的類型,系統(tǒng)存儲(chǔ)器104能是易失的(如RAM),非易失的(如ROM,閃存等)或兩者的某種組合。系統(tǒng)存儲(chǔ)器104通常包含操作系統(tǒng)105,一個(gè)或多個(gè)程序模塊106,且能包括程序數(shù)據(jù)107。操作系統(tǒng)105包括執(zhí)行操作系統(tǒng)命令的命令處理器130。命令處理器130包括接收操作系統(tǒng)命令的外殼131(即命令處理界面)。該外殼能顯示命令提示,能顯示圖象用戶界面,或用于輸入和解釋用戶輸入的其他裝置。外殼131驗(yàn)證,輸入的命令是否有效,并發(fā)送驗(yàn)證的命令到命令處理器130的另外部分來執(zhí)行?;九渲迷趫D1中由虛線框108由的那些組件示出。計(jì)算設(shè)備100能具有另外的特征或功能。例如,計(jì)算設(shè)備100也能包括另外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)和/或不可移動(dòng)),如磁盤,光盤,或磁帶。在圖1中那樣的另外存儲(chǔ)器由可移動(dòng)存儲(chǔ)器109和不可移動(dòng)存儲(chǔ)器110示出。計(jì)算機(jī)存儲(chǔ)介質(zhì)能包括以任何方法或技術(shù)實(shí)現(xiàn)的易失和非易失,可移動(dòng)和不可移動(dòng)介質(zhì),用于存儲(chǔ)如計(jì)算機(jī)可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊或其他數(shù)據(jù)那樣的信息。系統(tǒng)存儲(chǔ)器104,可移動(dòng)存儲(chǔ)器109和不可移動(dòng)存儲(chǔ)器110均是計(jì)算機(jī)存儲(chǔ)介質(zhì)的例子。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM,ROM,EEPROM,閃存或其他存儲(chǔ)技術(shù),CD-ROM,數(shù)字多功能盤(DVD)或其他光存儲(chǔ)器,盒式磁帶,磁帶,磁盤存儲(chǔ)器或其他磁存儲(chǔ)設(shè)備,或能用于存儲(chǔ)希望的信息并能由計(jì)算設(shè)備100訪問的任何其他介質(zhì),但不限于這些。任何那樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)能是設(shè)備100的一部分。計(jì)算設(shè)備100也能具有如鍵盤,鼠標(biāo),輸入筆,語音輸入設(shè)備,接觸輸入設(shè)備等的輸入設(shè)備112。還能包括如顯示器,揚(yáng)聲器,打印機(jī)等那樣的輸出設(shè)備114。這些設(shè)備在業(yè)內(nèi)是眾知的,不必在此詳細(xì)討論。計(jì)算設(shè)備100還能包含通訊連結(jié)116,使該設(shè)備能如通過網(wǎng)絡(luò)與其他計(jì)算設(shè)備118能訊。通訊連結(jié)116是通訊介質(zhì)的一個(gè)例子,通訊介質(zhì)通常由計(jì)算機(jī)可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊或以如載波或其他機(jī)制的調(diào)制數(shù)據(jù)信事情形式的其他數(shù)據(jù)實(shí)現(xiàn),并包括信息提交介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號(hào)”指的是具有以如在信號(hào)中編碼信息的方式設(shè)置或改變的一個(gè)或多個(gè)特征的信號(hào)。例如,通訊介質(zhì)包括如有線網(wǎng)絡(luò)或直線連結(jié)的有線介質(zhì),和如聲音,RF,紅外及其他無線介質(zhì)的無線介質(zhì),且不限于這些。這里使用的術(shù)語“計(jì)算機(jī)可讀介質(zhì)”包括存儲(chǔ)介質(zhì)和通訊介質(zhì)兩者。圖2是功能流圖,示出在通過按本發(fā)明的基于反射的外殼的語法分析器202和引擎204的命令行250的處理。示例的命令250管線了若干命令(即處理(process)命令260,where命令262,分類(sort)命令264,和table命令266)。然而,下面討論集中在對(duì)一個(gè)命令(如where命令262)的輸入?yún)?shù)的基于反射的處理。對(duì)其他命令的基于反射的處理以類似方式完成。命令行250能傳送輸入?yún)?shù)到任何命令(如,“handlecount>400”被傳送到where命令262)。人們注意到,處理命令260不具有任何有關(guān)的輸入?yún)?shù)。過去,每條命令負(fù)責(zé)語法分析與該命令相關(guān)的輸入?yún)?shù),判斷那些輸入?yún)?shù)是否有效,且若輸入?yún)?shù)無效發(fā)出錯(cuò)誤消息。因?yàn)槊钔ǔS刹煌某绦騿T寫出,對(duì)于在命令行上輸入?yún)?shù)的語法不是非常一致。此外,若發(fā)生錯(cuò)誤,即使對(duì)同一錯(cuò)誤而言,在各命令之間錯(cuò)誤消息也不很一致。例如,在Unix環(huán)境中,“l(fā)s”命令和“ps”命令之間具有許多不一致處。雖然兩者均接收選項(xiàng)“-w”,由“l(fā)s”命令使用的“-w”選項(xiàng)表示頁的寬度,而由“ps”命令使用的“-w”選項(xiàng)表示打印寬度輸出(實(shí)質(zhì)上不管頁的寬度)。與“l(fā)s”及“ps”命令相關(guān)的求助頁也具有若干不一致處,使得在一處用黑體字而在另一處不用,在一處按字母表排列而去另一處不是,在一處需要?jiǎng)澗€而在另一處不用。如下面詳細(xì)討論,本發(fā)明提供更一致的方法,并使每個(gè)開發(fā)者必須寫的復(fù)制編碼的量最少。基于反射的外殼200提供一語法(如文法),對(duì)應(yīng)的語義(如詞典),和使開發(fā)者便于得益于由基于反射的外殼200提供的常用功能的參考模型。在進(jìn)一步描述本發(fā)明之前,提供對(duì)出現(xiàn)在本專利說明中的術(shù)語的定義。“命令-command”指的是獨(dú)立的可執(zhí)行程序。“commandlet-小命令”或“cmdlet”指的是比命令小得多的程序。在一個(gè)實(shí)施例中,每個(gè)cmdlet定義名詞-動(dòng)詞對(duì)(如在命令行250中的get/process)。當(dāng)參考按本發(fā)明寫的命令時(shí),下面討論使用術(shù)語cmdlet。然而,在某些情況,使用更常用術(shù)語“command”談及cmdlet。輸入?yún)?shù)指的是對(duì)cmdlet的輸入字段。變量指的是傳送到命令或cmdlet的輸入?yún)?shù),它是argv數(shù)組中的單個(gè)字符串的等價(jià)物,或作為在RequestObject中的單個(gè)元素傳送。如下面將描述,RequestObject指的是用于對(duì)cmdlet規(guī)定文法的機(jī)制。變量是選項(xiàng),選項(xiàng)變量,或在命令名后的操作數(shù)中的一個(gè)。根據(jù)下述命令行給出變量的例子findstr/i/d\winnt;\winnt\system32aa*b*.ini。在上述命令行中,“findstr”是變量0,“i”是變量1,“/d\winnt;\winnt\system32”是變量3,而“*.ini”是變量4。“選項(xiàng)”是對(duì)命令或cmdlet的變量,通常用于規(guī)定對(duì)程序的默認(rèn)行為的改變。繼續(xù)上述的例子命令行,“/i”和“/d”是選項(xiàng)?!斑x項(xiàng)變量”是跟隨某些選項(xiàng)的輸入?yún)?shù)。在某些情況,選項(xiàng)變量作為選項(xiàng)包括在同一變量串之中。在另外情況,選項(xiàng)變量作為下一變量包括其中。再次參考上述命令行,“winnet;\winnet\system32”是選項(xiàng)變量?!安僮鲾?shù)”是對(duì)命令或cmdlet的變量,它通常用作為向程序提供為完成程序處理所必須的信息的對(duì)象。操作數(shù)在命令行中通常跟在選項(xiàng)之后。再次參考上面的例子命令行,“aa*b*”和“*.ini”是操作數(shù)“可語法分析的流”包括變量?!邦惓蓡T-classmembers”指的是元素,如子類,字段,常數(shù),方法,結(jié)構(gòu),特性,數(shù)組,索引,界面,事件,異常等?!翱刂浦噶?directive”指的是元數(shù)據(jù)屬性?!胺懂?category”指的是一組特定類型的控制指令。下面將詳細(xì)解釋,本發(fā)明的基于反射的外殼提供若干控制指令的范疇,如語法分析控制指令,數(shù)據(jù)生成控制指令等。在每個(gè)范疇中,基于反射的外殼提供若干控制指令。范疇和控制指令能由軟件開發(fā)者擴(kuò)展。參考圖2,語法分析程序202將可語法分析的流(如命令行250)分析成RequestObject220-226(如where請(qǐng)求222)。每個(gè)RequestObject220-226與一個(gè)cmdlet260-266相關(guān)聯(lián)。簡言之,下面結(jié)合圖3詳細(xì)描述,RequestObject220-226對(duì)開發(fā)者提供為對(duì)cmdlet的輸入?yún)?shù)規(guī)定文法的方法或機(jī)制。RequestObject被傳送到對(duì)應(yīng)的cmdlet可執(zhí)行碼(如where可執(zhí)行碼232)。然而,下面將結(jié)合圖4描述,語法分析程序202和引擎204在將RequestObject傳送到cmdlet可執(zhí)行碼之前,在命令行200上規(guī)定的輸入?yún)?shù)上完成各種處理。處理包括語法分析,參數(shù)驗(yàn)證,數(shù)據(jù)生成,參數(shù)處理,參數(shù)編碼,和參數(shù)文檔化。因?yàn)檎Z法分析程序202和引擎204在命令行的輸入?yún)?shù)上完成常用功能,基于反射的外殼200能對(duì)用戶產(chǎn)生一致的錯(cuò)誤消息。人們認(rèn)識(shí)到,接本發(fā)明寫的可執(zhí)行cmdlet230-236比以前系統(tǒng)中的命令需要較少的代碼。每個(gè)可執(zhí)行的cmdlet230-236接收對(duì)應(yīng)的RequestObject220-226。此外,每個(gè)可執(zhí)行的cmdlet230-236輸出被輸入到下一管線的cmdlet的對(duì)象。通常,這些對(duì)象通過將一參考(如句柄)傳送到該對(duì)象而被輸入。然后,可執(zhí)行cmdlet230-236能在被傳送入的對(duì)象上完成附加的處理。圖3是用于對(duì)cmdlet的輸入?yún)?shù)規(guī)定文法的數(shù)據(jù)結(jié)構(gòu)300。本質(zhì)上,數(shù)據(jù)結(jié)構(gòu)300提供用于清楚地表達(dá)在基于反射的外殼和cmdlet之間的約定的方法。下面討論使用由Redmend,WA的微軟公司創(chuàng)建的,NET架構(gòu)描述本發(fā)明。然而,能使用其他環(huán)境而不偏離本發(fā)明的范圍。軟件開發(fā)者在對(duì)應(yīng)的可執(zhí)行cmdlet的碼中編碼數(shù)據(jù)結(jié)構(gòu)300。實(shí)施此請(qǐng)求的方法和特性確定了,什么輸入?yún)?shù)通過命令行向用戶揭示。數(shù)據(jù)結(jié)構(gòu)300是從RequestObject類304導(dǎo)出的公共類。軟件開發(fā)者為數(shù)據(jù)結(jié)構(gòu)300提供類名302。類名302識(shí)別在cmdlet命令行上規(guī)定的變量的名。每個(gè)命令名302表示動(dòng)詞/名詞對(duì)。如在圖2中示出的示例命令行200中的“get/process”和“format/table”。在如“where”命令那樣的命令名中,動(dòng)詞或名詞能是隱含的。在一個(gè)實(shí)施例中人們注意到,類名不等同于cmdlet。在此實(shí)施例中,使用其他標(biāo)識(shí)識(shí)別cmdlet的名。數(shù)據(jù)結(jié)構(gòu)300至少包括一個(gè)公共成員(如Name300)。公共成員330,332代表與cmdlet相關(guān)的輸入?yún)?shù)。每個(gè)公共成員330,332能具有一個(gè)或多個(gè)在每個(gè)下列范疇中的控制指令語法分析控制指令310,數(shù)據(jù)驗(yàn)證控制指令312,數(shù)據(jù)生成控制指令314,處理控制令316,編碼控制指令318,和文檔控制指令320。這些控制指令用方括號(hào)括起來并描述跟隨其后的輸入?yún)?shù)。某些控制指令也能在類層次上應(yīng)用,如用戶交互類型的控制指令。數(shù)據(jù)結(jié)構(gòu)300也能包括專用成員340,語法分析器不將其誤碼別成輸入?yún)?shù)。專用成員340能用于存儲(chǔ)根據(jù)一個(gè)控制指令生成的數(shù)據(jù)。公共成員的名能用在命令行上以限定命令行上的輸入?yún)?shù)的有效性。不然,公共成員能用于根據(jù)其在命令行的位置存儲(chǔ)輸入?yún)?shù)。下面是說明此概含的例子,ReqyestObject是如下publicclassFileCopyResuestRequestObject{[ParsingParameterPositionAttribute(O)]PublicstringFrom;[ParsingParameterPoestionAttribute(1)}PublicstringTo;…}。ParsingParameterPositionAttribute是語法分析控制指令,它描述如何根據(jù)位置映射非限定的參數(shù)。上面提到,非限定的參數(shù)是不使用與輸入?yún)?shù)相關(guān)的公共成員名的參數(shù)。下面是在“To”和“From成員上應(yīng)用上面語法分配年控制命令之后的合適的語法$copy/File-Froma-Tob$copy/Fileab$copy/File-Fromab$copy/Filea-Tob$copy/File-Tob-Froma下面的語法是無效的$copy/File-Toba$copy/Fileb-Froma下面將描述,其他控制指令影響在命令行上規(guī)定的輸入?yún)?shù)的處理。因此,通過使用控制指令,使cmblet的開發(fā)者能容易地規(guī)定對(duì)他們的comdlet的輸入?yún)?shù)的文法,并完成在輸入?yún)?shù)上的處理而不需要他們產(chǎn)生任何底層邏輯。控制指令被存儲(chǔ)在與cmdlet相關(guān)的元數(shù)據(jù)中。后面結(jié)合圖4描述,元數(shù)據(jù)的處理分配在整個(gè)基于反射的外殼,元數(shù)據(jù)的處理分配在整個(gè)基于反射的外殼。例如,可應(yīng)用性控制指令,文檔控制指令,和語法分析導(dǎo)引控制指令在語法分析器的跟早階段處理。一旦語法分析程序結(jié)束了所有輸入?yún)?shù)的分析,在引擎中處理數(shù)據(jù)生成控制指令和驗(yàn)證控制指令。下列表格示出對(duì)各種范疇的代表性控制指令,以及由基于反射的外殼響應(yīng)該控制指令完成的處理的說明。表5、處理和編碼控制命令在使用.NET架構(gòu)的實(shí)施例中,每個(gè)范疇具有從基本范疇的類(如CmdAttribute)導(dǎo)出的基本類?;痉懂牭念?如CmdAttribute)導(dǎo)出的基本類。基本范疇類從system。Attribute類導(dǎo)出。每個(gè)范疇具有預(yù)定義的函數(shù)(如attrib.func()),它由語法分析程序在范疇處理間調(diào)用。cmdlet開發(fā)者能創(chuàng)建一客戶范疇,它從客戶范疇類(如cmdcustomAttribute)導(dǎo)出。cdmlet開發(fā)者還能通過從對(duì)現(xiàn)有范疇的基本范疇類導(dǎo)出控制指令類而擴(kuò)展現(xiàn)有的范疇類,并用它們的實(shí)施覆蓋預(yù)定的函數(shù)。cmdlet開發(fā)者還能復(fù)蓋控制指令并增加控制指令到預(yù)定的控制指令組。處理這些控制指令的次序能存儲(chǔ)在由語法分析程序可訪問的外部數(shù)據(jù)存儲(chǔ)?;诜瓷涞耐鈿?dǎo)找登錄的范疇并對(duì)該范疇中的每個(gè)控制指令調(diào)用一函數(shù)(如ProcessCustomDirective)。因此,通過存儲(chǔ)范疇執(zhí)行信息到永久存儲(chǔ)中,范疇的處理的次序能是動(dòng)態(tài)的。在不同的處理階段,語法分析程序在和久存儲(chǔ)中校驗(yàn),以判斷在那時(shí)是否有任何元數(shù)據(jù)范疇需要執(zhí)行。此實(shí)施例通過從永久存儲(chǔ)中刪除范疇需要執(zhí)行,此實(shí)施例通過從永久存儲(chǔ)中刪除范疇的實(shí)體很容地阻止范疇。圖4是示出用于處理一命令的輸入?yún)?shù)的過程的邏輯流程圖400。在這里,已經(jīng)開發(fā)了cmdlet,且元數(shù)據(jù)已使用圖3中示出的RequestObject插入到cmdlet的源文件。cmdlet已被編譯并已被登錄。在登錄期間,類名(即cmdlet名)已寫入登錄存儲(chǔ)器。過程400在塊401開始,在那里基于反射的外殼已接收了表示cmdlet的輸入(如鍵入)。基于反射的外殼通過從登錄處查找該輸入并將鍵入的輸入與一個(gè)登錄的cmdlet相關(guān)聯(lián)而將輸入識(shí)別成一個(gè)cmdlet。處理進(jìn)行到塊402。在塊402,識(shí)別與已識(shí)別的cmdlet相關(guān)的類。此類也能通過登錄處識(shí)別。處理在塊404處理繼續(xù)。在塊404,讀出與該類相關(guān)的元數(shù)據(jù)。元數(shù)據(jù)包括任何與cmdlet相關(guān)的控制指令??刂浦噶钅軕?yīng)用到cmdlet本身或在RequwstObject中規(guī)定的一個(gè)或多個(gè)參數(shù)。在cmdlet登錄期間,登錄程序?qū)⒃獢?shù)據(jù)登錄到永久存儲(chǔ)器中。元數(shù)據(jù)能以串行化格式存入XML文件或外部數(shù)據(jù)庫等。如在上面表中所示,在元數(shù)據(jù)中規(guī)定的控制指令,每個(gè)與一范疇相關(guān),如ApplicabilityDirectives,ParsingGuidelineDirectives等??刂浦噶畹拿總€(gè)范疇在基于反射的外殼中的不同階段處理。每個(gè)元數(shù)據(jù)控制指令處理它自己的錯(cuò)誤管理。過程在塊406處繼續(xù)。在塊406,根據(jù)識(shí)別的類例示RequestObject。過程在塊408處繼續(xù)。在塊408處,在RequestObject上完成反射以獲得有關(guān)輸入?yún)?shù)的信息?;诜瓷涞耐鈿ぬ峁┮怀S玫慕缑妫糜诜祷胤瓷鋽?shù)據(jù)(按需要)給調(diào)用者。在上述實(shí)施例中反射使用.NETReflaction。過程在塊410處繼續(xù)。在塊410處,應(yīng)用可應(yīng)用性(applicability)控制指令(表1)??蓱?yīng)用性控制指令保證在某些機(jī)器角色和/或用戶角色中使用該類。例如,某些cmdlet只能由DomainAdministrators使用。若在一個(gè)可應(yīng)用性控制指令中規(guī)定的約束不滿足,發(fā)生一錯(cuò)誤。過程在塊412處繼續(xù)。在塊412處,使用元數(shù)據(jù)提供智能感覺(intellisense)。在過程的這一點(diǎn),當(dāng)未輸入整個(gè)命令行。然而,基于反射的外殼知道,通過在與該cmdlet相關(guān)的RequestObject上的反射所允話的輸入?yún)?shù)。因此,一旦輸入?yún)?shù)的無二意性的部分在命令行上鍵入,基于反射的外殼通過引擎自動(dòng)完成輸入?yún)?shù)。只要輸入?yún)?shù)的部分能元二意性地識(shí)別一個(gè)輸入?yún)?shù),能發(fā)生自動(dòng)完成。過程在塊414處繼續(xù)。在塊414處,過程一直等待到對(duì)cmdlet的輸入?yún)?shù)被輸入。通常,這是在用戶如用按回車鍵表示命令行結(jié)束時(shí)發(fā)生。過程在塊416處繼續(xù)。在塊416處,應(yīng)用語法分析導(dǎo)引控制指令,并用輸入?yún)?shù)填入RequestObject范例。語法分析程序有一組在語法分析時(shí)使用的規(guī)則,這組規(guī)則規(guī)定了在RequestObject數(shù)據(jù)結(jié)構(gòu)中規(guī)定的文法被轉(zhuǎn)換成對(duì)在命令行上的輸入?yún)?shù)的語法的方式。例如,給出下面對(duì)命令Foo的RequestObject說明classFooRequestObject{stringName;BoolRecure;}命令行語法能是下列中任一個(gè)$Foo-Name(string)-RescureTrue$Foo-Name<string>-RescureTrue$Foo/Name(string)為了產(chǎn)生希望的語法,該組規(guī)則能由系統(tǒng)管理員修改。此外,語法分析程序能支持多組規(guī)則,所以用戶能使用多于一個(gè)的語法。因而,在RequestObject結(jié)構(gòu)中規(guī)定的文法(如strinName和BoolRecurse)驅(qū)動(dòng)了語法分析器。通常,語法分析控制指令描述,在命令行中輸入的參數(shù)如何映射到在RequestObject中識(shí)別的期望的參數(shù)。下面例子說明規(guī)定位置信息的語法分析控制指令。classfooRequestObject{[ParsingParameterPositionAttribute(0)]stringHostName[ParsingParameterPositionAttribute(1)]stringAliasName}。校驗(yàn)輸入?yún)?shù)類型以判斷是否正確。若輸入?yún)?shù)類型不正確,輸入?yún)?shù)能強(qiáng)制變成正確。若輸入?yún)?shù)類型不正確且不能強(qiáng)制成正確,打印出用法錯(cuò)誤。用法錯(cuò)誤使用戶能覺察期望的正確語法。用法錯(cuò)誤能從DocumetationDirective418獲取描述語法的信息。一旦輸入?yún)?shù)的類型被映射或被驗(yàn)證。,對(duì)應(yīng)成員被填入在RequestObject范例中。過程在決策塊420處繼續(xù)。在決策塊420作出判斷,任何輸入?yún)?shù)是否需要與用戶交互。若任何參數(shù)需要與用戶交互,過程進(jìn)到塊422。否則過程在塊424處繼續(xù)。在塊422,基于反射的外殼與用戶交互以獲取輸入?yún)?shù)。開發(fā)者能規(guī)定,能借助對(duì)RequestObject中的參數(shù)規(guī)定CmdpgRequireInteraction控制指令,通過用戶的交互獲得輸入?yún)?shù)。此外,基于反射的外殼能確定,若不是命令行的所有輸入?yún)?shù)被輸入,則需要用戶的交互。只要輸入?yún)?shù),cmdlet本身,和其他設(shè)置不拒絕交互,基于反射的外殼將與用戶交互以獲得必要的輸入?yún)?shù)。能使用標(biāo)志來規(guī)定,在用戶層,組的層,及企業(yè)層上是否允許用戶交互。若一個(gè)層不允許用戶交互,發(fā)生錯(cuò)誤消息。一旦完成用戶交互,過程在塊424處繼續(xù)。在塊424處,引擎在RequestObject范例上完成另一次通過,并應(yīng)用任何余下的控制指令到輸入?yún)?shù)。余下的控制指令包括數(shù)據(jù)生成控制指令,數(shù)據(jù)驗(yàn)證控制指令,對(duì)象處理控制指令,和對(duì)象編碼控制指令。一旦語法分析程序結(jié)束分析輸入?yún)?shù),在引擎中處理這些控制指令?,F(xiàn)將描述來自在上面表3-5中示出的每個(gè)范疇的代表的控制指令。第一個(gè)代表的控制指令來自數(shù)據(jù)生成控制指令。RequestObject能包含下列語句[ParsingDefaultAnswerScrptAttrbute(Flename,F(xiàn))]StringName;PrivateArraylistF;由于ArraylistF是專用的,語法分析程序不將此說明處理成到該cmdlet的輸入?yún)?shù)。替代地,ArraylistF是對(duì)由在DataGeneration控制指令中規(guī)定的服務(wù)產(chǎn)生的數(shù)據(jù)的臨時(shí)存儲(chǔ)。在上面例子中,服務(wù)是“Filename”。Filename能是由基于反射的外殼提供的實(shí)用程序,或能是第三方函數(shù)或?qū)嵱贸绦?。?dāng)引擎遇到上述控制指令,該引擎在登錄處識(shí)別名為“Filename”的服務(wù)。服務(wù)的登錄在服務(wù)的安裝期間發(fā)生。數(shù)據(jù)生成(DataGeneration)控制指令允許在輸入?yún)?shù)上發(fā)生單獨(dú)的處理。例如,服務(wù)能在命令行上輸入成“A*”的文件名上完成通配符擴(kuò)展。在第二次通過之前,名字成是象它在命令行中輸入的那樣包含“A*”。在第二次通過期間文件名服務(wù)能定位一組以A開頭的文件,并將它們存入ArraylistF。本專業(yè)行家理解,DataGeneration控制指令不僅提供文件名的通配符擴(kuò)展,也能能完成用戶名,過程等的通配符擴(kuò)展。此外,DataGreneration控制指令能完成在輸入?yún)?shù)上的其他處理。示例性數(shù)據(jù)驗(yàn)證控制指令能在RequestObject中包括下列語句[ValidationSetAttribute(“Debug,”“Production”,“Test”)][ParsingParameterMandatoryAttribute]StringName;給出上面數(shù)據(jù)驗(yàn)證控制指令,語法分析程序認(rèn)識(shí)到,名字是強(qiáng)制性輸入?yún)?shù),而字符串必須是Debug,Production或Test。否則,數(shù)據(jù)驗(yàn)證控制指令將發(fā)生錯(cuò)誤。錯(cuò)誤能使用文檔控制指令來提供錯(cuò)誤消息。示例的對(duì)象處理控制指令能在RequestObject中包括下列語句[tolower]StringHostName;給出上面對(duì)象處理控制指令,對(duì)HostName規(guī)定的變量在將RequestObject處理成可執(zhí)行的cmdlet之前轉(zhuǎn)換成小寫字符串。示例性對(duì)象編碼控制指令能在RequestObject中包括下列語句[TOIP(HostIP)]StringHostName;PrivateIpaddrHostIp;給出上面對(duì)象編碼控制指令,作為HostName輸入的字符串轉(zhuǎn)換成IP地址。語法分析程序不將HostIP參數(shù)處理成輸入?yún)?shù),因?yàn)樗徽f明成Private(專用的)。然而可執(zhí)行的cmdlet能參考HostIP成員。雖然上面的對(duì)象編碼控制指令看來不要保存許多行代碼,實(shí)際上,該控制指令大大地減少了由第三方開發(fā)者寫的代碼的量。例如在以前環(huán)境中,第三方開發(fā)者處理錯(cuò)誤過程。此外,若錯(cuò)誤消息是字符串,該字符串需要轉(zhuǎn)換成多種語言。然而本發(fā)明提供一致的錯(cuò)誤處理。而且,本發(fā)明提供一機(jī)制,用于一致地轉(zhuǎn)換錯(cuò)誤消息成多種語言。過程在塊426處繼續(xù)。在塊426,RequestObject范例被傳送到可執(zhí)行的cmdlet。然后可執(zhí)行cmdlet在它的處理中使用這些輸入?yún)?shù)。因此,與以前的命令實(shí)現(xiàn)相反,本發(fā)明的cmdlet不必寫任何單獨(dú)的代碼來語法分析或驗(yàn)證輸入?yún)?shù)。此外,本發(fā)明提供更加豐富的環(huán)境,其中軟件開發(fā)者能通過控制指令規(guī)定輸入?yún)?shù)的另外處理。每個(gè)控制指令處理它自己的錯(cuò)誤消息。若需要顯示錯(cuò)誤消息,該控制指令從文檔存儲(chǔ)得到本地化的字符串,并調(diào)用顯示界面來顯示錯(cuò)誤消息。有關(guān)文檔控制指令的數(shù)據(jù)能存入cmdlet,XML存儲(chǔ)或外部數(shù)據(jù)庫,或源文件。因此,本發(fā)明能對(duì)所有cmdlet提供一致性為錯(cuò)誤消息,并減少第三方的本地化工作。此外,基于反射的外殼提供常見的界面,它返回由以對(duì)象的形式的一個(gè)控制指令產(chǎn)生的數(shù)據(jù)到調(diào)用的控制指令。調(diào)用的控制指令負(fù)責(zé)將數(shù)據(jù)塑造成需要的數(shù)據(jù)類型,雖然表1-5示出若干范疇的代表控制指令,能加入其他控制指令,且能加入另外的范疇而不偏離本發(fā)明的范圍。因此如上所述,本發(fā)明提供了為對(duì)cmdlet的輸入?yún)?shù)定義方法的機(jī)制。該機(jī)制使開發(fā)者能開發(fā),測(cè)試和支持cmdlet。該cmdlet具有較少的代碼行,較快實(shí)現(xiàn),具有較少缺陷,并容易尋找缺陷。在語法,語義,錯(cuò)誤處理,資源管理,安全性等方面該機(jī)制提供更多的一致性。上述討論在.NET架構(gòu)內(nèi)描述了本發(fā)明。然而本專業(yè)的行家認(rèn)識(shí)到,本發(fā)明能在任何提供反射能力的操作系統(tǒng)中實(shí)現(xiàn)。此外,本發(fā)明在命令行的實(shí)施例中描述。然而,所分析的可語法分析的數(shù)據(jù)能通過語音,圖象用戶界面,腳本等獲得而不偏離本發(fā)明的范圍。而且本發(fā)明能用于通過允許一個(gè)RequestObject類說明另外的RequestObject類來描述豐富的方法組。因此,本發(fā)明對(duì)系統(tǒng)管理員提供了很大的通用性。上述說明,例子和數(shù)據(jù)提供本發(fā)明的成分的制作及使用的完全描述。因?yàn)槟茏鞒霰景l(fā)明的許多實(shí)施例而不偏離本發(fā)明的精神和范圍,本發(fā)明歸屬于附后的權(quán)利要求中。權(quán)利要求1.含有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),該指令包括接收至少一條命令及與該至少一條命令相關(guān)的至少一個(gè)參數(shù)的可語法分析的流;檢索描述對(duì)該至少一條命令期望的參數(shù)的定義信息;使用該定義信息創(chuàng)建一對(duì)象,用于以按照該期望的參數(shù)的描述的格式存儲(chǔ)該至少一個(gè)參數(shù);和將該對(duì)象傳送到該至少一條命令。2.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于在命令行上輸入該可語法分析的流。3.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于經(jīng)語音輸入產(chǎn)生該可語法分析的流。4.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于有計(jì)劃地產(chǎn)生該可語法分析的流。5.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于檢索定義信息包括識(shí)別與該至少一條命令相關(guān)的類。6.如權(quán)利要求5的計(jì)算機(jī)可讀介質(zhì),其特征在于檢索定義信息還包括從該類讀出元數(shù)據(jù)。7.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括當(dāng)正產(chǎn)生可語法分析的流時(shí)提供智能感覺,以便根據(jù)該定義信息自動(dòng)完成可語法分析的流。8.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括應(yīng)用將至少一個(gè)參數(shù)與期望的參數(shù)關(guān)聯(lián)的可語法分析的控制指令。9.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括應(yīng)用確定獲得該至少一個(gè)參數(shù)的方式的可語法分析的控制指令。10.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括應(yīng)用數(shù)據(jù)驗(yàn)證控制指定,以確定該可語法分析的流是否滿足由該數(shù)據(jù)驗(yàn)證控制指令規(guī)定的準(zhǔn)則。11.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括在該至少一個(gè)參數(shù)上應(yīng)用數(shù)據(jù)生成控制指令,以產(chǎn)生存儲(chǔ)在該對(duì)象中的一組信息。12.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括在該至少一個(gè)參數(shù)上應(yīng)用處理控制指定,以處理該至少一個(gè)參數(shù)。13.如權(quán)利要求1的計(jì)算機(jī)可讀介質(zhì),其特征在于使用該定義信息包括應(yīng)用文檔控制指令到該至少一個(gè)參數(shù),它在請(qǐng)求時(shí)產(chǎn)生有關(guān)該至少一個(gè)參數(shù)的文字信息。14.用數(shù)據(jù)結(jié)構(gòu)編碼的計(jì)算機(jī)可讀介質(zhì),該數(shù)據(jù)結(jié)構(gòu)包括識(shí)別一命令的類名;和對(duì)該命令的期望的參數(shù)的至少一個(gè)說明,在該命令被調(diào)用時(shí),該說明定義對(duì)所提供的期望的參數(shù)的格式。15.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該至少一個(gè)說明包括一成員名,該成員名對(duì)應(yīng)于對(duì)該期望的參數(shù)的限定詞,當(dāng)該命令被調(diào)用時(shí)該限定詞可選地用該期望的參數(shù)提供。16.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該至少一個(gè)說明包括數(shù)據(jù)類型,該數(shù)據(jù)類型規(guī)定對(duì)期望的參數(shù)的數(shù)據(jù)格式。17.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該數(shù)據(jù)結(jié)構(gòu)還包括與至少一個(gè)說明相關(guān)的語法分析控制指令,該語法分析控制指令規(guī)定用于將期望的參數(shù)映射到至少一個(gè)說明的規(guī)則。18.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該數(shù)據(jù)結(jié)構(gòu)還包括與該至少一個(gè)說明有關(guān)的數(shù)據(jù)驗(yàn)證控制指令,該數(shù)據(jù)驗(yàn)證控制指令規(guī)定在期望的參數(shù)上完成的驗(yàn)證過程。19.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該數(shù)據(jù)結(jié)構(gòu)還包括與該至少一個(gè)說明有關(guān)的數(shù)據(jù)生成控制指令,該數(shù)據(jù)生成控制指令規(guī)定被調(diào)用來根據(jù)期望的參數(shù)產(chǎn)生一組數(shù)據(jù)的服務(wù)。20.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該數(shù)據(jù)結(jié)構(gòu)還包括與該至少一個(gè)說明有關(guān)的控制指令,該控制指令規(guī)定在預(yù)定的參數(shù)上完成的附加處理。21.如權(quán)利要求14的計(jì)算機(jī)可讀介質(zhì),其特征在于該數(shù)據(jù)結(jié)構(gòu)還包括與該至少一個(gè)說明有關(guān)的文檔控制指令,該文檔控制指令在請(qǐng)求關(guān)于該期望的參數(shù)的文字信息時(shí),規(guī)定關(guān)于該期望的參數(shù)的文字信息。22.在輸入到一命令的參數(shù)上完成基于反射的處理的系統(tǒng),該系統(tǒng)包括一處理器;和一存儲(chǔ)器,該存儲(chǔ)器被分配給多個(gè)計(jì)算機(jī)可執(zhí)行指令,它們加載到該存儲(chǔ)器由處理器執(zhí)行,這些計(jì)算機(jī)可執(zhí)行指令完成的方法包括接收至少一條命令及與該至少一條命令相關(guān)的至少一個(gè)參數(shù)的可語法分析的流;檢索描述對(duì)該至少一條命令的期望的參數(shù)的定義信息;使用該定義信息創(chuàng)建一對(duì)象,用于以按該期望的參數(shù)的描述的格式存儲(chǔ)該至少一個(gè)參數(shù);和將該對(duì)象傳送到至少一條命令。23.如權(quán)利要求22的系統(tǒng),其特征在于在一命令行上輸入可語法分析的流。24.如權(quán)利要求22的系統(tǒng),其特征在于檢索定義信息包括識(shí)別與至少一條命令相關(guān)的類。25.如權(quán)利要求24的系統(tǒng),其特征在于檢索定義信息還包括從該類讀出元數(shù)據(jù)。26.如權(quán)利要求22的系統(tǒng),其特征在于使用該定義信息包括應(yīng)用一控制指令到該至少一個(gè)參數(shù),它按該控制指令完成在該至少一個(gè)參數(shù)上的處理。27.在輸入到一命令的參數(shù)上完成基于反射的處理的系統(tǒng),該系統(tǒng)包括用于處理的裝置;和存儲(chǔ)裝置,該存儲(chǔ)裝置被分配給多個(gè)計(jì)算機(jī)可執(zhí)行指令,它們加載到該存儲(chǔ)裝置用于由處理器執(zhí)行,這些計(jì)算機(jī)可執(zhí)行指令完成的方法包括用于接收至少一條命令及與該至少一條命令相關(guān)的至少一個(gè)參數(shù)的可語法分析的流的裝置;用于檢索描述對(duì)該至少一條命令的期望的參數(shù)的定義信息的裝置;使用該定義信息創(chuàng)建一對(duì)象,用于以按該期望的參數(shù)的描述的格式存儲(chǔ)該至少一個(gè)參數(shù)的裝置;和將該對(duì)象傳送到該至少一條命令的裝置。28.含有計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),這些指令包括用于接收至少一條命令及與該至少一條件令相關(guān)的至少一個(gè)參數(shù)的可語法分析的流的裝置;用于檢索描述對(duì)該至少一條命令的期望的參數(shù)的定義信息的裝置;使用該定義信息創(chuàng)建一對(duì)象,用于以按該期望的參數(shù)的描述的格式存儲(chǔ)該至少一個(gè)參數(shù)的裝置;和將該對(duì)象傳送到該至少一條命令的裝置。全文摘要本發(fā)明的目標(biāo)是基于反射的外殼,它提供對(duì)一命令的輸入?yún)?shù)的基于反射的處理?;诜瓷涞奶幚戆ㄕZ法分析,數(shù)據(jù)生成,數(shù)據(jù)驗(yàn)證,對(duì)象編碼,對(duì)象處理,文檔等?;诜瓷涞姆礆ぬ峁┮粰C(jī)制,用于使用類對(duì)輸入?yún)?shù)規(guī)定方法。該方法包括接收可語法分析的流,它包括一命令及至少一個(gè)參數(shù)。檢索描述對(duì)該命令的期望的參數(shù)的定義信息。使用定義信息創(chuàng)建一對(duì)象,用于以按該期望的參數(shù)的描述的格式存儲(chǔ)至少一個(gè)參數(shù)。文檔編號(hào)G06F15/16GK1550982SQ20041004349公開日2004年12月1日申請(qǐng)日期2004年5月12日優(yōu)先權(quán)日2003年5月12日發(fā)明者J·P·斯諾弗,J·W·特魯爾三世,D·W·雷,K·普西帕瓦南姆,JP斯諾弗,特魯爾三世,雷,髖鐐吣夏申請(qǐng)人:微軟公司