无缝地比较对象的系统和方法

文档序号:6633860阅读:196来源:国知局

专利名称::无缝地比较对象的系统和方法(1)
技术领域
本文所揭示的发明涉及计算机实现的比较技术,由其涉及在对象上操作的计算机实现的比较技术。(2)
背景技术
管理任务支持着诸如膝上计算机、台式计算机等计算设备日复一日的运行。维护联网计算设备的系统管理员执行许多管理任务。一项管理任务涉及标识未如期望所运行的计算设备的问题。一种用于诊断此类问题的技术涉及将该计算设备与运行中的计算设备进行比较。此比较可包括使用图形用户界面在视觉上检查两个设备间的设置,或执行在两个设备上的相似的文件之间的比较。用于比较的不同实用程序相当长时间以来一直可用。然而,每类文件使用一种专属于该类文件的工具,并有其自己的句法和属性。例如,如果文件的类型是文本文件,则使用文本比较工具。类似地,如果文件的类型是二进制文件,则使用二进制比较工具。一般而言,这些比较使用程序的每一个走查文件直到遇到差异。当遇到差异,该差异被报告给系统管理员。尽管这些比较实用程序是有帮助的,然而它们常常报告与问题无关的差异。因而,需要提供更准确结果和更多功能性的比较技术。(3)
发明内容本比较技术在同样类型、相似类型、或不同类型的对象上操作。可对照一个或多个参考对象来比较多个比较对象。比较对象可从在基于对象的环境中运行的小命令(cmdlet)管道中的前一小命令获得。参考对象和比较对象可以用基于顺序的方式或用基于关键字的方式进行比较。此外,可以指定标识要在比较期间比较参考对象和比较对象的哪些属性的特定属性。比较可生成标识差异或相似性的输出。该输出可用管道运输到另一小命令以供进一步的处理。(4)图1示出其中可实现本比较技术的示例性计算设备。图2是概括地示出结合本比较技术的基于对象的管理工具框架的概观的框图。图3所示是图2中所示的基于对象的管理工具框架的平台专用的组件内的组件的框图。图4所示是图2中所示的基于对象的管理工具框架的核心引擎组件内的组件的框图。图5是用于指定适合在图2中所示的基于对象的管理工具框架内使用的小命令的示例性数据结构。图6是用于指定适合在图2中所示的基于对象的管理工具框架内使用的小命令的示例性数据结构。图7所示是用于在图2中所示的基于对象的管理工具框架内执行的主机处理的示例性过程的逻辑流程图。图8所示是在图2中所示的基于对象的管理工具框架中处理命令串的功能流程图。图9所示是如图8中所示地处理命令串的过程的逻辑流程图。图10所示是用于创建适于在图9中所示的命令串处理内使用的小命令实例的示例性过程的逻辑流程图。图11所示是用于填充适于在如图9中所示的命令处理内使用的小命令的属性的示例性过程的逻辑流程图。图12所示是用于执行适于在图9中所示的命令处理内使用的小命令的示例性过程的逻辑流程图。图13是适于在图2中所示的基于对象的管理工具框架内使用的示例性扩展类型管理器的功能框图。图14示出在图2中所示的基于对象的管理工具框架内实现的比较小命令的示例性句法。图15示出比较小命令的调用以及所生成的结果的例子。图16所示是用于执行基于关键字的比较过程的示例性过程的逻辑流程图。图17所示是用于执行基于顺序的比较过程的示例性过程的逻辑流程图。图18所示是适于在图17中所示的基于顺序的比较过程内使用的基于顺序的对象比较过程的逻辑流程图。图19所示是适于在图17中所示的基于顺序的比较过程内使用的基于顺序的文本比较过程的逻辑流程图。图20示出另一种用于实现λ表达式的比较小命令的示例性句法。图21所示是适于在图16中使用的用于执行与每个比较对象的基于关键字的比较的示例性过程的流程图。图22所示是适于在图21中使用的用于比较参考对象和比较对象间属性值的示例性过程的流程图。图23所示是适于在图21中使用的用于发放结果的示例性过程的流程图。(5)具体实施方式简单地说,本比较技术在同样类型、相似类型、或不同类型的对象上操作。该比较允许结果被自动地用作最终可修补问题的另一操作的输入。以下详细描述被分为若干章节。第一节描述了本比较技术可在其中操作的示例性计算环境。第二节描述了可其中可结合本比较技术的基于对象的管理工具环境的示例性框架。这包括对于该示例性框架的各个组件以及这些组件的操作的详细描述。第三节描述该比较技术及其操作。第一节示例性计算环境图1示出可用于实现本比较技术的示例性计算设备。在最基本的配置中,计算设备100通常包括至少一个处理单元102和系统存储器104。取决于该计算设备的确切配置和类型,系统存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存、等等)或这两者的某种组合。系统存储器104通常包括操作系统105、一个或多个程序模块106,且可包括一个或多个程序数据107。系统存储器104还包括基于组件的框架120,它支持组件(包括属性和事件)、对象、继承、多态、反射,并提供诸如由华盛顿州雷蒙德市微软公司制造的.NETTM等面向对象的基于组件的应用程序编程接口(API)。系统存储器104还包括管理工具框架200,它与基于组件的框架120交互以支持管理工具(未示出)的开发。基于组件的框架120和管理工具框架200可作为操作系统105的一部分驻留(如图所示),或可作为程序模块106的一部分驻留。此基本配置在图1中由虚线108内的那些组件示出。计算设备100可具有额外的特征或功能。例如,计算设备100还可包括诸如例如磁盘、光盘、或磁带等额外的数据存储设备(可移动和/或不可移动)。此类额外的存储在图1中由可移动存储109和不可移动存储110示出。计算机存储介质可包括以用于诸如计算机可读指令、数据结构、程序模块、或其它数据等信息的存储的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的例子。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术,CD-ROM、数字多功能盘(DVD)或其它光存储,磁带盒、磁带、磁盘存储或其它磁存储设备,或任何其它可用于存储期望信息并可由计算设备100访问的介质。任何此类计算机存储介质可以是设备100的一部分。计算设备100还可具有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等输入设备112。还可包括诸如显示器、扬声器、打印机等输出设备。这些设备在本领域中是公知的,且无需在此详细讨论。计算设备100还可包含允许该设备诸如通过网络与其它计算设备118通信的通信连接116。通信连接116是通信介质的一个例子。通信介质通常可由诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块、或其它数据具体化,并且包括任何信息传递介质。术语“已调制数据信号”意指其一个或多个属性按在信号中编码信息的方式设置或改变的信号。作为例子,而非限制,通信介质包括诸如有线网络或直线连接的有线介质,以及诸如声学、RF、红外及其它无线介质的无线介质。如本文所使用的术语计算机可读介质包括存储介质和通信介质两者。第二节管理工具框架图2是概括地示出示例性管理工具框架200的概观的框图。管理工具框架200包括一个或多个主机组件202、平台专用组件204、主机无关组件206、以及处理程序组件208。主机无关组件206可与其它组件(即,主机组件202、平台专用组件204、及处理程序组件208)的每一个通信。这些组件的每一个在下文简要描述,并按需在后续章节中更详细地描述。主机组件主机组件202包括一个或多个主机程序(例如主机程序210-214),它们向用户或其它程序展示相关联应用程序的自动化特征。自动化特征可使导航、诊断、配置、生命周期、操作等等自动化。每个主机程序210-214可以用其自己特有的样式来展现这些自动化特征,诸如经由命令行、图形用户界面(GUI)、语音识别接口、应用程序编程接口(API)、脚本语言、web服务等来展现。然而,主机程序210-214的每一个通过由管理工具框架提供的机制来展现一个或多个自动化特征。在此例中,该机制使用小命令(cmdlet)向相关联主机程序210-214的用户显露管理工具能力。此外,该机制使用一组主机提供的接口,以将管理工具环境嵌入到与对应主机程序210-214相关联的应用程序内。贯穿以下的讨论,术语“小命令”用于指在参考图2-13所描述的示例性管理工具环境内所使用的命令。因而,小命令对应于传统管理环境中的命令,但和这些传统命令相当不同。例如,小命令通常在大小上比它们的对等命令小,因为小命令可利用由管理工具框架提供的公用功能,诸如语法分析、数据确认、出错报告等。因为此类公用功能可被实现一次和测试一次,因此贯穿管理工具框架使用小命令允许与应用程序专用功能相关联的增量开发和测试成本与传统环境相比相当的低。此外,和传统环境形成对比,小命令无需是独立的可执行程序。相反,小命令可在管理工具框架内的各个同样的进程中运行。这允许小命令在彼此间交换“活”对象。交换“活”对象的这一能力允许小命令直接在这些对象上调用方法。因而,术语“活”对象指具有直接可调用的方法的对象。相反,“死”对象指不具有直接可调用的方法的对象。创建和使用小命令的细节将在下文更具体地描述。概括而言,每个主机程序210-214管理用户和管理工具框架内的其它组件间的交互。这些交互可包括参数的提示、出错报告等等。通常,每个主机程序210-214可提供其自己的一组专用主机小命令(例如,主机小命令218)。例如,如果主机程序是电子邮件程序,则该主机程序可提供与信箱和消息交互的主机小命令。即使图2示出主机程序210-214,本领域技术人员应理解,主机组件202可包括与现有或新创建的应用程序相关联的其它主机程序。这些其它主机程序也会将由管理工具环境提供的功能嵌入到其相关联的应用程序内。主机程序提供的处理将在下文联合图7详细描述。在图2所示的例子中,主机程序可以是管理控制台(即,主机程序210),它提供简单、一致的管理用户界面,以供用户创建、保存、及打开管理计算设备的硬件、软件、及网络组件的管理工具。为实现这些功能,主机程序210提供一组用于在管理工具框架之上构建管理6UI的服务。也可将GUI交互展现为帮助向用户讲授由管理工具环境提供的脚本能力的用户可见的脚本。在另一例中,主机程序可以是命令行交互式外壳(即主机程序212)。命令行交互式外壳可允许输入到命令行上的外壳元数据216影响命令行的处理。在又一例中,主机程序可以是web服务(即,主机程序214),它使用各平台、编程语言和应用程序间的分布式计算和互操作性的工业标准规范。除了这些例子以外,第三方可通过创建用于其主机程序或其它主机程序的“提供者”接口和提供者小命令,来添加其自己的主机组件。提供者接口展现应用程序或基础结构,从而该应用程序或基础结构可被管理工具框架操纵。提供者小命令为导航、诊断、配置、生命周期、操作等提供自动化。提供者小命令展现一组完全异类的数据存储上的多态小命令行为。管理工具环境在和其它小命令类具有同样的优先级的提供者小命令上操作。提供者小命令是使用和其它小命令同样的机制来创建的。提供者小命令向管理工具框架展现应用程序或基础结构的特定功能。因而,通过小命令的使用,产品开发者只需创建一个主机组件,该主机组件然后允许其产品能够用许多管理工具来操作。例如,采用示例性管理工具环境,系统级图形用户界面帮助菜单可被集成和移植到现有的应用程序中。平台专用组件平台专用组件204包括计算系统(例如图1中的计算设备100)用于将管理工具框架从该框架所运行的平台的细节隔离的服务的集合。因而,对于每一类平台,都有一组平台专用组件。平台专用组件允许用户在不同的操作系统上使用同样的管理工具。简要地转向图3,平台专用组件204可包括元数据/上下文敏感输入组件302、帮助组件304、配置/注册组件306、小命令设置组件308、以及输出接口组件309。组件302-308和与数据库存储314相关联的数据库存储管理器312通信。语法分析器220和脚本引擎222与元数据/上下文敏感输入组件302通信。核心引擎224和帮助小命令组件304、配置/注册组件306、小命令设置组件308以及输出接口组件309通信。输出接口组件309包括由主机提供以输出小命令的接口。所输出的小命令随即可调用主机的输出对象以进行呈现。平台专用组件204也可包括日志记录/监察组件310,核心引擎224使用该组件和提供日志记录和监察能力的主机专用(即平台专用)服务通信。在示例性管理工具框架中,元数据/上下文敏感输入组件302提供命令、参数和参数值的自动完成。帮助小命令组件304提供基于主机用户界面的定制的帮助系统。处理程序组件回到图2,处理程序组件208包括传统实用程序230、管理小命令232、非管理小命令234、远程化小命令236、及web服务接口238。这些的每一个将在下文更详细地描述。管理小命令232(也称为平台小命令)包括查询或操纵与计算设备相关联的配置信息的小命令。因为管理小命令232操纵系统类型信息,它们是依赖于特定平台的。然而,每个平台通常具有提供和其它平台上的管理小命令232相似的行动的管理小命令232。例如,每个平台支持获取和设置系统管理属性(例如,get/process(获得/处理)、set/IPAddress(设置/IP地址))的管理小命令232。主机无关组件206经由公共API与管理小命令通信。非管理小命令234(有时称为基础小命令)包括对由管理小命令232和任何其它小命令提供的对象进行组合、分类、过滤及执行其它处理的小命令。根据本比较技术,非管理小命令234包括将在下文联合图14-32详细描述的“比较对象”小命令。非管理小命令234在每个平台上可以是相同的,并且提供一组经由公共API和主机无关组件206交互的实用程序。非管理小命令234和主机无关组件206间的交互允许在对象上反射,并且允许对所反射的对象进行不依赖于其(对象)类型的处理。因而,这些实用程序允许开发者编写非管理小命令一次,然后将这些非管理小命令应用到计算系统上所支持的所有类的对象。在以往,开发者必需首先理解要处理的数据的格式,然后编写仅处理该数据的应用程序。因而,传统应用程序仅能处理非常有限范围的数据。独立于其对象类型处理对象的一种示例性机制在下文联合图13进行描述。传统实用程序230包括诸如win32命令行可执行码等现有可执行码。每个传统实用程序使用文本流(例如stdin、stdout和stderr)和管理工具框架通信,文本流是对象框架内的一种对象类型。因为传统实用程序230使用文本流,因此由管理工具框架提供的基于反射的操作不可用。传统实用程序230在与管理工具框架不同的进程中执行。尽管未示出,其它小命令也可在进程外操作。与web服务接口238结合的远程化小命令236提供远程化机制,以通过诸如因特网或内联网(例如,图2中所示的因特网/内联网240)等通信介质访问其它计算设备上的交互式和程序性管理工具环境。在示例性管理工具框架中,远程化机制支持依赖于跨越多个独立控制域的基础结构的联合服务。该远程化机制允许脚本在远程计算设备上执行。脚本可在单个或多个远程系统上运行。脚本的结果可以在每个单独的脚本完成时处理,或者结果可以在各个计算设备上的所有脚本完成以后聚集并一起处理。例如,被示为主机组件202之一的web服务214可以是远程代理。在另一实施例中,web服务214可以是通过通信介质240和引擎通信的单独组件(未示出)。对于任一配置,web服务214然后和被配置成与其它主机组件通信以控制小命令的引擎通信。远程代理处理向目标系统上的语法分析器和管理工具框架的远程命令请求的提交。远程化小命令担当远程客户机,以提供对远程代理的访问。远程代理和远程化小命令经由经语法分析的流通信。可在协议层保护此经语法分析的流,或者可使用额外的小命令来加密并随后解密该经语法分析的流。主机无关组件主机无关组件206包括语法分析器220、脚本引擎222和核心引擎224。主机无关组件206提供组合多个小命令、协调小命令的操作、以及协调其它资源、会话以及作业与小命令的交互的机制和服务。示例性语法分析器语法分析器220提供用于从各个主机程序接收输入请求,并将输入请求映像到遍及管理工具框架(诸如在核心引擎224内)使用的统一小命令对象的机制。此外,语法分析器220可基于所收到的输入执行数据处理。语法分析器220提供容易地向用户展现同一能力的不同语言或句法的能力。例如,因为语法分析器220负责解释输入请求,因此语法分析器220内影响期望输入句法的代码改变本质上会影响管理工具框架的每个用户。因此,系统管理员可在支持不同句法的不同计算设备上提供不同的语法分析器。然而,用同一语法分析器操作的每个用户对于每个小命令会体验一致的句法。相反,在传统环境中,每个命令实现其自己的句法。因此,有了数以千计的命令,每个环境支持数种不同的句法,通常其中许多句法彼此不一致。示例性脚本引擎脚本引擎222提供用脚本将多个小命令捆绑到一起的机制和服务。脚本是在严格的继承规则下共享会话状态的命令行的聚集。基于输入请求中提供的句法,脚本内的多个命令行可以同步或者异步地执行。脚本引擎222具有处理诸如循环和条件子句等控制结构,以及处理脚本内的变量的能力。脚本引擎还管理会话状态,并基于策略(未示出)向小命令提供对会话数据的访问。示例性核心引擎核心引擎224负责处理由语法分析器220标识的小命令。简要地转向图4,示出了管理工具框架200内的示例性核心引擎224。该示例性核心引擎224包括管道处理器402、加载器404、元数据处理器406、出错和事件处理程序408、会话管理器410、以及扩展类型管理器412。示例性元数据处理器元数据处理器406被配置成访问和存储诸如图3所示的数据库存储314等元数据存储内的元数据。元数据可以经由命令行、在小命令类定义内提供。当执行它们的处理时,管理工具框架200内的不同组件可以请求元数据。例如,语法分析器202可以请求元数据以确认在命令行上提供的参数。示例性出错和事件处理器出错和事件处理器408提供错误对象,用于存储关于在处理命令行期间每个出错发生的信息。示例性会话管理器会话管理器410向管理工具框架200内的其它组件提供会话和状态信息。由会话管理器管理的状态信息可由任何小命令、主机、或核心引擎经由编程接口来访问。这些编程接口允许创建、修改和删除服从安全策略约束的状态信息。示例性管道处理器和加载器加载器404被配置成按照顺序加载存储器中的每个小命令,以供管道处理器402执行该小命令。管道处理器402包括小命令处理器420和小命令管理器422。小命令处理器420分派个别的小命令。如果小命令需要在一个或一组远程机器上执行,则小命令处理器420与图2中所示的远程化小命令236协调执行。小命令管理器422处理小命令聚集的执行。为了在从主机程序210-214接收到的输入上执行处理,小命令管理器422、小命令处理器420和脚本引擎222(图2)相互通信。该通信本质上可以是递归的。例如,如果主机程序提供脚本,该脚本可调用小命令管理器422以执行小命令,而该小命令自身可能也是脚本。该脚本随即可由脚本引擎222执行。核心引擎的一个示例性过程流在下文联合图14详细描述。示例性扩展类型管理器如前所述,管理工具框架提供一组允许对象的反射并允许对所反射的对象进行不依赖于其(对象)类型的处理的实用程序。管理工具框架200与计算系统上的组件框架(图1中的组件框架120)交互以执行此反射。如本领域技术人员应当理解的,反射提供了查询对象并获得该对象的类型,及随后对各对象和与该类对象相关联的属性进行反射以获得其它对象和/或期望值的能力。即使反射为管理工具框架200提供了对象上的可观数量的信息,反射仍集中于对象的类型。例如,当对数据库数据表进行反射时,所返回的信息是该数据表有两个属性列属性和行属性。这两个属性未提供关于数据表内“对象”的足够细节。当反射被用于可扩展标记语言(XML)和其它对象时,类似的问题也会出现。因而,扩展类型管理器412集中于类型的使用,而非集中于对象的类型,以确定对象是否能用于获得所需的信息。继续上文数据表的例子,该数据表有列属性和行属性的事实并不是特别值得关注。相反地,值得关注的是有一列包含关注的信息。因此,集中于使用,扩展类型管理器412将每行与一个“对象”相关联,并将每列与该“对象”的一个“属性”相关联。因而,扩展类型管理器412提供了从任何类型的可精确地分析语法的输入创建“对象”的机制。以此方式,扩展类型管理器412补充了由基于组件的框架120提供的反射能力,并将“反射”扩展到任何类型的可精确地分析语法的输入。总而言之,扩展类型管理器被配置成访问可精确地分析语法的输入(未示出),并将可精确地分析语法的输入与所请求的数据类型相关。扩展类型管理器412随即向诸如管道处理器402或语法分析器220等作出请求的组件提供所请求的信息。在以下讨论中,可精确地分析语法的输入被定义为可辨别其属性和值的输入。一些示例性的可精确地分析语法的输入包括Windows管理规程(WMI)输入、ActiveX数据对象(ADO)输入、可扩展标记语言(XML)输入、和诸如.NET对象等对象输入。其它可精确地分析语法的输入可包括第三方数据格式。简要地转向图13,示出了供管理工具框架内使用的示例性扩展类型管理器的功能框图。出于解释的目的,把由扩展类型管理器提供的功能(由圈内的数字“3”表示)与由传统的紧捆绑系统(tightlyboundsystem)提供的功能(由圈内的数字“1”表示),和由反射系统提供的功能(由圈内的数字“2”表示)进行对照。在传统的紧捆绑系统中,应用程序内的调用者1302直接访问对象A内的信息(例如,属性A和B、方法M1和M2)。如上所述,调用者1302必须事先知道由对象A在编译时提供的属性(例如,属性A和B)和方法(例如,方法M1和M2)。在反射系统中,类属代码1320(不依赖于任何数据类型)查询对所请求的对象进行反射1310、并向类属代码1320返回关于该对象(例如对象A)的信息(例如,属性A和B、方法M1和M2)的系统1308。尽管未在对象A中示出,所返回的信息可包括诸如供应商、文件、日期等附加信息。因此,通过反射,类属代码1320获得至少和紧捆绑系统所提供的一样的信息。反射系统还允许调用者1302无需任何关于参数的先验知识,即可查询系统并获得附加信息。在紧捆绑系统和反射系统中,新数据类型都不能被容易地结合到操作环境中。例如,在紧捆绑系统中,一旦交付了操作环境,该操作环境不能再结合新的数据类型,因为为了支持它们,它必须被重新构建。类似地,在反射系统中,每个对象类的元数据是固定的。因此,通常不进行新数据类型的结合。然而,有了本扩展类型管理器,新的数据类型能被结合到操作系统中。采用扩展类型管理器1322,类属代码1320可对所请求的对象进行反射,以获得由诸如第三方对象(例如,对象A’和B)、语义web1332、本体(ontology)服务1334等各种外部源提供的扩展数据类型(例如,对象A’)。如图所示,第三方对象可扩展现有对象(例如,对象A’)或者可以创建全新的对象(例如,对象B)。这些外部源的每一个可在类型元数据1340内注册其唯一的结构,并提供代码1342。当对象被查询,扩展类型管理器检查类型元数据1340以确定该对象是否已被注册。如果该对象未在类型元数据1340内注册,则执行反射。否则执行扩展反射。代码1342返回与被反射的类型相关联的附加属性和方法。例如,如果输入类型是XML,则代码1342可包括描绘XML用于从XML创文档建对象的方式的描述文件。因此,类型元数据1340描述了扩展类型管理器412应如何查询各类可精确地分析语法的输入(例如,第三方对象A’和B、语义web1332)以获得用于为该特定输入类型创建对象的期望属性,且代码1342提供获得这些期望属性的指令。结果,扩展类型管理器412提供了允许对所有类型对象进行“反射”的间接层。除了提供扩展类型以外,扩展类型管理器412提供附加查询机制,诸如属性路径机制、关键字机制、比较机制、转换机制、通配符(globber)机制、属性组机制、关系机制等。当输入命令串时,在以下“示例性扩展类型管理器的处理”一节中描述的这些查询机制的每一个都向系统管理员提供了灵活性。各种技术可被用于实现扩展类型管理器的语义。以下描述了三种技术。然而,本领域技术人员应理解,可使用这些技术的变体而不会偏离要求保护的本发明的范畴。在一种技术中,可提供一系列具有静态方法(例如,getproperty())的类。对象被输入到静态方法(例如,getproperty(object))中,且该静态方法返回一组结果。在另一种技术中,操作环境用适配器(adaptor)封装对象。因而不提供输入。适配器的每个实例具有作用于被封装对象并返回被封装对象的属性的getproperty方法。以下是示出此技术的伪代码ClassAdaptor{ObjectX;getProperties();}在又一种技术中,适配器类子类化该对象。传统上,子类化在编译前发生。然而,在某些操作环境中,子类化可动态发生。对于这些类型的环境,以下是示出此技术的伪代码ClassAAdaptor{getProperties(){returndata;}}因此,如图13中所示,扩展类型管理器允许开发者创建新的数据类型;注册该数据类型;并允许其它应用程序和小命令使用该新数据类型。相反,在现有的管理环境中,必须在编译时知道每种数据类型,从而与从该数据类型实例化的对象相关联的属性或方法可被直接访问。因而,以前很少进行由管理环境支持的新数据类型的添加。回到图2,总而言之,管理工具框架200不靠外壳来协调用户的命令输入的执行,而是相反,将该功能分为处理部分(例如,主机无关组件206)和用户交互部分(例如,经由主机小命令)。此外,该管理工具环境大大地简化了管理工具的编程,因为语法分析和数据确认所需的代码不再被包括在每个命令中,而是相反由管理工具框架内的组件(例如,语法分析器220)提供。以下描述管理工具框架内所执行的示例性处理。示例性操作图5-6图示出在管理工具环境内使用的示例性数据结构。图7-12图示出管理工具环境内的示例性处理流程。本领域技术人员应理解,某些处理可由与下述组件不同的组件执行,而不会偏离本发明的范畴。在描述在管理工具框架内执行的处理之前,描述在管理工具框架内使用的示例性数据结构。小命令对象的示例性数据结构图5是用于指定适于在图2中所示的管理工具框架内使用的小命令的示例性数据结构。当完成时,该小命令可以是管理小命令、非管理小命令、主机小命令、提供者小命令等等。以下讨论描述关于软件开发者的观点的小命令(即,提供者小命令)的创建。然而,每类小命令是以同样方式创建,并以相似方式操作的。小命令可以用诸如C#等的任何语言编写。此外,可使用脚本语言等编写小命令。当管理工具环境用.NET框架操作时,小命令可以是.NET对象。提供者小命令500(在下文称为小命令500)是具有小命令类名(例如,StopProcess504)的公有类。小命令500源自小命令类506(cmdlet)。以下联合图6描述小命令类504的示例性数据结构。每个小命令500与将名称(例如,Stop/Process(停止/进程))与小命令500相关联的命令属性502相关联。名称在管理工具环境中注册。如下文将描述的,当具有该名称(例如,Stop/Process)的命令串作为输入在命令行或脚本中提供时,语法分析器查看小命令注册表以标识小命令500。小命令500与为小命令的期望输入参数定义语法的语法机制相关联。该语法机制可直接或间接与小命令相关联。例如,小命令500示出了直接语法关联。在此小命令500中,声明了一个或多个公有参数(例如,ProcessName510和PID512)。公有参数的声明将输入对象的语法分析驱动至小命令500。或者,参数的描述可出现在诸如XML文档等外部源中。此外部源中的参数描述随即将输入对象的语法分析驱动至该小命令。每个公有参数510、512可具有与其相关联的一个或多个属性(即,伪指令)。伪指令可来自任何以下类别语法分析伪指令520、数据确认伪指令512、数据生成伪指令522、处理伪指令523、编码伪指令524、以及文档编制伪指令525。这些伪指令可由方括号括住。每个伪指令描述了一种要在以下期望的输入参数上执行的操作。诸如用户交互类型伪指令等的某些伪指令还可在类级应用。伪指令被存储在与小命令相关联的元数据中。这些属性也可影响在小命令内声明的参数的填充。以下联合图11描述填充这些参数的过程。核心引擎可应用这些伪指令以确保顺应性。小命令500包括第一方法530(此后可互换地称作BeginProcess(开始进程)方法530)和第二方法540(此后可互换地称作ProcessRecord(处理记录)方法540)。核心引擎使用第一和第二方法530、540以指导小命令500的处理。例如,第一方法530被执行一次,并执行设置功能。为每个需要由小命令500处理的对象(例如,记录)执行第二方法540内的代码542。小命令500还可包括在小命令500后进行清除的第三方法(未示出)。因此,如图5中所示,第二方法540内的代码542通常很简短,并且不包含诸如语法分析代码、数据确认代码等传统管理工具环境中所需的功能。因此,系统管理员无需学习复杂编程语言即可开发复杂的管理任务。图6是用于指定小命令的示例性数据结构600。总的来说,数据结构600提供一种用于清楚地表达管理工具框架和小命令间的合同的手段。数据结构600是源自小命令类604(CmdLet)的公有类。软件开发者指定将诸如“get/process(获得/进程)”和“format/table(格式化/表)”等名词/动词对与小命令600相关联的cmdletDeclaration602(小命令声明)。该名词/动词对在管理工具环境中注册。该动词或名词可内含于小命令名中。并且,类似于数据结构500,数据结构600可包括一个或多个可与联合数据结构500描述的一个或多个伪指令520-525相关联的公有成员(例如,Name(名称)630、Recurse(递归)632)。然而,在此示例性数据结构600中,每个期望的输入参数630和632分别与输入属性631和633相关联。输入属性631和633指定关于其各自参数630和632的数据应从命令行获得。因此,在此示例性数据结构600中,没有任何从由另一个小命令发出的通过管道传送的对象填充的期望的输入参数。因此,数据结构600不覆盖由小命令基类提供的第一方法(例如,BeginProcessing)或第二方法(例如,ProcessRecord)。数据结构600还可包括另一个不被识别为输入参数的成员640。另一成员640可用于存储基于伪指令之一所生成的,并且可以是私有或者公有的数据。因此,如数据结构600中所示,通过使用在特定小命令类中声明公有属性和伪指令,小命令开发者可以容易地为对其小命令的期望输入参数指定语法,并指定应对期望输入参数执行的处理,而无需小命令开发者生成任何底层逻辑。数据结构600示出小命令和语法机制间的直接关联。如上所述,此关联也可以是间接的,诸如通过在诸如XML文档等外部源内指定期望参数的定义。现在描述管理工具环境内的示例性过程流程。示例性主机处理流程图7所示是在图2中所示的管理工具框架内执行的主机处理的示例性过程的流程图。过程700在框701开始,接收到为特定应用程序启动管理工具环境的请求。该请求可通过诸如选择应用程序图标等键盘输入本地发送,或通过不同计算设备的web服务接口远程地发送。对于任一情景,处理继续前往框702。在框702,“目标”计算设备上的特定应用程序(例如,主机程序)建立其环境。这包括确定小命令的哪一子集(例如,管理小命令232、非管理小命令234、及主机小命令218)对用户可用。通常,主机程序会使所有非管理小命令234及其自己的主机小命令218可用。此外,主机程序会使管理小命令234的一个子集可用,诸如处理进程、磁盘等的小命令。因此,一旦主机程序使小命令的子集可用,管理工具框架被有效地嵌入到对应的应用程序内。处理继续前行至框704。在框704,通过特定应用程序获得输入。如上所述,输入可采取诸如命令行、脚本、语音、GUI等数种形式。例如,当经由命令行获得输入,则从输入到键盘上的键击检索输入。对于GUI主机,则基于与GUI相关联的输入机制组成串。处理在框706继续。在框706,向管理工具框架内的其它组件提供该输入供处理。主机程序可将输入直接转发给诸如语法分析器等其它组件。或者,主机程序可经由其主机小命令中的一个来转发输入。主机小命令可将其特定类型的输入(例如,语音)转化为一类由管理工具框架识别的输入(例如,文本串、脚本)。例如,取决于语音输入的内容,语音输入可被转换成脚本或命令行串。因为每个主机程序负责将其输入类型转换成由管理工具框架识别的输入,因此管理工具框架能接受来自任意数量的各种主机组件的输入。此外,管理工具框架提供一组丰富的实用程序,当经由其小命令中的一个转发输入时,该组实用程序执行数据类型间的转换。由其它组件对输入执行的处理在下文联合若干其它附图描述。主机处理在判定框708继续。在判定框708,判定是否接收到附加输入的请求。如果负责处理输入的其它组件之一需要来自用户的附加信息来完成其处理,则可能发生这种情况。例如,可能需要密码以访问某些数据、可能需要特定行动的确认等等。对于某些类型的主机程序(例如,语音邮件),诸如此类的请求可能不恰当。因此,主机程序可串行化状态、挂起状态、并发送通知,而不是向用户查询附加信息,从而稍后该状态可重新开始,并继续输入的执行。在另一变体中,主机程序可在预定时间段之后提供一默认值。如果收到对附加输入的请求,处理回到框704,获得附加输入。处理随即如上所述继续经过框706和708。如果未收到对附加输入的请求,且输入已被处理,则处理继续前进至框710。在框710,从管理工具框架内的其它组件接收到结果。结果可包括出错消息、状态、进度、等等。结果是由管理工具框架内的主机小命令识别和处理的对象形式。如将在以下描述的,为每个主机小命令编写的代码非常小。因此,无需大量开发成本中的投资,即可显示一组丰富的输出。处理在框712继续。在框712,可查看结果。主机小命令将结果转化为主机程序支持的显示样式。例如,返回的对象可由GUI主机程序使用诸如图标、吠犬(barkingdog)等图形描绘来显示。主机小命令为数据提供默认格式和输出。在可任选地显示结果后,即完成了主机处理。用于处理输入的示例性过程流程现在描述用于处理命令串的示例性过程。图8是图示通过图2中所示的管理工具框架内的语法分析器220和核心引擎224处理命令串850的功能流程图。该示例性命令串850将若干命令(即,proeess命令860、where命令862、sort命令864、以及table命令866)排入管道。命令行850可将输入参数传递给任何命令(例如,“handlecount>400”被传递给where命令862)。注意,处理命令860不具有任何相关联的输入参数。语法分析器220将可分析语法的流(例如,命令串850)语法分析成组成部分820-826(例如,where部分822)。每个部分820-826与小命令830-836之一相关联。语法分析器220和引擎224执行诸如语法分析、参数确认、数据生成、参数处理、参数编码、和参数文档编制等各种处理。因为语法分析器220和引擎224对命令行上的输入参数执行公共功能,管理工具框架200能向用户发放一致的出错消息。应当认识到,可执行小命令830-836和现有管理环境中的命令相比,需要更少的代码。每个可执行小命令830-836用其各自的组成部分820-826标识。此外,每个可执行小命令830-836将作为输入对象所输入(由箭头841、843和845表示)的对象输出(由箭头840、842、844和846表示)到下一管线化的小命令。可通过向对象传递引用(例如,句柄)来输入这些对象。可执行小命令830-836可随即对传入的对象执行额外的处理。图9是更详细地示出命令串的处理的逻辑流程图。命令串的处理开始于框901,其中语法分析器或脚本引擎识别输入内的命令串。一般而言,核心引擎执行小命令的数据流的建立与定序。对一个小命令的建立与定序在下文描述,但它可应用于管道中的每个小命令。处理在框904继续。在框904,标识出小命令。可通过注册来标识小命令。核心引擎确定小命令是本地的还是远程的。小命令可在以下位置执行1)在管理工具框架的应用程序域内;2)在和管理工具框架同一进程的另一应用程序域内;3)在同一计算设备上的另一进程内;或者4)在远程计算设备内。在同一进程内操作的小命令间的通信是通过对象进行的。在不同进程内操作的小命令间的通信是通过串行化的结构化数据格式进行的。一个示例性串行化的结构化数据格式是基于可扩展标记语言(XML)。处理在框906继续。在框906,创建小命令对象的实例。创建小命令的实例的示例性过程在下文结合图10描述。一旦创建了小命令对象,处理在框908继续。在框908,填充与小命令对象相关联的属性。如上所述,开发者在小命令类内或外部源内声明属性。简单地说,管理工具框架会基于为该属性所声明的名称和类型,将传入对象译解为从小命令类实例化的小命令。如果类型不同,可经由扩展数据类型管理器强制类型。如较早所提及的,在排入管道的命令串中,每个小命令的输出可以是对象句柄的列表。下一个小命令可输入此对象句柄的列表、执行处理、并将另一个对象句柄列表传递给下一个小命令。此外,如图6中所示,可将输入参数指定为来自命令行。填充与小命令相关联的属性的一种示例性方法将在下文结合图11描述。一旦填充了小命令,处理在框910继续。在框910,执行小命令。总的来说,由小命令提供的处理被执行至少一次,包括对小命令的每个输入对象的处理。因此,如果小命令是排入管道的命令串中的第一个小命令,则处理被执行一次。对于后续的小命令,对传递给小命令的每个对象执行处理。一种执行小命令的方法在下文结合图5描述。当输入参数仅来自于命令行时,小命令的执行使用基本小命令范例提供的默认方法。一旦完成执行小命令,处理前进至框912。在框912,小命令被清除。这包括为负责解除分配存储器等的相关联小命令对象调用析构函数。命令串的处理随后完成。用于创建小命令对象的示例性过程。图10所示是用于创建适于在图9中所示的命令串的处理内使用的小命令对象的示例性过程的逻辑流程图。在这点上,已开发了小命令数据结构,并指定了属性和期望输入参数。小命令已被编译和注册。在注册期间,类名(即,小命令名)被写入注册存储,并且与该小命令相关联的元数据已被存储。过程1000在框1001开始,其中语法分析器接收到指示小命令的输入(例如,键击)。语法分析器可通过从注册表内查找该输入,并将该输入与已注册的小命令之一相关联,来识别该输入为小命令。处理前进至框1006。在前进至框1006之前,可读入与该小命令对象类相关联的元数据。元数据包括任何与该小命令相关联的伪指令。伪指令可应用于小命令本身或应用于一个或多个参数。在小命令注册期间,注册代码将元数据注册到持久存储中。元数据可以用串行化格式存储在XML文件中、存储外部数据库中,等等。每个类别的伪指令在不同的阶段处理。每个元数据伪指令处理其自己的出错处理。在框1006,基于已标识的小命令类实例化小命令对象。处理在框1008继续。在框1008,获得关于小命令的信息。这可通过反射或其它手段发生。该信息关于期望的输入参数。如上所述,声明为公有的参数(例如,公有串Name630)对应于可在命令行上的命令串中指定,或在输入流中提供的期望输入参数。管理工具框架通过图13中所描述的扩展类型管理器,提供公共接口以供将信息返回(在需要的基础上)给调用者。处理在框1010继续。在框1010,应用适用性伪指令。适用性伪指令确保类被用于某些机器角色和/或用户角色中。例如,某些小命令仅可由域管理员使用。如果在适用性伪指令之一中指定的约束未被满足,就发生错误。过程在框1012继续。在框1012,使用元数据。在处理中的这个点上,还未输入整个命令串。然而,管理工具框架知道可用的小命令。一旦确定了小命令,管理工具框架通过对小命令对象进行反射得知所允许的输入参数。因此,一旦提供了小命令名的无岐义部分,管理工具框架可自动完成小命令,并且一旦在命令行上打入输入参数的无岐义部分,则自动完成输入参数。一旦输入参数的部分可无岐义地标识输入参数之一,自动完成可立即发生。此外,自动完成也可在小命令名与操作数上发生。处理在框1014继续。在框1014,过程等待,直到输入了小命令的输入参数。一旦用户诸如通过击回车键等来指示命令串的结束,这即可发生。在脚本中,新行指示命令串的结束。此等待可包括从用户获得关于参数的附加信息及应用其它伪指令。当小命令是排入管道的参数之一,处理可立即开始。一旦提供了必需的命令串和输入参数,处理即完成。用于填充小命令的示例性过程用于填充小命令的示例性过程在图11中示出,并于现在联合图5进行描述。在一个管理工具框架中,核心引擎执行为小命令填充参数的处理。在创建了小命令的实例后,处理在框1101开始。处理继续前进至框1102。在框1102,检索在小命令内声明的参数(例如,ProcessName)。基于小命令的声明,核心引擎识别传入输入对象将提供名为“ProcessName”的属性。如果传入属性的类型与在参数声明中指定的类型不同,将经由扩展类型管理器强制该类型。强制数据类型的过程在下面题为“示例性扩展类型管理器处理”的小节中解释。处理继续前进至框1103。在框1103,获得与参数相关联的属性。该属性标识了参数的输入源是命令行还是来自管道。处理前进至判定框1104。在判定框1104,判定属性是否指定输入源为命令行。如果输入源是命令行,处理在框1109继续。否则,处理在判定框1105继续。在判定框1105,判定是该使用在声明中指定的属性名,还是应该使用属性名的映射。此判定基于命令输入是否为参数指定映射。以下一行示出参数“ProcessName”到传入对象的“foo”成员的示例性映射$get-process|where{$_.hcount-gt500}|stop-process-ProcessName<-foo处理在框1106继续。在框1106,应用该映射。该映射将期望的参数名从“ProcessName”替换为“foo”,随后由核心引擎使用该参数名以对传入对象进行语法分析,并标识正确的期望参数。处理在框1108继续。在框1108,查询扩展类型管理器,以定位传入对象内的参数的值。如联合扩展类型管理器所解释的,扩展类型管理器取参数名,并且使用反射来以参数名标识传入对象内的参数。如果需要,扩展类型管理器还可为参数执行其它处理。例如,扩展类型管理器可通过上述的转换机制,将数据类型强制为期望的数据类型。处理继续前进至判定框1110。回到框1109,如果属性指定输入源为命令行,则从命令行获取数据。从命令行获取数据可经由扩展类型管理器来执行。处理随即前进至判定框1110。在判定框1110,判定是否有另一个期望的参数。如果有另一个期望的参数,处理回到框1102并如上述前进。否则,处理完成并返回。因此,如图所示,小命令担当用于切碎(shred)传入数据分成碎片以获取期望的参数的模板。此外,无需知道提供期望参数的值的传入对象的类型即可获得期望的参数。这与传统的管理环境相当不同。传统的管理环境是紧捆绑的,并且要求在编译时知道对象的类型。此外,在传统环境中,期望的参数将通过值或通过引用传递到函数中。因而,本语法分析(例如,“切碎”)机制允许程序员指定参数的类型,而不要求他们明确地知道如何获得这些参数的值。例如,给定以下小命令Foo的声明classFooCmdlet{stringName;BoolRecurse;}命令行句法可以是以下任何一种$Foo-Name(string)-RecurseTrue$Foo-Name<string>-RecurseTrue$Foo-Name(string)为了产生期望的句法,这组规则可由系统管理员修改。此外,语法分析器可支持多组规则,从而用户可使用一种以上的句法。本质上,与小命令结构相关联的语法(例如,stringName和BoolRecurse)驱动语法分析器。一般而言,语法分析伪指令描述作为命令串输入的参数如何映射到在小命令对象中标识的期望参数。检查输入参数类型以确定是否正确。如果输入参数类型不正确,则可将输入参数强制为正确。如果输入参数类型不正确且不能被强制,则打印用法错误。用法错误允许用户知道所期望的正确句法。用法错误可从文档编制伪指令获得描述句法的信息。一旦输入参数类型被映射或验证,小命令对象实例中对应的成员即被填充。在成员被填充时,扩展类型管理器提供输入参数类型的处理。简单地说,该处理可包括属性路径机制、关键字机制、比较机制、转换机制、通配符机制、关系机制以及属性组机制。这些机制的每一个在以下题为“扩展类型管理器处理”一节中详细描述,该节还包括说明性例子。用于执行小命令的示例性过程用于执行小命令的示例性过程在图12中示出,并将于现在进行描述。在一个示例性管理工具环境中,核心引擎执行小命令。如上所述,为每个输入对象执行第二方法540内的代码542。处理在框1201开始,其中小命令已被填充。处理在框1202继续。在框1202,从代码542检索语句以供执行。过程在框1206继续。在框1206,该语句被处理。处理随即前进至判定框1208。在框1208,判定代码是否包括另一语句。如果有另一语句,处理返回框1202以获取下一语句并如上所述继续。否则,处理继续前进至判定框1214。在判定框1214,判定是否有另一输入对象要处理。如果有另一输入对象,处理继续前进至框1216,用来自下一个对象的数据来填充小命令。图10中所描述的填充过程对下一个对象执行。处理随即返回框1202并如上述继续。一旦处理了所有对象,执行小命令的过程完成并返回。示例性扩展类型管理器处理如联合图13在上文简要提及的,扩展类型管理器可对所提供的对象执行附加处理。附加处理框可在语法分析器220、脚本引擎222或管道处理器402请求时执行。附加处理包括属性路径机制、关键字机制、比较机制、转换机制、通配符机制、关系机制以及属性组机制。本领域技术人员应理解,扩展类型管理器还可以用其它处理来扩展,而不会偏离要求保护的本发明的范畴。现在描述每个附加处理机制。首先,属性路径机制允许串导航对象的属性。在现有的反射系统中,查询可查询对象的属性。然而,在本扩展类型管理器中,可指定提供到对象的相继属性的导航路径的串。以下是属性路径的说明性句法A.B.C.D。每个分量(例如,A、B、C和D)包含可表示属性、有参数的方法、无参数的方法、字段、XPATH等的串。XPATH指定查询串以搜索元素(例如,“/FOO@=13”)。在串内,可包括特定字符以明确指示分量的类型。如果串不包含特定字符,则扩展类型管理器可执行查找以确定分量的类型。例如,如果分量A是对象,则扩展类型管理器可查询B是否为该对象的属性、该对象的方法、该对象的字段、或属性组。一旦扩展类型管理器为B标识了类型,即根据该类型执行处理。如果分量不是以上类型之一,则扩展类型管理器可进一步查询扩展源以确定是否有将类型A转换为类型B的转换函数。现在将使用说明性命令串,并显示相应的输出来描述这些及其它查找。以下是包括属性路径的说明性串$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)”。在描述这些属性路径之前,应当注意“name”、“ws”和“exe”指定了表属性。此外,应当注意,这些属性的每一个都是传入对象的直接属性,该传入对象最初由“get/process”(获取/进程)生成,然后通过各种小命令排入管道。现在描述这3个属性路径的每一个所涉及的处理。在第一个属性路径(即,“name.toupper”)中,name是传入对象的直接属性,并且其自身也是对象。扩展类型管理器使用上述的优先级查找来查询系统,以确定toupper的类型。扩展类型管理器发现toupper不是属性。然而,toupper可以是由串类型继承、在串内将小写字母转换到大写字母的方法。或者,扩展类型管理器可查询扩展元数据以确定是否有能将name对象转换为大写的任何第三方代码。一找到分量类型,即根据该分量类型来执行处理。在第二个属性路径(即,“ws.kb”)中,“ws”是传入对象的直接属性,且其自身也是对象。扩展类型管理器确定“ws”是整数。然后,扩展类型管理器查询kb是否为整数的属性、kb是否为整数的方法、并最后查询是否有任何代码知道如何取整数并将该整数转换到kb类型。注册第三方代码以执行此转换,并且执行转换。在第三个属性路径中(即,“exe*.ver*.description.tolower.trunk(30)”),有若干个分量。第一个分量(“exe*”)是传入对象的直接属性,而且也是对象。为了处理第二个分量(“ver*”),扩展类型管理器再一次在查找查询往下继续。“exe*”对象不具有“ver*”属性或方法,因此扩展类型管理器查询扩展元数据以确定是否有任何将可执行名称转换为版本的任何已注册代码。对于此例,此类代码存在。该代码可取可执行名称串并用其来打开文件,然后访问版本块对象,并返回该版本块对象的描述属性(第三分量(“description”))。扩展类型管理器随即为第四分量(“tolower”)和第五分量(“trunk(30)”)执行这个同样的查找机制。因此,如所示,扩展类型管理器可对命令串执行相当复杂的处理,而管理员无需编写任何特殊代码。表1示出为说明性串生成的输出。Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18,556officeoutlookMSMSGS13,248messenger表1另一种查询机制1324包括关键字。关键字标识了使数据类型的实例唯一的一个或多个属性。例如,在数据库中,一列可被标识为能唯一地标识每行(例如,社会保险号)的关键字。关键字被存储在与数据类型相关联的类型元数据1340内。此关键字随后可由扩展类型管理器在处理该数据类型的对象时使用。该数据类型可以是扩展数据类型或现有数据类型。另一种查询机制1324包括比较机制。简单地说,比较机制比较两个对象,以下将联合图14-23进行详细描述。如果两个对象直接支持比较功能,则执行该直接支持的比较功能。然而,如果两个对象都不支持比较功能,则扩展类型管理器可在类型元数据中查找支持在这两个对象间进行比较的已注册代码。下面示出调用比较机制的一系列说明性命令行串,以及表2中对应的输出。$$a=$(get-date)$start-sleep5$$b=$(get-date)$compare-time$a$bTicks51196579Days0Hours0Milliseconds119Minutes0Seconds5TotalDays5.92552997685185E-05TotalHours0.00142212719444444TotalMilliseconds5119.6579TotalMinutes0.0853276316666667TotalSeconds5.1196579表2compare-time小命令被编写成比较两个日期时间(datetime)对象。在此例中,DateTime对象支持IComparable接口。另一种查询机制1324包括转换机制。扩展类型管理器允许注册声明其执行特定转换的能力的代码。然后,当输入类型A的对象,且小命令指定类型B的对象时,扩展类型管理器可使用已注册转换之一来执行转换。为了将类型A强制为类型B,扩展类型管理器执行一系列转换。上述属性路径(“ws.kb”)示出了转换机制。另一种查询机制1324包括通配符机制。通配符指串内的通配字符。通配符机制输入具有通配符字符的串并生成一组对象。扩展类型管理器允许注册指定通配符处理的代码。上述属性路径(“exe*.ver*.description.tolower.trunk(30)”)示出了通配符机制。已注册过程可为文件名、文件对象、传入属性等等提供通配符处理。另一种查询机制1324包括属性组机制。属性组机制允许为一组属性定义名称。管理员随后可在命令串内指定该名称以获得该组属性。属性组可以用各种方式来定义。在一种方式中,可输入诸如“?”等预定义参数作为小命令的输入参数。操作环境一识别出该预定义参数,即列出传入对象的所有属性。该列表可以是允许管理员容易地检查(例如,“点击”)期望的属性并命名该属性组的GUI。属性组信息随即被存储在扩展元数据中。以下示出调用属性组机制的说明性串,以及表3中的对应输出。$get-process|where{$_.handlecount-gt500}|format-tableconfig在此说明性串中,定义了名为“config”的属性组以包括名称属性、进程id属性(Pid)以及优先级属性。关于此表的输入在以下示出。NamePidPrioritvETClient3528Normalcsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一种查询机制1324包括关系机制。与支持一种关系(即,继承)的传统类型系统形成对比,此关系机制机制支持表达类型间一种以上的关系。这些关系也被注册。关系可包括寻找对象所消耗的项,或寻找消耗对象的项。扩展类型管理器可访问描述各种关系的本体。使用扩展元数据及代码,可描述用于访问诸如OWL、DAWL等任何本体服务的规范。以下是使用关系机制的示例性串的一部分.OWL”string”。“OWL”标识符标识本体服务,“string”指定该本体服务内的特定串。因此,扩展类型管理器可访问由本体服务提供的类型。第三节示例性比较技术图14-23示出可在以上第二节中所讨论的基于对象的管理工具框架内操作的本比较技术的示例性实施例。本比较技术提供优于现有比较技术的若干优势。例如,本比较技术允许不同数据类型的对象彼此进行比较。此外,来自该比较技术的结果可被自动地用作可最终修补问题的另一操作的输入。在阅读以下详细描述后,这些及其它优势将变得显而易见。图14示出在图2所示的基于对象的管理框架内实现的比较小命令的示例性句法的实施例。第一句法1400对应于在图16的流程图中示出、并联合其描述的基于关键字的比较。第二句法1401对应于在图17的流程图中示出、并联合其描述的基于顺序的比较。为了区分这两种比较技术,当调用compare-object(比较对象)小命令时,在命令串中包括KeyBased(基于关键字)参数1406或OrderBased(基于顺序)参数1408。KeyBased参数1406包括开关(例如,“-KeyBased”)和关键字名。关键字名标识要比较哪些对象。于是,仅具有与该关键字名相关联的属性的对象被包括到比较中。关键字名可以是单个属性或一组属性。第一句法1400和第二句法1401都包括其它参数。一般而言,大多数参数包括开关和数据。开关表示当调用compare-object小命令时在命令串内出现的预定义文本。数据则取决于开关。例如,某些开关可能与布尔数据相关联。其它开关可能与属性相关联。某些开关可能不随其相关联数据被包括到命令串内。当这种情况发生,输入到命令串中的数据可变为依赖于顺序,或至少依赖于在该比较小命令的定义中为输入参数指定的任何属性。现在分别描述这些其它参数的每一个。ReferenceObject(参考对象)参数1402包括“-ReferenceObject”开关和参考对象。该参考对象标识将由其它对象对照来比较的一个或多个对象。ComparisonObject(比较对象)参数1404包括“-ComparisionObject”开关和比较对象。该比较对象标识对照参考对象来比较的一个或多个对象。如将示出的,可从基于对象的管道提供比较对象。因此,参考对象可被用作标准,并与任何数量的比较对象进行比较。例如,参考对象可以是计算设备的标准配置,每个比较对象可对应于系统管理员希望类似于标准配置进行配置的不同计算设备。Property(属性)参数1410包括“-Property”开关和属性名。属性名可列出一个或多个属性,或者列出一组属性。Property参数1410允许比较特定属性,而不是比较对象内的所有属性。这个指定特定属性的能力将被报告的非重要差异的数量最小化。例如,如果进程A当前未运行(在下文称作今日进程A),但它在昨天工作(在下文称作昨日进程A),Property参数1410允许已知在今日进程A和昨日进程A间不同的属性(例如,CPU时间,工作区)不被包括在比较内。因此,本比较技术的输出提供信息性更高的信息以帮助判定故障的原因。CaseSensitive(大小写敏感)参数1412包括“-CaseSensitive”开关和用于指示“False(假)”或“True(真)”的可任选布尔值。当包括具有“False”值的“-CaseSensitive”开关,则不考虑参考对象和比较对象内各个串的大小写。相反,当指定“True”值,则在确定差异时考虑各个串的大小写。当参考对象和比较对象是串类型时,可利用CaseSensitive参数1412。对于其它数据类型,可忽略CaseSensitive参数1412。Culture(文化)参数1414包括“-Culture”开关和文化设置值。所指定的文化设置值覆盖当前文化设置。将参考对象和比较对象视为具有同样的文化。当参考对象和比较对象是串类型时,可利用Culture参数1414,并确保用同种语言执行文本的比较。对于其它数据类型,可忽略Culture参数1414。IgnoreWhiteSpace(忽略空格)参数1416包括“-IgnoreWhiteSpace”开关和可任选布尔值。当该布尔值为“false”,在比较期间空格被视为文本的一部分。相反,如果该布尔值为“true”,则在比较期间忽略文本内的空格。当参考对象和比较对象是串类型时,可利用IgnoreWhiteSpace参数1416。对于其它数据类型,可忽略IgnoreWhiteSpace参数1416。RecordDifference(记录差异)参数1418包括“-RecordDifference”开关和可任选布尔值。当该布尔值为“false”,参考对象和比较对象间的差异不被发送到输出。相反,当该布尔值为“true”,差异被发送到输出。RecordEqual(记录相等)参数1420包括“-RecordEqual”开关和可任选布尔值。当该布尔值为“false”,参考对象和比较对象具有同样值的属性不被发送到输出。当该布尔值为“true”,参考对象和比较对象具有相同值的属性被发送到输出。PassThru(通过)参数1422包括“-PassThru”开关和可任选布尔值。当该布尔值为“false”,该比较输出关键字名、属性值、相等指示符以及副指示符(sideIndicator)。副指示符图解地指示是输出与参考对象相关联,还是输出与比较对象相关联。例如,左副指示符“<=”指示后面的信息是来自参考对象。右副指示符“=>”指示后面的信息是来自比较对象。相等副标识符“==”指示比较对象和参考对象具有相同的值。当该布尔值为“true”,参考对象和比较对象都被注释并输出。注意到,各种符号或图形都可用于副指示符,而不会偏离本比较技术的范畴。图15提供了示出调用比较小命令的命令串、并示出所生成的输出的例子。例子1510和1520都是基于表1502和表1504所示的信息示例。表1502和1504都有两行和两列进程名(ProcessName)和句柄计数(handlecount)。第一行对应于进程名为“MSH”的进程,第二行对应于进程名为“Calc”的进程。在表1502中,MSH的句柄计数为100,Calc的句柄计数为100。在表1504中,MSH的句柄计数仍为100,但Calc的句柄计数为500。作为说明,假设表1504中的信息比表1502中的信息晚生成10秒。在第一个例子1510中,在命令行上输入命令“$a=get-process”。如上文所解释的,当基于对象的管理框架遇到此命令,从get-process小命令生成的信息(例如,表1502)被分配给对象a。在10秒后,输入了以下的命令compare-object-ReferenceObject$a-ComparisonObject$(get-process)-KeyBasedName-PropertyHandlecount当基于对象的管理框架遇到以上命令,参考对象是与表1502中的信息相关联的对象“a”。比较对象是从生成表1504中的信息的get-process小命令生成的对象。在命令串和信号中包括KeyBased(基于关键字)参数1406,以对具有名为“ProcessName”(进程名)的属性的对象执行基于关键字的比较。该命令串还包括将“Handlecount”(句柄计数)标识为要比较的属性的Property(属性)参数1410。因此,对于每个具有ProcessName属性的比较对象,将其handlecount属性与参考对象中的handlecount属性相比较。输出1512随后指示MSH进程名在参考对象中具有同样的信息。输出1512也指示Calc进程名在参考对象和比较对象中具有不同的信息。在例子1520中,第一命令和例子1510中的一样,但第二命令如下compare-object-ReferenceObject$a-ComparisonObject$(get-process)-KeyBasedName-PropertyHandlecount-RecordDifferencefalse-RecordEqual因此,示例1520包括RecordDifference开关和RecordEqual开关。可将RecordDifference开关设为假,并将RecordEqual开关设为真。如上文所解释的,有了这些开关,输出1522不列出与参考对象或者比较对象相关联的Calc进程的句柄计数,因为RecordEqual参数指定仅输出相等的属性。尽管例子1510和1520示出了compare-object小命令的操作,本领域技术人员应当理解,可使用各种开关和其它小命令来表示任何数量的命令串以获得有用的信息。此外,如以上第二节中所描述的,一个小命令的结果可用管道运输到其它小命令。因而,因为compare-object小命令创建了标识每个对象及其差异的差异记录,此差异记录可由其它小命令进一步操纵。这些其它小命令可提供诸如过滤、报告、填数据库或分解差异记录中列出的差异的控制循环等处理。将差异记录用管道运输到控制循环的能力极大地增强了本比较技术的有用性。此外,该比较技术可生成一个或多个输出对象,它们以这些对象的完整语义在输出对象中可用的方式来封装原始参考对象和原始比较对象。在此实施例中,可将写到差异记录的信息作为注释添加到原始参考对象。扩展类型管理器可执行此加注。可将输出对象配置成包括参考对象和比较对象、有差异的对象、匹配的对象等的每一个。因为本比较技术具有生成封装原始对象一部分的输出对象的能力,所以可以先基于一组属性来比较各原始对象,然后在基于另一组属性对其进行处理,该另一组属性可不包括来自第一组的任何属性、或可包括其一部分。此外,差异指示符注释允许后续处理基于其自身的需要来选择它们自己的属性组。由输出封装原始对象的对象提供的另一个优点是可在输出对象上调用由原始对象展现的查询和控制方法。该比较技术的操作现在结合图16-23的流程图来描述。图16所示是用于执行基于关键字的比较过程的示例性过程的逻辑流程图。该过程在框1601开始,并前进至框1602。在框1602,检索参考对象。参考对象是在比较过程期间其它对象所对照来进行比较的对象。处理在判定框1604继续。在判定框1604,判定参考对象是否包括与以KeyBased参数指定的关键字名相关联的属性。当有多个关键字时,参考对象包括与多个关键字的每一个相关联的属性。如果参考对象不包括指定的属性,处理在判定框1610继续。在进一步的改进中,在前进至框1610之前,可将参考对象添加到将基于随命令所指定的参数发放的列表。否则,处理在判定框1606继续。在判定框1606,检查参考组以确定在参考组内是否已存在具有同样关键字值的参考对象。如果这样的参考对象存在,处理在判定框1610继续。否则,处理在判定框1608继续。在框1608,将参考对象添加到参考组。处理随即在判定框1610继续。在判定框1610,确定是否有另一个参考对象在比较过程中使用。如果有另一个参考对象,处理返回到框1602并如上述的继续。否则,将所有包含指定的一个或多个关键字的参考对象添加到参考组。处理在框1612继续。在框1612,使用参考组中的每个参考对象和每个可用的比较对象来执行比较。简单地说,在参考对象和每个比较对象间对每个以Property参数指定的属性进行比较,以下将联合图21进行详细描述。在执行此比较之后,处理随即完成。图21所示是适于在图16的框1612中使用的、用于将每个比较对象与参考对象进行比较的示例性过程的流程图。过程2100在框2101开始,并前进至框2102。在框2102,获得比较对象。如上所述,可以有多个比较对象。因此,检查每个比较对象以确定是否应对照参考对象来比较它。处理在判定框2104继续。在判定框2104,判定比较对象是否具有与关键字名相关联的属性。重要的是注意,可使用多个关键字。如果有多个关键字,参考对象和比较对象都必须具有与这多个关键字相关联的属性。如果比较对象不具有与关键字名相关联的属性,则处理前进至判定框2116,其中将比较对象添加到缺失列表,并且处理在以下描述的判定框2118继续。如果在框2104的判定断定比较对象的确具有与关键字名相关联的属性,处理在判定框2106继续。在判定框2106,确定比较对象是否为具有该关键字值的第一个比较对象。如果它不是第一个比较对象,处理也在判定框2118继续。否则,处理在判定框2108继续。在判定框2108,确定在参考组内是否存在具有同样关键字值的参考对象。如果不存在这样的参考对象,处理在框2114继续,其中发放仅比较对象记录。仅比较对象记录示意具有特定关键字的比较对象存在,但类似的参考对象不存在。如上所述,当将计算设备与标准设备进行比较时,此信息有助于通知潜在的配置问题。在发放仅比较对象记录后,处理又在判定框2118继续。然而,如果判定框2108的结果断定参考对象的确存在,则处理在框2110继续。在框2110,对参考对象和比较对象的属性值进行比较。简单地说,此比较对每个指定的属性进行比较,以下将联合图22进行详细描述。因此,如上所述,仅对关注的属性进行比较,而不是要求对每个属性进行比较。在比较了各属性值之后,处理在框2112继续。在框2112,从参考组移除参考对象。在此点上可移除参考对象,因为框2106检查比较对象是否与已被处理的另一比较对象重复。移除参考对象便于在稍后发放结果时进行枚举。因此,在检索并比较了所有比较对象之后,如果在参考组中仍存在任何参考对象,这就标识了差异。处理在判定框2118继续。在判定框2118,确定是否有另一个比较对象可供处理。如果有另一个比较对象,处理返回到框2102并如上述地继续。然而,一旦所有比较对象都已被处理,则处理在框2120继续。在框2120,发放比较的剩余结果。简单地说,所发放的结果是基于联合比较命令所指定的开关,以下将联合图23进行详细描述。处理随即完成。图22所示是适于在图21中使用的、用于在参考对象和比较对象间比较属性值的示例性过程的流程图。该过程在框2201开始,并前进至框2202。在框2202,将比较对象中的指定属性之一与参考对象中的对应属性进行比较。重要的是注意,参考对象和比较对象的数据类型不必相同。如果数据类型不同,则基于对象的管理框架的扩展类型管理器识别不同的数据类型,并以比较相似数据类型的方式将其转换。因此,可将比较对象转换成参考对象的数据类型。反过来,可将参考对象转换成比较对象的数据类型。此外,为了执行比较,每个指定属性可被单独转换。因此,本比较技术可比较不同类型的对象。本比较技术将参考对象视为可与同样被视为虚拟对象的比较对象相比较的虚拟对象。同样重要的是注意,比较可包括模糊比较,从而在报告出错前,参考对象和比较对象中属性的值可在误差界限之内。例如,如果误差界限被设置为1M字节,则10MB和12MB的值产生差异。然而,10.5MB和11MB的值不产生差异。此模糊比较改善了信噪比。因此,实现模糊比较的比较技术提供了更好且更显著有关的差异检测。可使用作为命令串的一部分提供的自定义比较器,如“-compare-objectcolorCompare-ReferenceObject$a-ComparisonObject$b”,来实现模糊比较。对于此特定例子,colorCompare(色彩比较)可比较存储不同颜色的文本串,从而“mossgreen”(苔绿色)与“sage”(灰绿色)被报告为相同。因此,自定义比较器允许在不同对象间更灵活地执行比较。一旦比较了指定的属性,处理在判定框2204继续。在判定框2204,判定比较对象中的属性值是否和参考对象中的属性值相等。如果两个值不相等,处理在框2210继续,其中可发放对于该指定属性在比较对象和参考对象间的差异的差异记录。此差异记录取决于随比较命令指定的参数。处理在判定框2212继续。然而,如果比较对象和参考对象中的属性值相等,处理在判定框2206继续。在判定框2206,判定对比较命令的调用是否指定要输出相等的对象。如上所述,实现此判定的一种方法是使用图14中所示的RecordEqual(记录相等)参数1420。如果不应在输出中包括相等的对象,则处理在判定框2212继续。否则,处理在框2208继续。在框2208,为比较对象发放相等记录。相等记录指示比较对象的值和属性。处理在判定框2212继续。在判定框2212,判定是否有需要比较的另一个指定属性。如果有另一个属性,处理返回到框2202并如上述地继续。否则,处理完成并结束。图23所示是适于在图21中使用的、用于发放结果的示例性过程的流程图。过程2300在框2301开始,并前进至框2302。在框2302,枚举参考组中的对象,并发放“仅参考对象”记录。因此,这输出了不具有对应比较对象的参考对象。处理在判定框2304继续。在判定框2304,判定是否应输出在缺失列表内标识的对象。如果不应输出缺失关键字对象,则处理完成。否则,处理在框2306继续。在框2306,发放缺失列表内标识的参考对象。处理随即完成并返回。图17所示是用于执行基于顺序的比较过程的示例性过程的逻辑流程图。对于某些管理任务,基于顺序的比较优于基于关键字的比较。例如,当比较访问控制列表(ACL)时,基于顺序的比较是较佳的。因为ACL指示用户的许可与访问权限,所以对这些权限进行分析的顺序是很重要的。处理在框1701开始,并前进至框1702。在框1702,获取参考对象。处理在框1704继续,获取了比较对象。如上所述,参考对象和比较对象的数据类型不必相同。扩展类型管理器处理需要在比较发生之前执行的任何转换。处理在判定框1702继续。在判定框1706,判定参考对象和比较对象的数据类型是否为文本。如果数据类型不是文本(例如,串、文件),则处理在框1708继续。在框1708,对参考对象和比较对象的属性进行比较。简单地说,当参考对象和比较对象的属性的值不同和/或顺序不同,则对象比较报告差异,以下将联合图18进行详细描述。处理在判定框1706继续。在判定框1706,判定是否有另一个比较对象。如果有,则处理返回到框1704,并如上述前进。否则,处理完成。返回到判定框1706,如果参考对象和比较对象的数据类型是文本,则处理在框1708继续。在框1708,在参考对象和比较对象间执行文本比较。简单地说,该文本比较与当前可用的基于文本的比较技术类似地操作,以下将联合图19进行详细描述。处理也前进至判定框1706,并如上述前进。尽管图17未示出多个参考对象,然而本领域技术人员应理解,可实现另一个判定框以容纳多个参考对象。图18所示是适于在图17中所示的基于顺序的比较过程内使用的基于顺序的对象比较过程的逻辑流程图。处理在框1801开始,并前进至框1802。在框1802,获取来自参考对象的属性。因为此比较是依赖于顺序的,通常按连续顺序获取各属性。处理在框1804继续。在框1804,获取来自比较对象的属性。获取比较对象中的属性的顺序和获取参考对象中的属性的顺序是一样的。处理前进至判定框1806。在判定框1806,判定参考属性和差异属性是否可比较。首先,该过程验证参考属性的名称是否与差异属性的名称相同。这可以用反射来执行。除了反射,本比较技术还提供如以上联合图13中的扩展类型系统所解释的属性别名。因此,通过使用属性别名,在比较期间可将参考对象和比较对象中不同的属性名视为等价物。例如,某些对象可使用属性名“ProcessName”来标识与进程的名称相关联的属性。其它对象可使用属性名“Name”来标识与进程的名称相关联的属性。通过将“ProcessName”作为“Name”的别名,在比较期间这两个不同对象的属性被视为相同。重要的是注意,扩展类型系统可将两个属性之一的数据类型强制为与另一个属性的数据类型相同。例如,如果参考属性是整数数据类型,而比较属性是串数据类型,则如以上联合图13所描述的,扩展类型管理器可将串强制为整数值。这与严格对象比较形成对比,在严格对象比较中,因为不同的数据类型,差异会产生错误。如果两属性不能立即彼此进行比较,处理在框1818继续。在框1808,为允许对两个属性进行比较,执行必需的转换。如上所述,这可涉及强制数据类型等等。一旦两个属性能进行比较,处理前进至框1810。在框1810,对两个属性进行比较。如上所述,该比较可利用自定义比较机制、执行模糊比较等等。一旦已对两个属性进行比较,处理前进至框1812。在框1812,基于在命令串内提供的开关来报告差异。差异可包括属性的值中的差异和/或顺序中的差异。处理在判定框1814继续。在判定框1814,判定是否要比较另一个属性。对于对象的基于顺序的比较,重要的是标识属性的值之间和/或属性的顺序之间的任何差异。如果有另一个属性,则处理返回到框1802,并如上述地前进。否则,处理完成。图19所示是适于在图17中示出的基于顺序的比较过程内使用的文本比较过程的逻辑流程图。处理在框1901开始,并前进至框1908。在框1908,对文本进行比较,直至标识出差异或直至文本的结尾。在框1908期间,文本比较可利用公知的文本比较技术。一旦检测到差异,或检测到结尾,处理前进至判定框1910。在判定框1910,判定是否到达了文本的结尾。如果已到达文本的结尾,处理前进至框1918。否则,处理前进至框1912。在框1912,执行对导致差异的文本的搜索。此搜索可在与参考对象或者比较对象相关联的文本中执行。执行此搜索,直至找到该文本或者直至完成指定的同步窗口。对于本领域技术人员,同步窗口的使用是公知的,且无需再加以解释。处理前进至判定框1914。在判定框1914,判定在搜索期间是否找到该文本。如果找到了该文本,处理前进至框1916,其中诸如通过在参考对象或者比较对象中注解所添加的文本来更新差异记录。处理随即返回到框1908,并如上述前进。如果在判定框1914未找到文本,则处理前进至框1918,其中以来自比较的信息更新差异记录。处理随即完成。图20示出compare小命令的另一种示例性句法。句法2000支持λ表达式。总的来说,λ表达式允许本比较技术基于从参考对象和/或比较对象的属性导出的、但不在对象本身上存在的关键字和值来比较两组对象。因此,为了获得必需的值,扩展类型系统不是简单地返回值,而是允许执行处理。句法2000包括以上联合图14所描述的许多参数。此外,句法2000可包括以下参数中的一个或多个ReferenceKey(参考关键字)参数2002、ComparisonKey(比较关键字)参数2004、ReferenceValue(参考值)参数2006、以及ComparisonValue(比较值)参数2008。这些参数也包括开关,并可包括与开关相关联的数据。ReferenceKey参数2002包括“-ReferenceKey”开关和参考关键字对象。参考关键字对象可以是任何为每个参考对象计算关键字的函数、脚本、λ表达式等等(在下文统称为λ表达式)。类似地,ComparisonKey参数2004包括“-ComparisonKey”开关和比较关键字对象,其中比较关键字对象可以是为每个比较对象计算关键字的λ表达式。ReferenceValue参数2006包括“-ReferenceValue”开关和参考值对象。参考值对象可以是为每个参考对象计算值的λ表达式。类似地,ComparisonValue参数2008包括“-ComparisonValue”开关和比较值对象。比较值对象可以是为每个比较对象计算值的λ表达式。λ表达式的使用最好通过例子来理解。因此,假设命令串包含以上属性2002-2008的每一个的λ表达式。此外,假设每个λ表达式基于对应对象的属性执行数据库检索。例如,与ReferenceKey参数2002相关联的参考关键字λ表达式可返回对于属性A的数据库查找结果。与ComparisonKey参数2004相关联的比较关键字λ表达式可返回对于属性B的数据库查找结果。在伪代码中,参考关键字λ表达式可表示为“{$db.fetch($_.A)}”,其中$db指数据库对象,.fetch($_.A)指使用扩展类型管理器,经由输入组中的单个参考对象的fetch方法检索属性A。类似地,比较关键字λ表达式的伪代码可表示为“{$db.fetch($_.B)}”。因此,在以上联合图16-19及23所描述的处理期间,只要获取了关键字并对其求值,即应用对应的关键字λ表达式。关键字相等性的测试使用如上述的相同规则。然而,可指定在各关键字间执行实际比较的另一λ表达式。从而,对于具有匹配关键字的每一参考对象和比较对象,比较小命令应用对应的关键字λ表达式。例如,如果参考值λ表达式为“{$db.fetch($_.C)}”,而比较值λ表达式为{$db.fetch($_.D)},则比较小命令将把$db.fetch($R.C)的结果与$db.fetch($C.D)的结果进行比较,其中$R是参考对象,$C是比较对象。此比较也可利用上述包括执行可任选值比较λ表达式的比较过程。在支持λ表达式的另一实施例中,可以用将从λ表达式计算所得的关键字和值作为注释添加到输入对象上的方式,来过滤参考对象和比较对象。指定λ表达式以支持本比较技术的这些及其它变体提供了标识错误时很大的灵活性。因此,通过使用λ表达式,只要每个参考对象的关键字函数生成兼容的结果,并且每个参考对象的值函数生成兼容的结果,则具有不同对象类型且无公有属性的参考对象可被比较。此外,用于每个对象的关键字或值函数可以是可调用外部系统能力(例如,数据库查找)并执行网络操作以从远程系统检索数据的任意复杂的计算。在进一步的改进中,关键字或值函数可提供允许对使用不同名称而语义上相等的属性进行比较的别名能力。指定λ表达式时生成的输出对象可包括计算所得的关键字和计算所得的值,作为所生成的对象的一部分,或者作为通过模式中对原始对象的注释。这允许使用计算所得的值进一步处理所生成的输出。在另一种改进中,关键字函数可用于为应从输入数据中排除的数据返回空值。通过应用λ表达式,比较可通过将通过模式中执行的一个比较的输出用作对另一比较的输入,跨越多个输入组(例如,参考对象)。当完成时,指示对象的来源的属性的名称和值可能改变。这允许在任意一组输入组间跟踪差异。在另一个变体中,比较可通过将多个输入组组合到单个流中来跨越多个输入组。尽管以上描述了具体实现和实施例的细节,然而此类细节旨在满足法定的公开义务,而不是要限制所附权利要求书的范畴。因此,由权利要求书定义的本发明不限于以上所描述的具体特征。相反,以落入所附权利要求书的适当范畴内的其形式或者修改的任一个来要求保护本发明,并根据等效技术方案的原则来恰当地解释本发明。权利要求1.至少一种具有执行一种方法的计算机可执行指令的计算机可读介质,所述方法包含获得一参考对象;获得至少一个比较对象;以及基于在基于对象的环境中的命令串内指定的至少一个参数,在所述参考对象与所述至少一个比较对象间执行比较。2.如权利要求1所述的计算机可读介质,其特征在于,所述至少一个比较对象是从在基于对象的环境中执行的小命令生成的。3.如权利要求1所述的计算机可读介质,其特征在于,所述至少一个参数包含基于关键字的开关和关键词,并且所述比较是在确认所述参考对象和所述比较对象包含与所述关键词相关联的属性之后执行的。4.如权利要求3所述的计算机可读介质,其特征在于,所述至少一个参数包含基于关键字的开关和关键词,所述关键词指定所述命令串上的表达式,所述表达式生成与所述参考对象相关联的参考关键字,并且所述比较是在确认所述参考关键字和与所述比较对象相关联的比较关键字相匹配之后执行的。5.如权利要求1所述的计算机可读介质,其特征在于,所述至少一个参数包含属性开关和至少一个属性,并且所述比较仅在所述至少一个属性上执行。6.如权利要求1所述的计算机可读介质,其特征在于,所述至少一个参数包含顺序开关,并且所述比较是以基于顺序的方式执行的。7.如权利要求6所述的计算机可读介质,其特征在于,所述参考对象与所述至少一个比较对象包含文本数据类型,并且所述比较包含文本比较。8.如权利要求7所述的计算机可读介质,其特征在于,所述至少一个参数还包含大小写敏感开关,并且所述文本比较是大小写敏感的。9.如权利要求7所述的计算机可读介质,其特征在于,所述至少一个参数还包含空格开关,并且所述文本比较在比较所述参考对象与所述比较对象时排除空格。10.如权利要求6所述的计算机可读介质,其特征在于,所述参考对象与所述至少一个比较对象包含非文本数据类型,并且所述比较将所述参考对象的属性的参考值与所述比较对象的对应属性的比较值相比较。11.如权利要求1所述的计算机可读介质,其特征在于,还包含基于所述至少一个参数和所述比较,生成输出记录。12.如权利要求11所述的计算机可读介质,其特征在于,所述输出记录包括所述参考对象与所述比较对象间的差异。13.如权利要求11所述的计算机可读介质,其特征在于,所述输出记录封装所述参考对象,并且在比较期间所标识的差异作为注释被添加到所述输出记录。14.如权利要求11所述的计算机可读介质,其特征在于,所述输出记录封装所述比较对象,并且在比较期间所标识的差异作为注释被添加到所述输出记录。15.如权利要求1所述的计算机可读介质,其特征在于,所述比较包含在所述命令串中被指定为表达式的自定义比较。16.如权利要求1所述的计算机可读介质,其特征在于,所述参考对象的参考值是由所述命令串中指定的表达式生成的,在比较期间将所述参考值和与所述比较对象相关联的比较值相比较。17.如权利要求1所述的计算机可读介质,其特征在于,所述比较对象的比较值是由所述命令串中指定的表达式生成的,在比较期间将所述比较值和与所述参考对象相关联的参考值相比较。18.如权利要求1所述的计算机可读介质,其特征在于,所述参考对象是第一数据类型,而所述比较对象是第二数据类型,并且所述数据类型中至少一种被强制,从而在执行所述比较之前,所述参考对象和所述比较对象具有同样的数据类型。19.一种具有计算机可执行指令的计算机可读介质,其特征在于,所述指令包含在基于对象的环境中标识命令串内的比较小命令;基于所述命令串内的参考对象的指定获取参考对象;基于所述命令串内的比较对象的指定获取比较对象;在所述参考对象与所述比较对象间执行比较。20.如权利要求19所述的计算机可读介质,其特征在于,还包含生成差异记录作为所述比较的结果。21.如权利要求20所述的计算机可读介质,其特征在于,提供所述差异记录作为用管道从所述比较小命令传输的另一小命令的输入。22.如权利要求19所述的计算机可读介质,其特征在于,还包含获取所述命令串内的表达式,所述表达式标识要在所述参考对象与所述比较对象间执行的比较。23.如权利要求19所述的计算机可读介质,其特征在于,还包含获取所述命令串内的表达式,所述表达式生成标识了执行所述比较所必需的参考对象的属性的关键词。24.如权利要求19所述的计算机可读介质,其特征在于,还包含获取所述命令串内的表达式,所述表达式为所述参考对象生成参考值,在比较期间将所述参考值和与所述比较对象相关联的比较值相比较。25.如权利要求19所述的计算机可读介质,其特征在于,还包含获取所指定的属性,所指定的属性标识了当执行所述比较时所比较的所述参考对象和所述比较对象的特定属性。26.如权利要求19所述的计算机可读介质,其特征在于,所述比较是以基于顺序的方式执行的。27.如权利要求19所述的计算机可读介质,其特征在于,所述参考对象是第一数据类型,而所述比较对象是第二数据类型,并且在所述比较之前,所述参考对象被强制为所述第二数据类型。28.如权利要求19所述的计算机可读介质,其特征在于,所述参考对象是第一数据类型,而所述比较对象是第二数据类型,并且在所述比较之前,所述比较对象被强制为所述第一数据类型。29.如权利要求19所述的计算机可读介质,其特征在于,所述参考对象是第一数据类型,而所述比较对象是第二数据类型,并且在所述比较之前,所述参考对象和所述比较对象被强制为具有同样的数据类型。30.一种系统,其特征在于,包含处理器;以及加载多个指令的存储器,所述多个指令执行一种方法,所述方法包含获取一参考对象;获取至少一个比较对象;以及基于在基于对象的环境中在命令串内指定的至少一个参数,在所述参考对象与所述至少一个比较对象间执行比较。31.如权利要求30所述的系统,其特征在于,所述至少一个比较对象是从在基于对象的环境中执行的小命令生成的。32.如权利要求30所述的系统,其特征在于,所述比较是在确认所述参考对象和所述比较对象包含与所述命令串上指定的关键词相关联的属性之后执行的。33.如权利要求30所述的系统,其特征在于,所述至少一个参数包含属性开关和至少一个属性,并且所述比较仅在所述参考对象和所述比较对象中的至少一个属性上执行。34.如权利要求30所述的系统,其特征在于,所述至少一个参数包含顺序开关,并且所述比较是以基于顺序的方式执行的。35.如权利要求30所述的系统,其特征在于,还包含基于所述至少一个参数和所述比较,生成输出记录。36.如权利要求34所述的系统,其特征在于,所述输出记录包括所述参考对象与所述比较对象间的差异。37.如权利要求35所述的系统,其特征在于,所述输出记录封装所述参考对象,并且在比较期间所标识的差异作为注释被添加到所述输出记录。38.如权利要求30所述的系统,其特征在于,所述比较包含在所述命令串中指定为表达式的自定义比较。39.如权利要求30所述的系统,其特征在于,所述参考对象的参考值是由所述命令串中指定的表达式生成的,在比较期间将所述参考值和与所述比较对象相关联的比较值相比较。40.如权利要求30所述的系统,其特征在于,所述参考对象是第一数据类型,并且所述比较对象是第二数据类型,并且所述数据类型中的至少一种被强制,从而在执行所述比较之前,所述参考对象和所述比较对象具有同样的数据类型。全文摘要本比较技术在具有同样类型、相似类型、或不同类型的对象上操作。可将多个比较对象对照一个或多个参考对象进行比较。可以从在基于对象环境中操作的小命令管道中的前一小命令获取比较对象。可以用基于顺序的方式或基于关键字的方式对参考对象和比较对象进行比较。此外,可指定标识在比较期间要比较参考对象和比较对象的哪些属性的特定属性。该比较可生成标识差异和/或相似性的输出。可用管道将该输出传输到另一个小命令以供进一步处理。文档编号G06F9/44GK1740970SQ20051008819公开日2006年3月1日申请日期2005年7月25日优先权日2004年8月27日发明者B·S·潘迪特,B·R·丹尼尔斯,J·W·特吕赫三世,J·P·斯诺弗,J·S·纽曼申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1