用于提供数据驱动命令行输出的机制的制作方法

文档序号:6475066阅读:206来源:国知局

专利名称::用于提供数据驱动命令行输出的机制的制作方法
技术领域
:本发明涉及命令行环境,尤其涉及对通过命令行环境输入的命令的输出。
背景技术
:许多操作环境都提供一种用于把多个应用程序(例如实用程序)“缝合”(即管线化)起来以创建可在操作系统的命令行上输入的定制特别命令。通常,这些命令可在系统管理工具中使用,诸如用于管理系统属性。命令中的每个“经管线连接的”实用程序通过传送文本来互相通信。因而,管线中的每个实用程序负责解析接收到的文本,并负责格式化输出文本。输出文本的格式化由命令中的代码执行,且通常基于在命令行上提供的对该命令的解释转换。因而,每个命令负责按需来格式化并显示输出。因此,需要一种机制,它提供增强式格式化选项且为了提供该增强式格式化选项,在命令中并不需要扩展代码。
发明内容本机制提供在支持基于对象命令管线的环境中的数据驱动的命令行输出。每个基于对象命令输入用于处理的可解析对象,并输出用于后面命令处理的另一可解析对象。该机制在操作上根据输入的可解析对象类型来引导命令的格式化及其随后处理上。获得诸如形状、要显示属性等等的类型的格式信息。可在基于XML的文档中指定格式信息。该机制利用一个或多个输出处理命令,诸如格式命令、标记命令、转换命令、变换命令、以及输出命令。可以各种方式在管线中安排这些输出处理命令以获取所需输出结果。图1示出了可使用示例性管理工具环境的示例性计算装置。图2是一般示出用于提供管理工具环境的示例性管理工具架构纵览的框图。图3是示出如图2所示的管理工具架构的主要专用组件中组件的框图。图4是示出如图2所示的管理工具架构的核心引擎组件中组件的框图。图5是用于指定适于在如图2所示的管理工具架构中使用的cmdlet的一示例性数据结构。图6是用于指定从图5所示cmdlet中导出的命令基本类型的示例性数据结构。图7是用于指定适于在如图2所示的管理工具架构中使用的cmdlet的另一示例性数据结构。图8是示出在图2所示的管理工具框架中执行的主要处理的示例性过程的逻辑流程图。图9是示出在图2所示的管理工具框架中执行的用于处理输入的示例性过程的逻辑流程图。图10是示出用于处理适于在如图9所示的处理输入的过程中使用的脚本的过程的逻辑流程图。图11是示出适于在如图10所示脚本处理过程中使用的脚本预处理过程的逻辑流程图。图12是示出用于施加适于在如图10所示脚本处理过程中使用的约束束的过程的逻辑流程图。图13是示出如图2所示管理工具框架中命令字符串的处理的功能流程图。图14是示出用于处理适于在如图9所示用于处理输入的过程中使用的命令字符串的过程的逻辑流程图。图15是示出用于创建适于在如图14所示命令字符串的处理中使用的cmdlet实例的示例性过程的逻辑流程图。图16是示出用于填充适于在如图14所示命令处理中使用的cmdlet属性的示例性过程的逻辑流程图。图17是示出用于执行适于在如图14所示命令处理中使用的cmdlet的示例性过程的逻辑流程图。图18是适于在如图2所示命管理工具框架中使用的的示例性扩展的类型管理器的功能框图。图19图示管线中输出处理cmdlet的示例性序列。图20示出了由如图19所示的输出处理cmdlet之一执行的示例性处理。图21图示在图20处理期间所访问的显示信息的示例性结构。图22是列出示例性输出处理cmdlet的示例性语法的表格。图23示出使用输出处理cmdlet的各种管线序列由out/console(输出/控制台)cmdlet提供的结果。具体实施例方式简言之,本机制提供数据驱动的命令行输出。以各种顺序把多个输出处理cmdlet用管线连接在一起以提供所需输出结果。输出处理cmdlet包括格式cmdlet、标记cmdlet、转换cmdlet、变换cmdlet以及输出cmdlet。显示信息以对象类型的格式化选项进行填充。该机制基于输入结构化数据(例如对象)类型在操作上引导格式化和随后的cmdlet处理。以下描述陈述了该机制在其中操作的特定示例性管理工具环境。其它示例性环境可包括该特定实施例的特征和/或其它特征,这些特征以便于格式化命令行数据的输出为目标。以下详细描述被分成若干章节。第一章节描述示例性操作工具环境可在其中操作的说明性计算环境。第二章节描述用于管理工具环境的示例性框架。随后的章节描述示例性框架的各个组件以及这些组件的操作。例如,关于“用于显示命令行数据的示例性过程”的章节结合图19-23描述了用于提供数据驱动命令行输出的示例性机制。示例性计算环境图1示出了可在示例性管理工具环境中使用的示例性计算装置。在非常基本的配置中,计算装置100通常包括至少一个处理单元102和系统存储器104。取决于计算装置的准确配置和类型,系统存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等等)、或两者的某些组合。系统存储器104通常包括操作系统105、一个或多个程序模块106,也可包括程序数据107。操作系统105包括基于组件的框架120,该框架支持组件(包括属性和事件)、对象、遗留、多态性、反映,并提供面向对象的基于组件应用编程界面(API),诸如华盛顿州Redmond的微软公司制造的.NETTM框架。操作系统105还包括与基于组件的框架120交互以支持管理工具(未示出)开发的管理工具框架200。基本配置在图1中由虚线108内的那些组件示出。计算装置100可具有附加特征或功能。例如,计算装置100还可包括诸如磁盘、光盘、或磁带的其它数据存储装置(可移动和/或不可移动)。这种其它存储器在图1用可移动存储器109和不可移动存储器110示出。计算机存储介质可包括以任何方法或技术实现的易失性和非易失性、可移动和不可移动的用来存储诸如计算机可读指令、数据结构、程序模块、或其它数据的信息的介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括,但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字化多功能光盘(DVD)或其它光学存储器、磁带盒、磁带、磁盘存储器或其它磁性存储装置、或可用来存储所需信息并可由计算装置100访问的任何其它介质。任何这种计算机存储介质可以是装置100的一部分。计算装置100还可具有诸如键盘、鼠标、笔、语音输入装置、触摸输入装置等等的输入装置112。还可包括诸如显示器、扬声器、打印机等等的输出装置114。这些装置在本领域中是众所周知的,无需在此赘述。计算装置100还可包含使装置能与其它计算装置118诸如在网络上进行通信的通信连接116。通信连接116是通信介质的一个示例。通信介质通常体现为计算机可读指令、数据结构、程序模块、或其它诸如载波或其它传输机制的已调制数据的信号,并包括任何信息传输介质。术语“已调制数据信号”意指具有以这种在信号中编码信息的方式来设置或改变的一个或多个特征的信号。作为示例,而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、RF、红外和其它无线介质的无线介质。在此所用的术语计算机可读介质包括存储介质和通信介质。示例性管理工具架构图2是一般示出示例性管理工具架构200纵览的框图。管理工具架构200包括一个或多个主机组件202、主机专用组件204、主机无关组件206、以及处理器组件208。主机无关组件206可与其它组件的每一个通信(即主机组件202、主机专用组件204、以及处理器组件208)。这些组件的每一个都在下面简述,并且会按需在随后章节中进行更详细的描述。主机组件主机组件202包括向用户或其它程序展现相关联应用程序自动化特征的一个或多个主机程序(例如主机程序210-214)。每个主机程序210-214能以其自己的特定风格来展现这些自动化特征,诸如通过命令行、图形用户界面(GUI)、语音识别界面、应用编程界面(API)、脚本语言、网络服务等等。然而,主机程序20-214的每一个通过由管理工具框架提供的机制来展现一个或多个自动化特征。在此例中,机制使用cmdlet向相关联主机程序210-214的用户披露管理工具能力。另外,该机制使用主机提供的一组界面来把管理工具环境嵌入到与相应主机程序210-214相关联的应用程序中。贯穿以下的讨论,术语“cmdlet”被用于指在参照图2-23描述的示例性管理工具环境中使用的诸命令。cmdlet对应于传统管理环境中的命令。然而,cmdlet与这些传统命令又很不相同。例如,通常cmdlet在尺寸上比其对照命令要小,因为cmdlet能利用管理工具框架提供的通用功能,诸如解析、数据校验、错误报告等等。由于可一次性地实现并一次性地测试这些通用功能,整个管理工具框架中cmdlet的使用使得关联于应用程序专用功能的渐进式开发和测试成本与传统环境相比能很低。此外,与传统环境相反,cmdlet不必是独立的可执行程序。相反,cmdlet可在管理工具框架内的相同过程中运行。这使得cmdlet能在彼此间交换“活动的”对象。交换“活动”对象的能力使cmdlet能够直接调用这些对象上的方法。创建和使用cmdlet的细节在下面进行更详细的描述。总的看来,每个主机程序210-214管理工具框架内用户和其它组件之间的交互进行管理。这些交互可包括对于参数、错误报告等等的提示。通常,每个主机程序210-213可提供自己的专用主机cmdlet(例如主机cmdlet218)组。例如,如果主机程序是电子邮件程序,该主机程序可提供与邮箱和消息交互的主机cmdlet。尽管图2示出了主机程序210-214,本领域技术人员将理解主机组件202可包括关联于现有或新创建的应用程序的其它主机程序。这些其它主机程序也将把由管理工具环境提供的功能嵌入其相关联应用程序中。由主机程序提供的过程在下面结合图8进行详细描述。在图2所示的示例中,主机程序可以是管理控制台(即主机程序210),它为用户提供简单、一致的管理用户界面以创建、存储、并打开对计算装置的硬件、软件和网络组件进行管理的管理工具。为了实现这些功能,主机程序210提供用来在管理工具框架的顶层建立管理GUI的一组服务。也可将GUI交互展现为帮助把管理工具环境提供的脚本能力教给用户的用户可见脚本。在另一示例中,主机程序可以是命令行交互外壳(即主机程序212)。命令行交互外壳可使外壳元数据216能在命令行上输入以影响命令行的处理。在又一示例中,主机程序可以是对跨平台、编程语言、以及应用程序的分布式计算和互操作性使用工业标准规范的网络服务(即主机程序214)。。除了这些示例,第三方可通过创建与它们的主机程序或其它主机程序一起使用的“第三方”或“供应商”界面和供应商cmdlet来添加它们自己的主机组件。供应商界面展现应用程序或基础架构,使得该应用程序或基础架构可由管理工具框架操纵。供应商cmdlet提供导航、诊断、配置、生命周期、操作等等的自动化。供应商cmdlet展示在完全不同种类的数据存储组上的多态性cmdlet行为。管理工具环境在供应商cmdlet上以与其它cmdlet类相同的优先级进行操作。使用与其它cmdlet相同的机制来创建供应商cmdlet。供应商cmdlet把应用程序或基础架构的特定功能展现给管理工具框架。因而,通过cmdlet的使用,产品开发者仅需要创建使他们的产品能以许多管理工具进行操作的一种主机组件。例如,有了示例的管理工具环境,可将系统级图形用户界面求助菜单集成并移植到现有应用程序。主机专用组件主机专用组件204包括计算系统(例如图1中的计算装置)用以把管理工具框架从该框架运行其上的平台的细节中隔离出来的服务集合。因而,每类平台都有一组主机专用组件。主机专用组件使用户能在不同操作系统上使用相同的管理工具。现在简单看一下图3,主机专用组件204可包括智能感应/元数据组件302、求助cmdlet组件304、配置/登记组件306、cmdlet设置组件308、以及输出界面组件309。组件302-308与关联于数据存储库314的数据库存储管理器312通信。解析器220与脚本引擎222与智能感应/元数据访问组件302通信。核心引擎224与求助cmdlet组件304、配置/登记组件306、cmdlet设置组件308、以及输出界面组件309进行通信。输出界面组件309包括由主机提供给输出cmdlet的界面。然后这些输出cmdlet能调用主机的输出对象以执行该呈现。主机专用组件204也可包括记录/审计组件310,它被核心引擎224用以与提供记录和审计能力的主机专用(即平台专用)服务通信。在一示例性管理工具框架中,智能感应/元数据访问组件302提供命令、参数、以及参数值的自动完成。求助cmdlet组件304基于主机用户界面提供定制求助系统。处理器组件再参看图2,处理器组件208包括遗留实用程序230、管理cmdlet232、非管理cmdlet234、遥控cmdlet236、以及网络服务界面238。管理cmdlet232(也称为平台cmdlet)包括查询或操纵关联于计算装置的配置信息的cmdlet。由于管理cmdlet232操纵系统类型信息,它们依赖于特定平台。然而,每个平台通常都具有提供与其它平台上的管理cmdlet232类似作用的管理cmdlet232。例如,每个平台都支持获取和设定系统管理属性(例如,“get/process”(“获取/过程”)、“set/IPAddress”(设定/IP地址))的管理cmdlet232。主机无关组件206通过在主机无关组件206中生成的cmdlet对象与管理cmdlet通信。cmdlet对象的示例性数据结构将在下面结合图5-7进行详细描述。非管理cmdlet234(有时称为基础cmdlet)包括在由管理cmdlet232提供的在对象上进行分组、排序、过滤、以及执行其它处理的cmdlet。非管理cmdlet234还可包括用于格式化和输出关联于经管线连接对象的数据的cmdlet。用于提供数据驱动命令行输出的示例性机制在下面结合图19-23进行描述。非管理cmdlet234在每个平台上可能都是相同的,并通过cmdlet对象提供与主机无关组件206交互的一组实用程序。非管理cmdlet234与主机无关组件206之间的交互允许对象上的反射(reflection),并允许在经反射对象上进行无关于其(对象)类型的处理。因而,这些实用程序使得开发者能够仅编写一次非管理cmdlet,然后就能将这些cmdlet应用到计算系统所支持的所有类对象上。过去,开发者不得不首先要首先处理数据的格式,然后编写应用程序只是为了处理该数据。因此,传统应用程序仅能处理很有限范围的数据。用于无关其对象类型处理对象的一示例性机制结合图18在下面描述。遗留实用程序230包括现有的可执行程序,诸如在cmd.exe下运行的win32执行程序。每种遗留应用程序230使用作为对象框架中对象类型的文本流(即,stdin和stdout)与管理工具框架通信。由于遗留实用程序230利用了文本流,由管理工具框架提供的基于反射操作不可用。遗留实用程序230在与管理工具框架不同的过程中执行。尽管未示出,其它cmdlet也可在过程外操作。遥控cmdlet236结合网络服务界面238,向遥控机制提供经诸如因特网或内联网(例如,图2中所示的因特网/内联网240)的通信介质访问其它计算装置上的交互式和可编程的管理工具环境。在一示例性管理工具架构中,遥控机制支持取决于跨多个独立控制域的基础架构的联合服务。遥控机制使脚本能在远程计算装置上执行。脚本可在单个或多个远程系统中上运行。当每个单独脚本完成时可处理脚本的结果,或者在各种计算装置上完成所有脚本之后可集合其结果并一起进行处理。例如,示作主机组件202之一的网络服务214可以是远程代理。远程代理处理远程命令请求向目标系统上的解析器和管理工具框架的提交。遥控cmdlet作为远程客户机以提供对远程代理的访问。远程代理和遥控cmdlet通过经解析流进行通信。在协议层上可保护该经解析流,或者可使用附加cmdlet来加密该经解析流,然后将其解密。主机无关组件主机无关组件206包括解析器220、脚本引擎222以及核心引擎224。主机无关组件206提供机制和服务以将多个cmdlet组合、协调cmdlet的操作、并协调其它资源、会话以及作业与cmdlet的交互。示例性解析器解析器220提供诸机制,用于从各种主机程序接收输入请求,并把该输入请求映射成贯穿管理工具框架诸如在核心引擎224中使用的统一cmdlet对象。另外,解析器220可基于收到的输入执行数据处理。一种基于输入用于执行数据处理的示例性方法在下面结合图12进行描述。本管理工具框架的解析器220提供向用户轻松展现具有相同能力的不同语言或语法的能力。例如,由于解析器220负责解释输入请求,解析器220中影响期望输入语法的对代码的改变将实质上影响管理工具框架的每个用户。因此,系统管理员可在不同计算装置上提供支持不同语法的不同解析器。然而,用相同解析器操作的每个用户都将体验到对于每个cmdlet的一致语法。相反,在传统环境中,每个命令实现其自己的语法。因而,有了成千上万的命令,每个环境就支持若干不同的语法,而通常其中许多互相之间都不一致。示例性脚本引擎脚本引擎222提供机制和服务以使用脚本把多个cmdlet联系起来。脚本是在严格的遗留规则下共享会话状态的命令行集合。基于输入请求中所提供的语法,可同步或异步地执行脚本中的多个命令行。脚本引擎222具有处理诸如循环和条件语句的控制结构以及处理脚本中变量的能力。脚本引擎还管理会话状态,并基于政策(未示出)使cmdlet能访问会话数据。示例性核心引擎核心引擎224负责处理由解析器220标识的cmdlet。现在简单看一下图4,示出了管理工具框架200中的示例性核心引擎224。示例性核心引擎224包括管线处理器402、加载器404、元数据处理器406、错误和事件处理器408、会话管理器410以及扩展的类型管理器412。示例性元数据处理器元数据处理器406被配置以访问和存储在诸如图3中所示数据库存储器314的元数据存储器中的元数据。通过在cmdlet类定义等等中的命令行提供元数据。在管理工具框架200中的不同组件可在执行其处理时请求元数据。例如,解析器202可请求元数据校验命令行上提供的参数。示例性错误和事件处理器错误和事件处理器408提供错误对象以在命令行的处理期间存储关于错误的每次发生的信息。对于有关特别适合本管理工具框架的一特定错误和事件处理器的其它信息,参见标题为“SystemandMethodforPersistingErrorInformationinaCommandLineEnvironment”的美国专利,申请号为10/413,054,该专利为本发明同一受让人所有,在此引入作为参考。示例性会话管理器会话管理器410向管理工具框架200中的其它组件提供会话和状态信息。由会话管理器管理的状态信息可由任何cmdlet、主机、或核心引擎通过编程界面进行访问。这些编程界面允许状态信息的创建、更改、以及删除。示例性管线处理器和加载器加载器404被配置成加载存储器中的每个cmdlet,以便管线处理器402执行该cmdlet。管线处理器402包括cmdlet处理器420和cmdlet管理器422。Cmdlet处理器420分发各个cmdlet。如果cmdlet需要在(一组)远程机器上执行,cmdlet处理器420用如图2所示的远程cmdlet236协调该执行。cmdlet管理器422处理cmdlet集合的执行。cmdlet管理器422、cmdlet处理器420以及脚本引擎222(图2)互相通信以便在从主机程序210-214接收的输入上执行该处理。通信本质上可以是递归的。例如,如果主机程序提供脚本,该脚本可调用cmdlet管理器422以执行其自身可能也是脚本的cmdlet。然后可由脚本引擎222执行该脚本。核心引擎的一示例性过程流结合图14在下面详述。示例性扩展的类型管理器如上所述,管理工具框架提供一组实用程序,它们允许对象上的反射并允许在经反射对象上进行无关其(对象)类型的处理。管理工具框架200与计算系统上的组件框架(图1中的组件框架120)交互以执行该反射。如本领域技术人员所知,反射提供查询对象、获知对象类型、以及然后在关联于该类对象的各种对象和属性上进行反射以获取其它对象和/所需值的能力。尽管反射向管理工具框架200提供了对象上的可观信息,发明者认为反射关注的是对象的类型。例如,当在数据库数据表上进行反射,所返回的信息是该数据表具有两个属性列属性和行属性。这两个属性并不提供关于该数据表中“对象”的充分细节。当反射用于可扩展标记语言(XML)和其它对象上时也出现了类似的问题。因而,发明者想像关注类型使用的扩展的类型管理器412。对该扩展的类型管理器,对象的类型并不重要。相反,扩展的类型管理器412对是否可使用对象来获取所需信息感兴趣。继续上述数据表示例,发明者理解知道该数据表具有列属性和行属性并不特别重要,并理解一个列包含有重要的信息。通过关注其使用,可使每个行与“对象”相关联,而使每个列与该“对象”的“属性”相关联。因而,扩展的类型管理器412提供一种机制以从任何类型的可精确解析的输入中创建“对象”。在这样做时,扩展的类型管理器412补充由基于组件框架120提供的反射能力,并把“反射”扩展到任何类型的可精确解析的输入中。总的看来,扩展的类型管理器被配置以访问可精确解析的输入(未示出),并把可精确解析的输入与被请求数据类型联系起来。然后扩展的类型管理器412向诸如管线处理器402或解析器220的请求组件提供请求信息。在以下讨论中,可精确解析的输入被定义为在其中能辨别属性和值的输入。某些示例性可精确解析的输入包括Windows管理设备(WMI)输入、ActiveX数据对象(ADO)输入、可扩展标记语言(XML)输入、以及诸如.NET对象的对象输入。其它可精确解析的输入可包括第三方数据格式。简单参看图18,显示了在管理工具架构中使用的示例性扩展的类型管理器的功能框图。为了解释,由扩展的类型管理器提供的功能(以圆圈内的数字“3”标注)与由传统的紧密绑定系统(以圆圈内的数字“1”标注)提供的功能、以及由反射系统(以圆圈内的数字“2”标注)提供的功能进行比较。在传统紧密绑定系统中,应用中的调用者1802直接访问对象A中的信息(例如,属性P1和P2、方法M1和M2)。如上所述,调用者1802必须预先知道属性(例如属性P1和P2)和方法(例如方法M1和M2)在编译时由对象A提供。在反射系统中,一般代码1820(不依赖于任何数据类型)查询系统1808,该系统在被请求对象上执行反射1810并向一般代码1820返回关于对象(例如对象A)的信息(例如,属性P1和P2、方法M1和M2)。尽管在对象A中未示出,被返回信息可包括附加信息,诸如分销商、文件、日期等等。因而,通过反射,一般代码1820至少获取紧密绑定系统提供的相同信息。反射系统还使调用者1802能在对参数没有任何预先了解情况下查询系统并获得附加信息。在紧密绑定系统和反射系统两者中,新数据类型不能轻易地结合到操作环境中。例如,在紧密绑定系统中,一旦交付了操作环境,操作环境就不能结合新数据类型,因为为了支持它们将不得不重建该操作环境。类似地,在反射系统中,用于每个对象类的元数据是固定的。因而,通常不能完成新数据类型的加入。然而,有了本扩展的类型管理器,就可把新数据类型结合到操作系统中去。有了扩展的类型管理器1822,一般代码1820可在请求对象上进行反射,以获取由诸如第三方对象(例如对象A’和B)、语义网络1832、本体服务1834等等的各种外部源提供的扩展的数据类型(例如对象A’)。如图所示,第三方对象可扩展现有对象(例如对象A’)或创建全新对象(例如对象B)。这些外部源的每一个可在类型元数据1840中登记其独特结构,并可提供代码1842。当查询对象时,扩展的类型管理器查看类型元数据1840以确定该对象是否已登记。如果该对象未在类型元数据1840中登记,执行反射。否则,执行扩展的反射。代码1842返回与在其上反射的类型相关联的附加属性和方法。例如,如果输入类型是XML,代码1842可包括描述使用XML从XML文档创建对象的方式的描述文件。因而,类型元数据1840描述扩展的类型管理器412应当如何查询各种类型的可精确解析输入(例如第三方对象A’和B、语义网络1832),以获取用来为该特定输入类型创建对象的所需属性,且代码1842提供指令以获取这些所需属性。作为结果,扩展的类型管理器412提供允许在所有对象类型上“反射”的间接层。除了提供扩展的类型以外,扩展的类型管理器412提供附加查询机制,诸如属性路径机制、关键词机制、比较机制、转换机制、globber(通配符)机制、属性设置机制、关系机制等等。在以下“示例性扩展的类型管理器处理”章节中描述的这些查询机制的每一种都向系统管理员提供输入命令字符串的灵活性。可使用各种技术来实现扩展的类型管理器的语义。这些技术如下所述。然而,本领域技术人员将理解可使用这些技术的变种,不背离请求保护的本发明的范围。在一技术中,可提供具有静态方法(例如getproperty())的一系列类。对象被输入到静态方法中(例如getproperty(object)),且静态方法返回一组结果。在另一技术中,操作环境把对象与适配器封装在一起。因而,没有提供输入。适配器的每个实例都有在经封装对象上作用的getproperty方法,并返回该封装对象的属性。以下是说明该技术的伪码ClassAdaptor{ObjectX;getProperties();}在又一技术中,适配器类对该对象分子类。通常,分子类在编译前发生。然而,在某些操作环境中,分子类可动态地发生。对于这些类型环境,以下是说明该技术的伪码ClassAdaptorA{getProperties(){returndata;}}因而,如图18所示,扩展的类型管理器使开发者能创建新数据类型、登记该数据类型、并使其它应用和cmdlet能使用新的数据类型。相反,在以前的管理环境中,在编译时不得不知道每个数据类型,以便可直接访问与从该数据类型例示的对象相关联的属性或方法。因此,过去很少完成添加由管理环境所支持的新数据类型。再参看图2,总的看来,管理工具框架200不依赖用于协调由用户输入的命令的执行的外壳,而是相反把功能拆分成处理部分(例如主机无关组件206)和用户交互部分(例如通过主机cmdlet)。另外,本管理工具环境极大地简化了管理工具的编程,因为需要用于解析和数据校验的代码不再包括在每个命令中,而是由管理工具框架中的组件(例如解析器220)提供。在管理工具框架中执行的示例性处理如下所述。示例性操作图5-7图示了在管理工具环境中使用的示例性数据结构。图8-17图示了管理工具环境中的示例性处理流。本领域技术人员将理解,可由不同于以下所述的组件的另外组件来执行某些处理,而不背离本发明的范围。在描述于管理工具框架的组件中执行的处理之前,先描述管理工具框架中使用的示例性数据结构。cmdlet对象的示例性数据结构图5是用来指定适于在如图2所示的管理工具架构中使用的cmdlet的示例性数据结构。当完成时,cmdlet可以是管理cmdlet、非管理cmdlet、主机cmdlet、供应商cmdlet等等。以下讨论从系统管理员角度来描述cmdlet的创建(即供应商cmdlet)。然而,每类cmdlet都以相同方式创建并以相似方式操作。可用任何语言诸如C#来编写cmdlet。另外,可使用脚本语言等等来编写cmdlet。当管理工具环境以.NET框架进行操作时,cmdlet可以是.NET对象。供应商cmdlet500(此后称为cmdlet500)是具有cmdlet类名称的公用类(例如StopProcess504)。cmdlet500源自cmdlet类506。cmdlet类506的示例性数据结构结合图6在下面描述。每个cmdlet500与把名称(例如Stop/Process(中止/处理))关联于cmdlet500的命令属性502相关联。名字在管理工具环境中登记。如下所述,解析器查看cmdlet登记以在把具有该名称(例如Stop/Process)的命令字符串提供为在命令行上或脚本中的输入时标识该cmdlet500。cmdlet500与把期望输入参数的语法定义给cmdlet的语法机制相关联。该语法机制可直接或间接地与cmdlet相关联。例如,cmdlet500示出了直接语法关联。在该cmdlet500中,声明了一个或多个公共参数(例如ProcessName510和PID512)。公共参数的声明把输入对象的解析导向cmdlet500。或者,参数的描述可出现在诸如XML文档的外部源中。然后,在此外部源中的参数描述将输入对象的解析导向cmdlet。每个公共参数510和512可具有与其相关联的一个或多个属性(即指示符)。这些指示符可来自以下类别的任一种解析指示符520、数据校验指示符521、数据生成指示符522、处理指示符523、编码指示符524以及文档指示符525。这些指示符包括在方括号中。每个指示符描述在以下期望输入参数上执行的操作。某些指示符还可在类级别上应用,诸如用户交互类型指示符。指示符存储在与cmdlet相关联的元数据中。这些属性的应用结合图12在下面进行描述。这些属性还可影响在cmdlet中声明的参数的填充。用于填充这些参数的一示例性过程结合图16在下面进行描述。核心引擎可应用这些指示符以确保一致性。cmdlet500包括第一方法530(此后可转而称为StartProcessing方法530)和第二方法540(此后可转而称为processRecord方法540)。核心引擎使用第一和第二方法530和540来引导cmdlet500的处理。例如,第一方法530可执行一次且执行设置功能。可对需要由cmdlet500处理的每个对象(例如记录)执行第二方法540中的代码542。cmdlet500还可包括在cmdlet500之后进行整理的第三方法(未示出)。因而,如图5所示,通常第二方法540中的代码542是很简短的,且并不包含传统管理工具环境中所需的功能,诸如解析代码、数据校验代码等等。因而,系统管理员不学习复杂的编程语言也能开发复杂的管理任务。图6是用于指定从图5所示cmdlet中导出的基本类602的示例性数据结构600。cmdlet基本类602包括一旦cmdlet包括hook语句以及相应切换在命令行上或在脚本中输入(一起称为命令输入)的任何时候提供附加功能的指令。示例性数据结构600包括参数,诸如布尔参数verbose610、whatif620以及confirm630。如下所述,这些参数对应于可在命令输入上键入的字符串。示例性数据结构600还可包括确定是否允许请求中用于执行的任务的安全方法640。图7是用于指定cmdlet的另一示例性数据结构700。总的看来,数据结构700提供用于明确表达管理工具框架和cmdlet之间契约的方法。与数据结构500相似,数据结构700是源自cmdlet类704的公用类。软件开发者指定把诸如“get/process”(“获得/过程”)和“format/table”(“格式化/表格”)等等的动词/名词对关联于cmdlet700的cmdletDeclaration702。在管理工具环境中登记动词/名词对。动词或名词可以是隐含在cmdlet名词中的。而且,与数据结构500相似,数据结构700可包括与结合数据结构500所述的一个或多个指示符520-526相关联的一个或多个公共成员(例如Name730、Recurse732)。然而在该示例性数据结构700中,期望输入参数730和732的每一个可分别与输入属性731和733相关联。输入属性731和733指定相应参数730和732的数据应当从命令行获取。因而,在该示例性数据结构700中,没有从由另一cmdlet发出的经管线连接对象填充的任一期望输入参数。因而,数据结构700不取代由cmdlet基本类提供的第一方法(例如StartProcessing)或第二方法(例如ProcessRecord)。数据结构700还可包括不被识别为输入参数的私有成员740。可使用私有成员740来存储基于命令之一生成的数据。因而,如在数据结构700中所示,通过对特定cmdlet类中公共属性和命令的声明的使用,cmdlet开发者可轻松把用于期望输入参数的语法指定给其cmdlet,并无需cmdlet开发者产生任何底层逻辑就指定应在期望输入参数上执行的处理。数据结构700示出cmdlet和语法机制之间的直接关联。如上所述,该关联也可以是间接的,诸如通过指定诸如XML文档的外部源中的期望参数定义。现在描述管理工具环境中的示例性过程流。示例性主机处理流图8是示出在如图2所示的管理工具框架中执行的主机处理的示例性过程的逻辑流程图。过程800从框801开始,其中已接收到起动对特定应用程序的管理工具环境的请求。该请求可通过诸如选择应用程序图标的键盘输入进行本地传送,或者通过不同计算装置的网络服务界面进行远程传送。对于任一情况,处理在框802继续。在框802,“目标”计算装置上的特定应用程序(例如主机程序)设立其环境。这包括确定哪些cmdlet子集(例如管理cmdlet232、非管理cmdlet234以及主机cmdlet218)对用户可用。通常,主机程序将使所有的非管理cmdlet234以及它自己的主机cmdlet218可用。另外,主机程序将使管理cmdlet234的子集可用,诸如处理过程、盘等等的cmdlet。因而,一旦主机程序使cmdlet子集可用,管理工具框架就被有效地嵌入相应的应用程序中。处理在框804继续。在框804,通过特定应用程序获取输入。如上所述,输入可采取若干种形式,诸如命令行、脚本、语音、GUI等等。例如,当通过命令行获取输入时,该输入从键盘上的键击来获得。对于GUI主机,字符串是基于GUI组成的。处理在框806继续。在框806,输入被提供给管理工具框架中的其它组件用于进行处理。主机程序可直接把输入传送给其它组件,诸如解析器。或者,主机程序可通过其主机cmdlet之一来传送输入。主机cmdlet可把其特定输入类型(例如语音)转换成由管理工具框架识别的输入类型(例如文本字符串、脚本)。例如,取决于语音输入的内容,可将语音输入转换成脚本或者命令行字符串。因为每个主机程序都负责把它们的输入类型转换成由管理工具框架识别的输入,管理工具框架可接收来自任意数量的各种主机组件的输入。另外,当通过其cmdlet之一传送输入时,管理工具框架提供丰富的执行数据类型之间转换的实用程序集。在由其它组件的输入上执行的处理结合若干其它附图在下面进行描述。主机处理在判定框808继续。在判定况808,确定是否收到对附加输入的请求。这在如果负责处理输入的其它组件之一需要来自用户的附加信息以便完成其处理时会发生。例如,可能需要密码以访问某些数据、可能需要特定动作的确认等等。对于某些类型的主机程序(例如语音邮件),如此的请求可能是不适当的。因而,主机程序可串行化状态、延缓该状态、以及发送通知,从而在晚些时候可恢复该状态并继续输入的执行,而不是向用户查询附加信息。在另一变化中,主机程序可在预定时间段后提供缺省值。如果收到了对附加输入的请求,处理回到框804循环,其中获得附加输入。然后处理通过如上所述的框806和808继续。如果未收到对附加输入的请求且已处理了输入,处理到框810继续。在框810,接收来自管理工具框架中其它组件的结果。该结果可包括错误消息、状态等等。结果是可由管理工具框架中主机cmdlet识别和处理的对象形式。如下所述,为每个主机cmdlet编写的代码是很少的。因而,无需开发成本中的大量投入就可显示丰富的输出集。处理在框812继续。在框812,可看到结果。主机cmdlet把结果转换为主机程序所支持的显示风格。例如,返回对象可由GUI主机程序使用诸如图标、吠犬等等的图形表示法来显示。主机cmdlet提供数据的缺省格式和输出。缺省格式和输出可利用结合图19-23如下所述的示例性输出处理cmdlet。在可选地显示结果后,主机处理完成。用于处理输入的示例性过程流图9是示出在图2所示的管理工具框架中执行的用于处理输入的示例性过程的逻辑流程图。处理在框901开始,其中输入通过主机程序进入并被传送给管理工具框架中的其它组件。处理在框902继续。在框902,接收来自主机程序的输入。在一示例性管理工具框架中,由解码输入并引导输入作进一步处理的解析器接收输入。处理在判定框904继续。在判定框904,确定输入是否是脚本。输入可以是脚本或表示命令行的字符串(此后称为“命令字符串”)的形式。命令字符串可表示经管线连接在一起的有关或多个cmdlet。尽管管理工具框架支持若干不同的主机,每个主机提供像脚本或者命令字符串的输入用于进行处理。如下所述,脚本和命令字符串之间的交互实际上是递归的。例如,脚本可有调用cmdlet的行。cmdlet本身也可以是脚本。因而,在判定框904,如果输入是脚本形式,处理在框906继续,其中执行脚本的处理。否则,处理在框908继续,其中执行命令字符串的处理。一旦完成了在框906或908中执行的处理,输入的处理完成。脚本的示例性处理图10是示出用于处理适于在如图9所示用于处理输入的过程中使用的脚本的过程的逻辑流程图。过程在框1001开始,其中已将输入标识为脚本。脚本引擎和解析器互相通信以执行以下功能。处理在框1002继续。在框1002,在脚本上执行预处理。简言之,参看图11,所示为适于在脚本处理过程1000中使用的脚本预处理过程1100的逻辑流程图。脚本预处理在框1101开始,并在判定框1102继续。在判定框1102,确定脚本是否是首次运行。该确定基于从登记处或者其它存储机制获取的信息。从存储机制中标识脚本并查看相关联数据。如果脚本以前未曾运行,则处理在框1104继续。在框1104,脚本在登记处中登记。这使有关脚本的信息能进行存储以便管理工具框架中组件后来的访问。处理在框1106继续。在框1106,从脚本中提取求助及文档,并将其存入登记处。而且,此信息以后可由管理工具框架中的软件访问。至此脚本已准备好进行处理,并返回到图10中的框1004。回到判定框1102,如果过程断定脚本以前曾运行过,则处理在判定框1108继续。在判定框1108,确定脚本是否曾在处理期间失败。该信息可从登记处获取。如果脚本未曾失效,则脚本已准备好进行处理,并返回到图10的框1004。然而,如果脚本已经失败则处理在框1110继续。在框1110,脚本引擎可通过主机程序通知用户该脚本以前已经失败。这个通知将使用户判定是继续还是退出该脚本。如上结合图8所述,取决于输入类型(例如语音、命令行)主机程序可用各种方法处理该请求。一旦接收来自用户的附加输入,脚本返回到图10的框1004进行处理或者放弃该脚本。回到图10的框1004,检索来自脚本的行。处理在判定框1006继续。在判定框1006,确定该行是否包括任何约束。约束由预定的开始字符(例如方括号“[”)和结束字符(例如结束方括号“]”)检测。如果该行包括约束,处理移到框1008。在框1008,应用包括在行中的约束。一般而言,约束提供一种管理工具框架中的机制以指定在脚本中输入的参数类型,并指定应该在参数上执行的校验逻辑。约束不仅可应用于参数,还可应用于在脚本中输入的任何结构类型,诸如变量。因而,约束提供解释性环境中的一种机制,以指定数据类型并校验参数。在传统环境中,系统管理员不能正式测试脚本中输入的参数。用于应用约束的示例性过程如图12所示。在判定框1010,确定来自脚本的行是否包括内置能力。内置能力是不由核心引擎执行的能力。可使用cmdlet或者诸如命令行内功能的其它机制来处理内置能力。如果该行没有内置能力,处理在判定框1014继续。否则,处理在框1012继续。在框1012,处理在脚本的行上提供的内置能力。示例内置能力可包括控制结构的执行,诸如“if”语句、“for”循环、转移指令等等。内置能力还可包括赋值型语句(例如a=3)。一旦已处理完内置能力,处理移到判定框1014。在判定框1014,确定脚本的行是否包括命令字符串。该确定基于行上的数据是否与已登记的命令字符串、以及可能cmdlet调用的语法相关联。如上所述,命令字符串和脚本的相互实际上是递归的,因为脚本可包括命令字符串而命令字符串可执行本身也是脚本的cmdlet。如果行不包括命令字符串,则处理在判定框1018继续。否则,处理在框1016继续。在框1016,处理命令字符串。总的看来,命令字符串的处理包括由解析器标识cmdlet类,并将相应的cmdlet对象传递给核心引擎用于执行。命令字符串还可包括可解析成若干单个cmdlet对象并由核心引擎分别处理的经管线连接的命令字符串。用于处理命令字符串的一示例性过程如下结合图14进行描述。一旦处理了命令字符串,处理在判定框1018继续。在判定框1018,确定在脚本中是否还有另一行。如果在脚本中有另一行,处理回到框1004循环,并如上所述在框1004-1016中继续。否则,处理完成。在框1008中用于应用约束的示例性过程如图12所示。过程在框1201开始,其中从脚本或者命令行上的命令字符串中检测到一约束。当该约束在脚本中时,约束和相关联结构可出现在同一行或者分别行上。当约束在命令字符串中时,约束及其相关联结构在行指示符(例如换行符)前出现。处理移到框1202。在框1202,从解释性环境中获取约束。在一示例性管理工具环境中,解析器解码输入并确定约束的出现。约束可来自以下种类之一谓词指示符、解析指示符、数据校验指示符、数据生成指示符、处理指示符、编码指示符、以及文档指示符。在一示例性解析语法中,指示符在方括号内并描述随后的结构。结构可以是函数、变量、脚本等等。如下所述,通过指示符的使用,将使脚本作者无需产生任意底层逻辑就能轻松在脚本或者命令行(即解释性环境)中键入并执行参数上的处理。处理移到框1204。在框1204,所获取的约束存储在相关联结构的元数据中。在已遇到一个或多个标记(标注约束的标记)之后,相关联结构被标识为第一非属性标记。处理移到框1206。在框1206,一旦在脚本或者命令字符串中遇到该结构,在元数据中定义的约束被应用到该结构中。约束可包括数据类型、谓词指示符1210、文档指示符1212、解析指示符1214、数据生成指示符1216、数据校验指示符1218、以及对象处理和编码指示符1220。指定数据类型的约束可指定由管理工具框架在其上运行的系统所支持的任何数据类型。谓词指示符1210是表示处理是否应当发生的指示符。因而,谓词指示符1210确保用于执行的环境是正确的。例如,脚本可包括以下谓词指示符[PredicateScript(“isInstalled”,”ApplicationZ”)]该谓词指示符确保在运行脚本之前在计算装置上安装了正确的应用程序。通常,可把系统环境变量指定为谓词指示符。来自指示符类型1212-1220的示例性指示符如表格1-5所示。然后脚本的处理完成。因而,用于在解释性环境中应用类型和约束的本过程使系统管理员无需编写用于执行本处理的底层逻辑就能轻松指定类型、指定校验要求等等。以下是在被指定如下的命令字符串上执行的约束处理的示例[Integer][ValidationRange(3,5)]$a=4.其中有通过由“[]”标记的属性标记指定的两个约束。第一属性标记表示变量是整数类型,而第二属性标记表示变量$a的值必须在3~5之间(包括3和5)。示例命令字符串确保如果变量$a在随后的命令字符串或行中赋值,将根据这两个约束来检查变量$a。因而,每个以下的命令字符串都将导致一错误$a=231$a=“apple”$a=$(get/location).约束在管理工具框架中的各个阶段上应用。例如,可应用性指示符、文档指示符以及解析方针指示符在解析器中的极早阶段上进行处理。一旦解析器已经完成了对所有输入参数的解析,数据生成指示符和校验指示符就在引擎中进行处理。以下表格示出了对各种类别的代表性指示符,以及对响应于指示符由管理工具环境执行的处理的解释。表格1.可应用性指示符表格2.解析方针指示符表格3.文档指示符表格4.数据校验指示符表格5.处理和编码指示符当在示例性管理工具框架在.NETTM框架中操作时,每个类别都有源自基本类别类(例如CmdAttribute)的基本类。基本类别类源自System.Attribute类。每个类别都具有解析器在类别处理期间调用的预定义函数(例如attrib.func())。脚本作者可创建源自定制类别类(例如CmdCustomAttribute)的定制类别。脚本作者还可通过从基本类别为该类别导出指示符类来扩展现有的类别类,并用其实现来取代预定义类。脚本作者还可取代诸指示符并把新的指示符添加到指示符的预定义集中。处理这些指示的顺序可存储在可由解析器访问的外部数据存储器中。管理工具框架寻找已登记类别并为该类别中的每个指示符调用函数(例如ProcessCustomDirective)。因而,通过把类别执行信息存储在持久存储器中,类别处理的顺序可以是动态的。在不同的处理阶段,解析器在持久存储器中进行检查以确定在那时是否需要执行任一元数据类别。通过从持久存储器中移除类别条目就使类别能轻易被废除。命令字符串的示例性处理现在描述用于处理命令字符串的一示例性过程。图13是图示通过如图2所示管理工具框架中的解析器220和核心引擎224进行命令字符串1350的处理的功能流程图。示例性命令字符串1350通过管线连接若干命令(即process(过程)命令1360、where(地点)命令1362、sort(排序)命令1364、以及table(表格)命令1366)。命令行1350可把输入参数传送给任一命令(例如“Handlecount>400”被传送给where命令1362)。注意,process命令1360没有任何相关联的输入参数。过去,每个命令负责解析与命令相关联的输入参数、确定输入参数是否有效、以及如果输入参数无效发布错误消息。由于命令通常由各种各样的编程人员编写,命令行上输入参数的语法并不太一致。另外,如果错误发生,各命令之间的错误(甚至是相同错误)消息也不太一致。例如,在UNIX环境中,“ls”命令和“ps”命令之间有很多不一致性。尽管都接受选项“-w”,由“ls”使用的“-w”用以表示页面宽度,而由“ps”使用的“-w”选项用以表示打印宽度输出(实质上忽略了页面宽度)。与“ls”命令和“ps”命令相关联的求助页面也具有若干不一致性,诸如一个有粗体选项而另一个没有、一个有按字母对选项排序而另一个没有、要求某些选项有破折号而某些没有。本管理工具框架提供更一致的方法,并使每个开发者编写的重复代码最少。管理工具框架200提供语法(例如文法)、相应语义学(例如字典)、以及参考模型以使开发者能轻松获益于由管理工具框架200提供的共同功能。在进一步描述本发明之前,先提供对自始至终出现在本说明书中的其它术语的定义。输入参数指的是cmdlet的输入字段。自变量指的是传递给与argv数组中单一字符串等价的cmdlet输入参数,或者是作为cmdlet对象中的单一元素传送的输入参数。如下所述,cmdlet提供用于指定语法的一种机制。该机制能直接或间接提供。自变量是选项、选项-自变量、或者在命令名称之后的操作数之一。自变量的示例基于以下命令行给出findstr/i/d\winnt;\winnt\system32aa*b*.ini在以上命令行中,“findstr”是自变量“0”,“/i”是自变量1,“/d\winnt;\winnt\system32”是自变量2,“aa*b”是自变量3,而“*.ini”是自变量4。“选项”是一般用于指定对程序缺省行为的改变的cmdlet的自变量。继续以上的示例命令行,“/i”和“/d”是选项。“选项变量”是某些选项后的输入参数。在某些情形中,选项-自变量被包括在同一自变量字符串中作为选项。在其它情形中,选项-自变量被包括为下一自变量。再参看以上命令行,“winnt;\winnt\system32”是可选-自变量。“操作数”是对cmdlet的自变量,通常被用作对于程序而言提供完成程序处理所必须的对象信息的对象。操作数在命令行中通常在选项后面。再次参看示例命令行,“aa*b”和“*.ini”是操作数。“可解析流”包括自变量。参看图13,解析器220把可解析流(例如命令字符串)解析成组成部分1320-1326(例如where部分1322)。1320-1326中每个部分与cmdlet1330-1336之一相关联。解析器220和引擎224执行各种处理,诸如解析、参数校验、数据生成、参数处理、参数编码、以及参数文档编制。由于解析器220和引擎224执行命令行上输入参数的共同功能,管理工具框架200能向用户发出一致的错误消息。可以理解,根据本管理根据框架编写的可执行cmdlet1330-1336比在现有管理环境中的命令需要更少的代码。每个可执行cmdlet1330-1336使用其相应组成部分1320-1326进行标识。另外,每个可执行cmdlet1330-1336输出(由箭头1340、1342、1344和1346表示)作为下一经管线连接cmdlet的输入对象(由箭头1341、1343和1345表示)输入的对象。可通过传递对于对象的参照(例如句柄)来输入这些对象。然后可执行cmdlet1330-1336可在传递进来的对象上执行其它处理。图14是更详细地示出适于在图9所示用于处理输入的过程中使用的命令字符串的处理的逻辑流程图。命令字符串处理在框1401开始,其中解析器或者脚本引擎标识输入中的命令字符串。一般而言核心引擎执行cmdlet数据流的建立和排序。一cmdlet的建立和排序在下面进行描述,但可应用于管线中的每个cmdlet。处理在框1404继续。在框1404,标识cmdlet。cmdlet的标识可通过登记进行。核心引擎确定cmdlet是本地还是远程的。cmdlet可在以下位置执行1)在管理工具框架的应用领域内;2)在与管理工具框架相同进程的另一应用领域内;3)在相同计算装置的另一进程中;或4)在远程计算装置中。在相同进程中操作的cmdlet之间的通信是通过对象进行的。在不同进程中操作的cmdlet之间的通信则是通过经串行化的结构化数据格式。一示例性串行结构化数据格式基于可扩展标记语言(XML)。处理在框1406继续。在框1406,创建cmdlet对象的实例。用于创建cmdlet实例的示例性进程结合图15如下所述。一旦创建了cmdlet对象,处理在框1408继续。在框1408,填充与cmdlet对象相关联的属性。如上所述,开发者在cmdlet类中或者外部源中声明属性。简言之,管理工具框架将基于为属性声明的名称和类型对从cmdlet类例示的cmdlet来解码输入对象。如果类型不相同,类型通过扩展的数据类型管理器强制推行。如前所述,在经管线连接的命令字符串中,每个cmdlet的输出可以是对象句柄的列表。下一cmdlet可输入该对象句柄列表、执行句柄、并把另一对象句柄列表传递给下一cmdlet。另外,如图7所示,可将输入参数指定为来自命令行。用于填充与cmdlet相关联属性的一示例性方法结合图16在下面进行描述。一旦填充了cmdlet,处理在框1410继续。在框1410,执行cmdlet。总的看来,由cmdlet提供的处理至少执行一次,包括对cmdlet每个输入对象的处理。因而,如果cmdlet是经管线连接命令字符串中的第一cmdlet,执行处理一次。对于随后的cmdlet,对传递给cmdlet的每个对象执行处理。用于执行cmdlet的一示例性方法结合图5在下面描述。当输入参数仅来自命令行时,cmdlet的执行使用由基本cmdlet情形提供的缺省方法。一旦完成了cmdlet的执行,处理移到框1412。在框1412,清空cmdlet。这包括调用负责解除存储单元分配等等的相关联cmdlet对象的解构器(destructor)。然后命令字符串的处理完成。用于创建cmdlet对象的示例性过程图15是示出用于创建适于在如图14所示的命令字符串处理中使用的cmdlet对象的示例性过程的逻辑流程图。此时,已经开发了cmdlet数据结构并已指定属性和期望输入参数。已编译和登记了cmdlet。在登记期间,类名(即cmdlet名)被写入登记存储器中并已存储了与cmdlet相关联的元数据。过程1500在框1501开始,其中解析器已收到表示cmdlet的输入(例如键击)。解析器可通过在寄存器中查找输入并使输入与已登记的cmdlet之一相关联,来把输入识别为cmdlet。处理移到框1504。在框1504,读取与cmdlet对象类相关联的元数据。该元数据包括与cmdlet相关联的任一指示符。该指示符可应用cmdlet本身或者一个或多个参数。在cmdlet登记期间,登记代码把元数据登记到持久存储器中。元数据能以串行化格式存储在XML文件、外部数据库等等。类似于脚本处理期间指示符的处理,在不同阶段上处理每个类别的指示符。每个元数据指示符进行其自己的错误处理。处理在框1506继续。在框1506,基于标识的cmdlet类来例示cmdlet对象。处理在况1508继续。在框1508,获取有关cmdlet的信息。这可通过反射或其它方法进行。该信息与期望的输入参数相关。如上所述,声明为public(公共)的参数(例如publicstringName730)对应于可在命令行上的命令字符串中指定或者在输入流中提供的期望输入参数。通过如图18所述扩展的类型管理器管理工具框架向调用者提供用于返回信息(基于需要)的公共界面。处理在框1510继续。在框1510,应用可应用性指示符(例如表格1)。可应用性指示符确保以某些机器角色和/或用户角色来使用该类。例如,某些cmdlet仅可由领域管理员使用。如果不符合在可应用性指示符之一中指定的约束,错误出现。处理在框1512继续。在框1512,使用元数据提供智能感应。此时在处理中,还未输入整个命令字符串。然而,管理工具框架知道可用的cmdlet。一旦已确定cmdlet,管理工具框架通过在cmdlet对象上进行反射来得知所允许的输入参数。因而,管理工具框架可在一旦提供了cmdlet名的无歧义部分时就自动完成该cmdlet,并于一旦在命令行上键入输入参数的无歧义部分时就自动完成该输入参数。一旦输入参数部分可无歧义地标识输入参数之一,自动完成就可发生。另外,在cmdlet名和操作数上也可发生自动完成。处理在框1514继续。在框1514,过程等待直到已经输入了cmdlet的输入参数。一旦用户已表示命令字符串的结束,诸如通过按击回车键,这就可以发生。在脚本中,新行指示命令字符串的结束。该等待可包括获取来自用户的有关参数的附加信息并应用其它指示符。当cmdlet是经管线连接的参数之一,处理立即开始。一旦已提供了必须的命令字符串和输入参数,处理完成。用于填充cmdlet的示例性过程用于填充cmdlet的示例性过程如图16所示,现在结合图5进行描述。在一示例性管理工具框架中,核心引擎执行处理以填充cmdlet的参数。在已创建了cmdlet的实例之后,处理在框1601开始。处理移到框1602。在框1602,检索在cmdlet中声明的参数(例如ProcessName)。基于cmdlet的声明,核心引擎认为进入的输入对象将提供名为“ProcessName”的属性。如果进入属性的类型与在参数声明中指定的类型不相同,该类型将通过扩展的类型管理器强制推行。强制推行数据类型的过程在下面题为“示例性扩展的类型管理器处理”的章节中解释。处理在框1603继续。在框1603,获得与参数相关联的属性。该属性标识参数的输入源是否是命令行或者它是否来自管线。处理移到判定框1604。在判定框1604,确定属性是否把输入源指定为命令行。如果输入源是命令行,处理在框1609继续。否则,处理在判定框1605继续。在判定框1605,确定是否应当使用在声明中指定的属性名或者使用对属性名的映射。该确定基于该命令输入是否指定了对参数的映射。下列行示出了参数“ProcessName”与下述进入对象的“foo”成员的映射Sget/process|wherehan*-gt500|stop/process-ProcessName<-foo.处理在框1606继续。在框1606,应用映射。该映射把期望参数的名称从“ProcessName”替换为“foo”,然后“foo”由核心引擎使用以解析进入对象并标识正确的期望参数。处理在框1608继续。在框1608,查询扩展的类型管理器以定位进入对象中参数的值。如结合扩展的类型管理器所述,扩展的类型管理器取参数名,并使用反射以参数名来标识进入对象中的参数。如果需要,扩展的类型管理器还可执行对参数的其它处理。例如,扩展的类型管理器可通过如上所述的转换机制把数据类型强制转换为期望的数据类型。处理移到判定框1610。再看框1609,如果属性规定输入源是命令行,则获得来自命令行的数据。从命令行获取数据可通过扩展的类型管理器来执行。然后处理移到判定框1610。在判定框1610,确定是否有另一期望参数。如果有另一期望参数,处理回到框1602循环并如上所述继续。否则,处理完成并返回。因而,如图所示,cmdlet担当用于分解输入数据以获取期望参数的模板。另外,无需知道提供期望参数值的进入对象的类型就可获取期望参数。这与传统的管理环境颇为不同。传统管理环境是紧密绑定的并需要对象类型在编译时为已知。另外,在传统环境中,期望参数会通过值或调用传递到函数中去。因而,本解析(例如“分解”)机制使编程人员无需具体地知道如何获取这些参数的值就能指定参数类型。例如,给出对于cmdletFoo的以下声明classFooCmdlet{stringName;BoolRecurse;}命令行语法可以是以下的任一种$Foo-Name(string)-RecurseTrue$Foo-Name<string>-RecurseTrue$Foo-Name(string).规则集可由系统管理员更改以便产生所需语法。另外,解析器可支持多个规则集从而用户可使用一种以上语法。本质上,与cmdlet结构(例如stringName和BoolRecurse)相关联的语法引导解析器。一般而言,解析指示能描述输入为命令字符串的参数应当如何映射成在cmdlet对象中标识的期望参数。检查输入参数类型以确定其是否正确。如果输入参数类型不正确,则迫使输入参数变成正确的。如果输入参数类型不正确且不能强制转换,则打印使用错误。使用错误使用户开始知道所期望的正确语法。使用错误可获取描述来自文档指示符语法的信息。一旦已映射或者验证了输入参数类型,填充cmdlet对象实例中的相应成员。当填充成员时,扩展的类型管理器提供对输入参数类型的处理。简言之,该处理可包括属性路径机制、关键词机制、比较机制、转换机制、globber机制、关系机制、以及属性集机制。这些机制的每一种都在下面题为“扩展的类型管理器处理”的章节中详细描述,其中还包括说明性示例。用于执行cmdlet的示例性过程用于执行cmdlet的示例性过程如图17所示,现在进行描述。在一示例性管理工具环境中,核心引擎执行cmdlet。如上所述,对每个输入对象都执行第二方法1440中的代码1442。处理在框1701开始,其中已经填充了cmdlet。处理在框1702继续。在框1702,检索来自代码542的语句用于执行。处理在判定框1704继续。在判定框1704,确定是否在语句中包括hook。简单看一下图5,hook可包括调用由核心引擎提供的API。例如,图5cmdlet500的代码542中的语句550调用指定必须参数、第一字符串(例如PID=)以及参数(例如PID)的confirmprocessingAPI。再看图17,如果语句包括hook,处理在框1712继续。因而,如果已指定了调用confirmprocessingAPI的指令,则cmdlet以由操作环境提供的另选执行模式进行操作。否则,处理在框1706继续且执行以“正常”模式继续。在框1706,处理语句。然后处理在判定框1708继续。在框1708,确定代码是否包括另一语句。如果有另一语句,处理回到框1702循环以得到下一语句并如上所述继续。否则,处理在判定框1714继续。在判定框1714,确定是否有另一输入对象要处理。如果有另一输入对象,处理移到框1716,其中用来自下一对象的数据来填充cmdlet。用下一对象来执行如图16所示的填充过程。然后处理回到框1702循环并如上所述继续。一旦已处理了所有的对象,用于执行cmdlet的过程完成并返回。回到判定框1704,如果语句包括hook,则处理在框1712继续。在框1712,处理由管理工具环境提供的附加属性。处理在判定框1708继续并如上所述继续进行。现在结合如图6所示示例性数据结构600描述在框1712中执行的附加处理。如上所述,在公共基本类600中可具有经声明的对应于附加期望输入参数(例如转移指令)的参数。转移指令包括预定字符串,并且当被识别时引导核心引擎向cmdlet提供附加功能。如果在命令输入中指定参数verbose610,则执行verbose语句614。以下是包括verbose转移指令的命令行示例$get/process|where“han*-gt500”|stop/process-verbose一般而言,当在命令输入中指定“-verbose”时,核心引擎对每个输入对象执行该命令并向主机程序传送对每个输入对象所执行的真实命令用于显示。以下是当在示例性管理工具环境中执行以上命令行时产生的输出示例$stop/processPID=15$stop/processPID=33如果在命令输入中指定参数whatif620,执行whatif语句624。以下是包括whatif转移指令的命令行示例$get/process|where“han*-gt500”|stop/process-whati一般而言,当在命令输入中指定“-whatif”时,核心引擎并没有真正执行代码542,而是向主机程序传送所执行的命令用于显示。以下是当在本发明的示例性管理工具环境中执行以上命令行时产生的输出示例#$stop/processPID=15#$stop/processPID=33如果在命令输入中指定参数confirm630,执行confirm语句634。以下是包括confirm转移指令的命令行示例$ger/process|where“han*-gt500”|stop/process-confirm一般而言,当在命令输入中指定“-confirm”时,核心引擎请求有关是否要继续进行命令的附加用户输入。以下是当在本发明的示例性管理工具环境中执行以上命令行时产生的输出示例$stop/processPID15Y/NY$stop/processPID33Y/NN.如上所述,示例性数据结构600还可包括确定是否应允许请求执行的任务的security(安全)方法640。在传统管理环境中,每个命令负责检查执行该指令的人是否有足够的特权来执行该命令。为了执行该检查,需要扩展代码以访问来自若干源的信息。由于这样的复杂性,很多命令都不执行安全检查。本管理工具环境的发明者认识到,当在命令输入中指定任务时,用于执行安全检查的必要信息在管理工具环境中可得到。因此,管理工具框架无需来自工具开发者的复杂代码就可执行安全检查。可对在其cmdlet中定义有hook的任何cmdlet执行安全检查。或者,与上述verbose参数相似,hook可以是在命令输入中指定的可选输入参数。实现安全检查以支持基于角色的认证,它通常被定义为基于用户角色控制哪些用户可访问资源的系统。因而,每个角色被分配以对不同资源的某些访问权。然后对用户分配一个或多个角色。一般而言,基于角色的认证集中在三项主角、资源、和动作。主要是标识谁请求在资源上执行动作。本发明的发明者认识到正在请求的cmdlet对应于要执行的动作。另外,发明者理解管理工具框架所执行的过程的主人对应于主角。此外,发明者知道资源在cmdlet中指定。因此,由于管理工具框架已访问这些项,发明者认识到无需工具开发者实现安全检查在管理工具框架中就可执行安全检查。在通过使用诸如confirmprocessingAPI的hook的cmdlet中请求附加功能的任何时候,可执行对安全检查的操作。或者,可通过检查在命令行上是否输入了类似于verbose、whatif和confirm的安全转移指令来实现安全检查。对于任一种实现,checkSecurity方法调用由安全过程(未示出)提供的API,其中该安全过程提供一组用于确定允许谁的API。安全过程取得由管理工具框架提供的信息,并提供表示是否可完成任务的结果。然后管理工具框架可提供错误或者仅停止该任务的执行。因而,通过提供cmdlet中的hook,开发者可使用由管理工具框架提供的附加处理。示例性扩展的类型管理器处理如上结合图18的简述,扩展的类型管理器在所提供对象上可执行附加处理。可在解析器220、脚本引擎222、或管线处理器402的请求下执行附加处理。附加处理包括属性路径机制、关键词机制、比较机制、转换机制、globber机制、关系机制、以及属性集机制。本领域技术人员将理解,还可用其它处理来扩展扩展的类型管理器,而不背离本发明的范围。现在描述每个附加处理机制。首先,属性路径机制使字符串能导航对象的属性。在现有的反映系统中,查询可查询对象的属性。然而,在本扩展的类型管理器中,可指定将向对象的随后属性提供导航路径的字符串。以下是对属性路径P1、P2、P3、P4的说明性语法。每个组件(例如P1、P2、P3和P4)包括可表示属性、带参数的方法、无参数的方法、域、XPATH等等的字符串。XPATH指定查询字符串以搜索元素(例如“/FOO@=13”)。在字符串中,可包括特定字符以具体表明组件类型。如果字符串不包括特定字符,扩展的类型管理器可执行查找以确定组件类型。例如,如果组件P1是一对象,扩展的类型管理器可查询P2是否是对象的属性、对象上的方法、对象的域、或者属性集。一旦扩展的类型管理器标识了P2的类型,执行根据该类型的处理。如果组件不是以上类型之一,则扩展的类型管理器可进一步查询经扩展源以确定是否有把P1类型转换成P2类型的转换函数。现在将使用说明性命令字符串来描述这些和其它查找并显示相应输出。以下是包括属性路径的说明性字符串$get/process|/wherehand*-gt>500|format/tablename.toupper,ws.kb,exe*.ver*.description.tolower.trunc(30).在以上说明性字符串中,有三个属性路径(1)“name.toupper”(2)“ws.kb”(3)“exe*.ver*.description.tolower.trunc(30)”。在描述这些属性路径之前,应当注意“name”、“ws”、和“exe”指定了table(表格)的属性。另外应当注意这些属性的每一个都是原来由“get/process”产生然后通过各个cmdlet经管线连接的输入对象的直接属性。现在将描述涉及对三个属性路径的每一个的处理。在第一属性路径中(即“name.toupper”),name(名称)是输入对象的直接属性,且它本身也是对象。扩展的类型管理器使用如上所述的优先级查找查询系统以确定toupper的类型。扩展的类型管理器发现toupper不是属性。然而,toupper可能是一种由字符串类型遗留的把字符串中的小写字母转换成大写字母的方法。或者,扩展的类型管理器可查询扩展的元数据以确定是否有把name对象转换成大写的任何第三方代码。在找到组件类型之后,根据该组件类型执行处理。在第二属性路径中(即“ws.kb”),“ws”是输入对象的直接属性,且它本身也是对象。扩展的类型管理器确定“ws”是整数。然后,扩展的类型管理器查询kb是否是整数的属性、是否kb是整数的方法,最后查询任何代码是否知道如何取得整数并将该整数转换成kb类型。登记执行该转换的第三方代码,并执行该转换。在第三属性路径中(即“exe*.ver*.description.tolower.trunc(30)”),有若干组件。第一组件(“exe*”)是输入对象的直接属性,且它本身也是对象。扩展的类型管理器再次继续查找查询以便处理第二组件(“ver*”)。“exe*”对象没有“ver*”属性或方法,因此扩展的类型管理器查询经扩展元数据以确定是否有任何已登记代码把可执行名称转换成一版本。对于该示例,这种代码存在。该代码可取得可执行名称字符串并使用它来打开文件,然后访问版本块对象,并返回版本块对象的描述属性(第三组件“description”)。然后扩展的类型管理器对第四组件(“tolower”)和第五组件(“trunc(30)”)执行同样的查找机制。因而,如上所述,扩展的类型管理器无需管理员编写任何特定代码就可在命令字符串上执行颇为详尽的处理。。表1示出了说明性字符串所产生的输出Name.toupperws.kbexe*.ver*.description.tolower.trunc(30)ETCLIENT29,964etclientCSRSS6,944SVCHOST28,944generichostprocessforwin32OUTLOOK18.556officeoutlookMSMSGS13,248messenger表1另一查询机制1824包括关键词。该关键词标识使数据类型实例成为唯一的一个或多个属性。例如,在数据库中,可将唯一标识每行的一列标识为关键词(例如社会安全号SSN)。该关键词存储在与数据类型相关联的类型元数据1840中。然后在处理该数据类型的对象时由扩展的类型管理器使用该关键词。数据类型可以是经扩展数据类型或现有数据类型。另一查询机制1824包括比较机制。比较机制比较两个对象。如果该两个对象直接支持比较函数,则执行该直接支持的比较函数。然而,如果没有一个对象支持比较函数,则扩展的类型管理器可在类型元数据中查找已登记支持两个对象之间比较的代码。如下所示是调用比较机制的命令行字符串的一说明性序列,以及表2中的相应输出。$$a=$(get/date)$start/sleep5$$b=$(get/datecompare/time$a$bTicks51196579Days0Hours0Milliseconds119Minutes0Seconds5TotalDays5.92552997685185E-05TotalHours0.00142212719444444TotalMilliseconds5119.6579TotalMinutes0.0853276316666667TotalSeconds5.1196579表2编写用以比较两个datetime(日期时间)对象的compare/time(比较/时间)cmdlet。在此情形中,DateTime对象支持Icomparable界面。另一查询机制1824包括转换机制。扩展的类型管理器使代码能进行登记,表述其执行特定转换的能力。然后,当输入类型A的对象并且cmdlet指定类型B的对象时,扩展的类型管理器可使用经登记转换之一来执行转换。扩展的类型管理器可执行一序列转换以把类型A强制转换成类型B。如上所述的属性路径(“ws.kb”)示出了转换机制。另一查询机制1824包括globber机制。globber指的是字符串中的通配符。globber机制输入代通配符的字符串并产生一组对象。扩展的类型管理器使指定通配符处理的代码能进行登记。如上所述的属性路径(“exe*.ver*.description.tolower.trunc(30)”)示出了globber机制。登记的过程可提供文件名、文件对象、输入属性等等的加通配符(globbing)。另一查询机制1824包括属性集机制。属性集机制使能对一组属性定义名称。然后管理员可在命令字符串中指定名称以获取该组属性。可以各种方法定义属性集。在一种方法中,诸如“?”的预定义参数可作为cmdlet的输入参数输入。在识别以下预定义参数之后,操作环境列出输入对象的所有属性。该列表可以是使管理员能轻松检查(例如“点击”)所需属性并命名属性集的GUI。然后将该属性集信息存储在扩展的元数据中。以下示出调用属性集机制的说明性字符串,以及表3中的相应输出$get/process|wherehan*-gt>500|format/tableconfig在此说明性字符串中,名为“config”的属性集被定义为包括名称属性、过程id属性(Pid)、以及优先级属性。表的输出如下所示NamePidPriorityETClient3528Normalcsrss528Normalsvchost848NormalOUTLOOK2,772Normalmsmsgs2,584Normal表3另一查询机制1824包括关系机制。与支持一种关系(即遗留)的传统类型系统相反,该关系机制支持类型之间一种以上关系的表达。再一次,登记这些关系。关系可包括寻找对象消费的条目或者寻找消费对象的条目。扩展的类型管理器可访问描述各种关系的本体。使用扩展的元数据和代码,可描述访问诸如OWL、DAWL等等的任何本体服务的规范。以下是利用关系机制的部分说明性字符串.OWL“string”。“OWL”标识符标识本体服务而“string”指定本体服务中的特定字符串。因而,扩展的类型管理器可访问由本体服务提供的类型。用于显示命令行数据的示例性过程本机制提供数据驱动的命令行输出。由cmdlet管线中的一个或多个cmdlet提供数据的格式化和输出。通常,这些cmdlet包括在如上结合图2所述的非管理cmdlet中。cmdlet可包括格式cmdlet、标记cmdlet、转换cmdlet、变换cmdlet以及输出cmdlet。图19图示出管线中这些cmdlet的示例性序列1901-1907。第一序列1901把输出cmdlet1910示为管线中最后的cmdlet。以如上所述对其它cmdlet的相同方式,输出cmdlet1910接受由管线中其它cmdlet产生并处理的管线对象流。然而,与大多数cmdlet相反,输出cmdlet1910并不发出其它cmdlet的管线对象。相反,输出cmdlet1910负责描绘/显示由管线产生的结果。每个输出cmdlet1910与输出目标相关联,诸如装置、程序等等。例如,对于控制台装置,输出cmdlet1910可被指定为out/console(输出/控制台);对于因特网浏览器,输出cmdlet1910可被指定为输出/浏览器;以及对于视窗,输出cmdlet1910可被指定为输出/视窗。每个特定输出cmdlet都熟悉其相关联目标的能力。本地信息(例如日期和现金格式)由输出cmdlet1910进行处理,除非在管线中转换cmdlet位于输出cmdlet前面。在此情形中,转换cmdlet处理本地信息。每台主机负责支持诸如out/console的某些输出cmdlet。主机还支持任意目标特定主机cmdlet(例如引导对由电子制表应用程序提供的图表的输出的out/chart(输出/图表))。另外,主机负责提供结果的缺省处理。此序列中的输出cmdlet可通过调用其它输出处理cmdlet(诸如格式/标记/转换/变换)来决定实现其行为。因而,输出cmdlet可隐含地把序列1901更改为任意的其它序列,或者可添加它自己附加的格式/输出cmdlet。第二序列1902示出输出cmdlet1910之前的格式cmdlet1920。对于该序列,格式cmdlet1920接受管线中其它cmdlet产生并处理的管线对象流。总的看来,格式cmdlet1920提供一种选择显示属性的方法和一种指定页面布局的方法,诸如形状、列宽度、页眉、页脚等等。形状可包括表格、宽列表、柱形列表等等。另外,格式cmdlet1920提供总值或总数的计算。由格式cmdlet1920执行的示例性处理结合图20在下面描述。简言之,格式cmdlet除发出管线对象外,还发出格式对象。格式对象可通过扩展的类型管理器或其它机制在输出cmdlet(例如序列1902中的输出cmdlet1920)下游得到识别。输出cmdlet1920可选择使用被发出的格式对象或者选择略去它们。输出cmdlet基于在显示信息中指定的页面布局数据确定页面布局。在某些实例中,可由输出cmdlet来指定对页面布局的更改。在一示例性过程中,通过找到预定数量对象每个属性的最大长度并把列宽设定为最大长度,输出cmdlet可确定未指定的列宽。格式对象包括格式化信息、页眉/页脚信息等等。第三序列1903示出在输出cmdlet1910之前的格式cmdlet1920。然而,在第三序列1903中,标记cmdlet1930经管线连接在格式cmdlet1920和输出cmdlet1910之间。标记cmdlet1930提供用于把属性注解(例如字体、色彩)添加到选定参数的一种机制。因而,标记cmdlet1930出现在输出cmdlet1910前面。使用“阴影属性包”或者通过把属性注解添加到属性包中的定制名空间可实现属性注解。只要在处理格式cmdlet1920期间可保持标记注解,标记cmdlet1930就可出现在格式cmdlet1920前面。第四序列1904再次示出了输出cmdlet1910之前的格式cmdlet1920。然而,在第四序列1904中,转换cmdlet1940经管线连接在格式cmdlet1920和输出cmdlet1910之间。转换cmdlet1940还被配置为用以处理由格式cmdlet1920发出的格式对象。转换cmdlet1940把经管线连接的对象转换成基于格式对象的特定编码。转换cmdlet1940与特定编码相关联。例如,把经管线的连接对象转换成活动目录对象(ADO)的转换cmdlet1940可在命令行上被声明为“convert/ADO”(“转换/ADO”)。类似地,把经管线连接的对象转换成逗号分隔值(csv)的转换cmdlet1940可在命令行上被声明为“convert/csv”(“转换/csv”)。某些转换cmdlet1940(例如convert/XML(转换/XML)和convert/html(转换/XML))可阻挡命令,意思是在执行转换前接收所有的经管线连接的对象。通常,输出cmdlet1920可确定是否要使用由格式对象提供的格式化信息。然而,当转换cmdlet1920出现在输出cmdlet1920前面时,在输出cmdlet接收对象前真正的数据转换已经发生了。因此,在此情形中,输出cmdlet不可略去该转换。第五序列1905示出按顺序排列的格式cmdlet1920、标记cmdlet1930、转换cmdlet1940以及输出cmdlet1910。因而,这说明标记cmdlet1930可出现在转换cmdlet1940前面。第六序列1906示出格式cmdlet1920、特定转换cmdlet(例如convert/xmlcmdlet1940’)、特定变换cmdlet(例如transform/xslt(变换/xslt)cmdlet1950)以及输出cmdlet1910。convert/xmlcmdlet1940’把经管线连接的对象转换成可扩展标记语言(XML)文档。transform/xsltcmdlet1950则使用一可扩展样式语言(XSL)的样式表格把XML文档变换为另一XML文档。该变换过程通常称为可扩展样式语言变换(XSLT),其中XSL处理器读取XML文档并在XSL样式表格中按照这些指令创建新的XML文档。第七序列1907示出了格式cmdlet1920、标记cmdlet1930、特定转换cmdlet(例如convert/xmlcmdlet1940’)、特定变换cmdlet(例如transform/xslt(变换/xslt)cmdlet1950)以及输出cmdlet1910。因而,第七序列1907示出具有在转换cmdlet和变换cmdlet上游的标记cmdlet1930。图20示出了由格式cmdlet执行的示例性处理2000。在格式cmdlet已由解析器和管线处理器用以上所述的方式进行解析和调用后,格式化过程在框2001开始。处理在框2002继续。在框2002,管线对象作为格式cmdlet的输入被接收。处理在框2004继续。在框2004,开始查询以标识经管线连接的对象的类型。该查询由结合图18如上所述的扩展的类型管理器执行。一旦扩展的类型管理器已标识了该对象的类型,处理在框2006继续。在框2006,在显示信息中查找经标识类型。显示信息的示例性格式如图21所示并在下面描述。处理在判定框2008继续。在判定框2008,确定是否在显示信息中指定了经标识的类型。如果显示信息中没有对于经标识类型的条目,则处理完成。否则,处理在框2010继续。在框2010,与经标识类型相关联的格式化信息从显示信息中获取。处理在框2012上继续。在框2012,信息在管线上发出。一旦发出信息,处理完成。现在更详细地描述发出的示例性信息。该信息可包括格式化信息、页眉/页脚信息、以及组的结束/开始信号对象。格式化信息可包括形状、标签、编号方式/着重号、列宽、字符编码类型、内容字体属性、页面长度、按属性分组名称等等。这些中的每一个都具有与其相关联的附加规范。例如,形状可指定该形状是否是表格、列表等等。标签可指定是否使用列标题、列表标号等等。字符编码可指定ASCII、UTF-8、Unicode等等。内容字体属性可指定应用于属性值的显示字体。如果未指定内容字体属性,可使用缺省字体属性(例如CourierNew,字号10)。页眉/页脚信息可包括页眉/页脚范围、字体属性、标题、分标题、日期、时间、页面编号方式、分隔符等等。例如,范围可指定一个文档、一个页面、一个组等等。可指定页眉或页脚的附加属性。例如,对于组和文档页脚,附加属性可包括用以计算总数/总值、对象计数、总数和计数的标号字符串等等的属性或列。当格式cmdlet检测到按属性分组的组已改变时发出组的结束/开始信号对象。当它发生时,格式cmdlet将管线对象流处理成事先排序的,但不对其重新排序。组的结束/开始信号对象可散布在管线对象中。可指定用于嵌套排序的多个按属性分组的属性。格式cmdlet还可发出包括最后总数和总值的格式结束对象。再简单看一下图21,示例性显示信息2100是结构化格式的,并包含与已定义的每个对象相关联的信息(例如格式化信息、页眉/页脚信息、按属性或方法分组的组)。例如,显示信息2100可以基于XML。然后可在显示信息中指定每个前述属性。显示信息2100中的信息可由正在输入的对象类型的所有者进行填充。操作环境提供某些使所有者通过创建、删除以及更改条目来更新显示信息的API和cmdlet。图22是列出某些格式cmdlet(例如format/table、format/list和format/wide)、标记cmdlet(例如add/markup)、转换cmdlet(例如convert/text、convert/sv、convert/csv、convert/ADO、convert/xml、convert/html)、变换cmdlet(例如transform/xslt)以及输出cmdlet(例如out/console、out/file)的示例性语法2201-2213的表格。图23示出由out/consolecmdlet使用各种输出处理cmdlet(例如格式cmdlet、转换cmdlet和标记cmdlet)的管线序列所产生的结果。如上所述,可在管理工具环境中采用用于提供数据驱动命令行输出的一种机制。然而,本领域技术人员将理解,可在各种各样需要显示经管线连接命令的结果的环境中采用该机制。通过使用各种管线序列的输出处理cmdlet,命令行用户可用最少的代码产生稳固和多样的显示。相反,使用传统机制,则需要输出命令中的大量代码。另外,这些大量代码可以与其它输出命令中的其它代码不一致。用于显示结果的传统机制中的这些和其它限制都被用于提供数据驱动命令行输出的本机制克服了。尽管特定实现和实施例的细节已如上作了描述,这样的细节旨在满足法定指示义务而不是限制以下权利要求的范围。因而,由权利要求书定义的本发明不受以上所述的特定特征的限制。相反,根据等效性原则的适当解释,本系统和方法以所附权利要求书适当范围内的任何形式或者变体进行权利要求的声明。权利要求1.一种用于处理数据的计算机实现方法,其特征在于,所述方法包括在支持多个基于对象命令的管线操作环境中,在所述管线中后面的命令被配置成通过管线中前面的命令所发出的可解析对象来与所述前面命令进行通信,所述操作环境被配置为支持所述相同过程中命令的执行;接收从所述前面命令发出的所述可解析对象;获取对所述可解析对象的数据类型;获取描述对所述数据类型的格式的格式信息;以及发出用于另一后面命令的访问的格式对象,所述格式对象基于所述格式信息。2.如权利要求1所述的计算机实现方法,其特征在于,获取格式信息包括访问基于XML的文档。3.如权利要求1所述的计算机实现方法,其特征在于,所述后面的命令包括被配置为基于所述收到的可解析对象和所述格式对象来呈现所述管线结果的输出命令。4.如权利要求3所述的计算机实现方法,其特征在于,所述结果的呈现包括在控制台上的显示。5.如权利要求3所述的计算机实现方法,其特征在于,所述结果的呈现包括把所述结果引入应用程序中。6.如权利要求3所述的计算机实现方法,其特征在于,所述结果的呈现包括在图形用户界面中显示。7.如权利要求1所述的计算机实现方法,其特征在于,所述其它后面的命令包括标记命令,其被配置成把属性注解添加到所述可解析对象的选定参数中,并发送所述属性注解作为所述管线中更后面命令的输入。8.如权利要求1所述的计算机实现方法,其特征在于,所述其它后面的命令包括被配置用以把所述收到的可解析流转换成特定格式的转换命令。9.如权利要求8所述的计算机实现方法,其特征在于,所述特定格式包括XML文档、活动目录对象、或者逗号分隔值格式。10.如权利要求8所述的计算机实现方法,其特征在于,所述另一后面的命令包括变换命令,其从所述转换命令接收所述特定格式并基于样式表格把所述特定格式变换为另一特定格式。11.如权利要求1所述的计算机实现方法,其特征在于,所述格式信息描述所述数据类型和形状、属性、或者页眉的至少之一。12.一种具有计算机可执行指令的计算机可读介质,所述指令用于提供数据驱动输出,其特征在于,所述指令包括在操作环境中接收从前面命令发出的可解析对象,所述操作环境支持多个基于对象命令的管线并被配置成支持所述相同过程中所述命令的执行,所述前面命令是所述多个命令之一;获取所述可解析对象的数据类型;获取描述所述数据类型的格式的格式信息;以及发出用于对来自多个命令的后面命令的访问的格式对象,所述格式对象基于所述格式信息。13.如权利要求12所述的计算机可读介质,其特征在于,获取格式信息包括访问基于XML的文档。14.如权利要求12所述的计算机可读介质,其特征在于,所述后面的命令包括被配置为基于所述收到的可解析对象和所述格式对象来呈现所述管线结果的输出命令。15.如权利要求12所述的计算机可读介质,其特征在于,所述其它后面的命令包括标记命令,其被配置成把属性注解添加到所述可解析对象的选定参数中,并发送所述属性注解作为所述管线中更后面命令的输入。16.如权利要求12所述的计算机可读介质,其特征在于,所述其它后面的命令包括被配置成把所述收到的可解析流转换成特定格式的转换命令。17.如权利要求16所述的计算机可读介质,其特征在于,所述特定格式包括XML文档、活动目录对象、或者逗号分隔值格式。18.如权利要求16所述的计算机可读介质,其特征在于,所述另一后面的命令包括变换命令,其从所述转换命令接收所述特定格式并基于样式表格把所述特定格式变换为另一特定格式。19.如权利要求12所述的计算机可读介质,其特征在于,所述格式信息描述所述数据类型和形状、属性、或者页眉的至少之一。20.一种支持数据驱动输出的系统,其特征在于,所述系统包括一处理器;一存储器,所述存储器被分配用于多个计算机可执行指令,它们加载到所述存储器由所述处理器执行,所述计算机可执行指令执行一种方法,包括在操作环境中接收从前面命令发出的可解析对象,所述操作环境支持多个基于对象命令的管线并被配置成支持所述相同过程中命令的执行,所述前面命令是所述多个命令之一;获取所述可解析对象的数据类型;获取描述所述数据类型的格式的格式信息;以及发出用于对由来自多个命令的后面命令的访问的格式对象,所述格式对象基于所述格式信息。21.如权利要求20所述的系统,其特征在于,获取格式信息包括访问基于XML的文档。22.如权利要求20所述的系统,其特征在于,所述格式信息描述所述数据类型和形状、属性、或者页眉的至少之一。23.如权利要求20所述的系统,其特征在于,所述其它后面的命令包括标记命令,其被配置为用以把属性注解添加到所述可解析对象的选定参数中,并发送所述属性注解作为所述管线中更后面命令的输入。24.如权利要求20所述的系统,其特征在于,所述另一后面的命令包括一转换命令,其配置成将所述接收的可解析流转换成特定格式。25.如权利要求20所述的系统,其特征在于,所述另一后面的命令包括变换命令,其从所述转换命令接收所述特定格式,并基于样式表格把所述特定格式变换为另一特定格式。全文摘要本机制提供在支持基于对象命令的管线的环境中的数据驱动命令行输出。每个基于对象命令输入用于处理的可解析对象(2002),并输出用于随后命令处理的另一可解析对象。该机制基于输入的可解析对象类型(2004)引导命令的格式化及其随后处理上是有效的。获得诸如形状、要显示属性等等的对类型的格式信息。可在基于XML的文档中指定该格式信息(2008)。该机制利用一个或多个输出处理命令,诸如格式命令、标记命令、转换命令、变换命令(2010)、以及输出命令(2012)。可用各种方法在管线中安排这些输出处理命令以获取所需输出结果(2012)。文档编号G06F15/00GK1846204SQ200480001250公开日2006年10月11日申请日期2004年7月23日优先权日2003年10月24日发明者J·P·斯诺弗尔,K·M·汉森,M·谢诺提申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1