CN101351771A - 获取并应用交互式环境内对构造的约束的机制 - Google Patents

获取并应用交互式环境内对构造的约束的机制 Download PDF

Info

Publication number
CN101351771A
CN101351771A CNA2004800012959A CN200480001295A CN101351771A CN 101351771 A CN101351771 A CN 101351771A CN A2004800012959 A CNA2004800012959 A CN A2004800012959A CN 200480001295 A CN200480001295 A CN 200480001295A CN 101351771 A CN101351771 A CN 101351771A
Authority
CN
China
Prior art keywords
attribute
little order
order
little
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2004800012959A
Other languages
English (en)
Other versions
CN101351771B (zh
Inventor
J·P·史诺弗尔
J·W·物鲁荷三世
K·普什帕瓦南
S·维斯瓦那山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101351771A publication Critical patent/CN101351771A/zh
Application granted granted Critical
Publication of CN101351771B publication Critical patent/CN101351771B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明的机制获取交互式环境内的约束(1202)、将这些约束与构造相关联、然后在遇到构造时向构造应用这些约束(1206)。约束可以保存在与相应的构造相关联的元数据中(1204)。约束可指定构造的数据类型、谓词伪指令(1210)、文档编制伪指令(1212)、语法分析伪指令(1214)、数据生成伪指令(1216)、数据确认伪指令(1218)或对象处理和编码伪指令(1220)。可扩充约束,以支持其它伪指令。该机制允许交互式用户容易地、交互地指定约束。

Description

获取并应用交互式环境内对构造的约束的机制
技术领域
此处所揭示的主题涉及交互式环境,尤其涉及获取并应用交互式环境内的约束。
发明背景
一般而言,有两种类型的代码:经编译的代码和经解释的代码。在过去,经编译的代码被编译成目标代码,然后与其它目标代码链接以创建在运行时执行的可执行代码。当今,在某些环境中,经编译的代码包括被编译成中间形式的源代码。在运行时,中间形式被编译成本机代码用于执行。在这些情形的任一种下,开发者可对源代码中编程的每一构造指定类型。类型包括整数、串、浮点等等。相反,对于交互式环境内的经解释的代码,交互式环境将每一变量作为串来处理。因此,交互式用户可能无法对变量指定类型。
因此,需要一种用于向交互式环境内的变量分配类型和其它约束的机制。
发明概述
本发明的机制获取交互式环境内的约束、将这些约束与构造相关联、然后在遇到构造时向构造应用这些约束。约束可以保存在与相应的构造相关联的元数据中。约束可指定构造的数据类型、谓词伪指令、文档编制伪指令、语法分析伪指令、数据生成伪指令、数据确认伪指令或对象处理和编程伪指令。约束是可扩充的,以支持其它伪指令。该机制允许交互式用户容易地、交互地指定约束。
附图的简要描述
图1示出了可使用示例性管理工具环境的示例性计算装置。
图2是概括地示出了用于本发明的管理工具环境的示例性管理工具框架的综述的框图。
图3所示是图2所示的管理工具框架的主机专用组件内的组件的框图。
图4所示是图2所示的管理工具框架的核心引擎组件内的组件的框图。
图5是用于指定适于在图2所示的管理工具框架内使用的小命令(cmdlet)的一个示例性数据结构。
图6是用于指定从其导出图5所示的小命令的命令基础类型的示例性数据结构。
图7是用于指定适于在图2所示的管理工具框架内使用的小命令的另一示例性数据结构。
图8所示是在图2所示的管理工具框架内执行的用于主机处理的示例性过程的逻辑流程图。
图9所示是在图2所示的管理工具框架内执行的用于处理输入的示例性过程的逻辑流程图。
图10所示是用于处理适于在图9所示的处理输入过程内使用的脚本的过程的逻辑流程图。
图11所示是适用于在图10所示的脚本处理过程中使用的脚本预处理过程的逻辑流程图。
图12所示是用于应用适用于在图10所示的脚本处理过程中使用的约束的过程的逻辑流程图。
图13所示是图2所示的管理工具框架中的命令串的处理的功能流程图。
图14所示是用于处理适于在图9所示的处理输入过程中使用的命令串的过程的逻辑流程图。
图15所示是用于创建适于在图14所示的命令行处理中使用的小命令的实例的示例性过程的逻辑流程图。
图16所示是用于填充适于在图14所示的命令处理中使用的小命令的属性的示例性过程的逻辑流程图。
图17所示是用于执行适于在图14所示的命令处理中使用的小命令的示例性过程的逻辑流程图。
图18是适于在图2所示的管理工具框架内使用的示例性扩展类型管理程序的功能框图。
图19图形地描述了管道内的输出处理小命令的示例性序列。
图20示出了由图19所示的输出处理小命令之一执行的示例性处理。
图21图形地描述了在图20的处理期间访问的显示信息的示例性结构。
图22是列出示例性输出处理小命令的示例性句法的表格。
图23示出了外部/控制台小命令使用输出处理小命令的各种管道序列呈现的结果。
较佳实施例的详细描述
简言之,本发明获取交互式环境内的约束,并将这些应用到交互式环境内输入的构造上。约束可保存在与相应的构造相关联的元数据中。约束可指定构造的数据类型、构造的有效范围等等。该机制允许交互式用于容易地、交互地指定约束。
以下描述阐明了本机制可在其中操作的具体示例性管理工具环境。其它示例性环境可包括该具体实施例的特征和/或其它特征,其目标是便于交互式环境内的约束处理。
以下详细描述被划分成若干章节。第一节描述了其中管理工具环境可在其中操作的说明性计算环境。第二节描述了管理工具环境的示例性框架。随后的章节描述了示例性框架的各个组件以及这些组件的操作。例如,结合图12的“脚本的示例性处理”一节描述了获取并应用交互式环境内的约束的示例性机制。
示例性计算环境
图1示出了可在一个示例性管理工具环境中使用的一个示例性计算装置。在十分基本的配置中,计算装置100通常包括至少一个处理单元102和系统存储器104。根据计算装置的确切配置和类型,系统存储器104可以是易失(如RAM)、非易失(如ROM、闪存等)或两者的某一组合。系统存储器104通常包括操作系统105、一个或多个程序模块106,并且可包括程序数据107。操作系统包括基于组件的框架,它支持组件(包括属性和事件)、对象、继承、多态性、反射,并提供面向对象的基于组件的应用编程接口(API),如由华盛顿州雷蒙德市微软公司生产的.NETTM框架的API。操作系统105也包括与基于组件的框架120交互的管理工具框架200,以支持管理工具(未示出)的开发。这一基本配置在图1中由虚线108内的那些组件示出。
计算装置100可具有另外的特征或功能。例如,计算装置100也可包括另外的数据存储设备(可移动和/或不可移动),如磁盘、光盘或磁带。这类另外的存储在图1中由可移动存储109和不可移动存储110示出。计算机存储介质可包括以用于储存如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法和技术实现的易失和非易失、可移动和不可移动介质。系统存储器104、可移动存储109和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存期望的信息并可由计算装置100访问的任一其它介质。任一这类计算机存储介质可以是装置100的一部分。计算装置100也可具有(多个)输入设备112,如键盘、鼠标、输入笔、语音输入设备、触摸输入设备等等。也可包括(多个)输出设备114,如显示器、扬声器、打印机等等。这些设备在本领域中都是众所周知的,无需在此详细描述。
计算装置110也包含允许装置如通过网络与其它计算装置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-23描述的示例性管理工具环境内使用的命令。
小命令对应于传统管理环境内的命令。然而,小命令与这些传统命令完全不同。例如,小命令通常比其相对的命令在大小上更小,因为小命令可使用管理工具框架提供的公用功能,例如语法分析、数据确认、出错报告等等。由于这些公用功能可被实现一次并测试一次,因此贯穿管理工具框架对小命令的使用允许与应用程序专用功能相关联的递增开发和测试成本与传统环境相比相对较低。
另外,与传统的环境相反,小命令不需要是独立的可执行程序。相反,小命令可以在管理工具框架内的同一进程中运行。这允许小命令在彼此之间交换“活动”对象。这一交换“活动”对象的能力允许小命令直接在这些对象上调用方法。创建和使用小命令的细节在下文更详细地描述。
总体上,每一主机程序210-214管理用户和管理工具框架内的其它组件之间的交互。这些交互可包括对参数的提示、错误报告等等。通常,每一主机程序210-213可提供其自己的专用主机小命令集(例如,主机小命令218)。例如,如果主机程序是电子邮件程序,则主机程序可提供与邮箱和消息交互的主机小命令。即使图2示出了主机程序210-214,然而本领域的技术人员可以理解,主机组件202可包括与现有或新创建的应用程序相关联的其它主机程序。这些其它主机程序也将把由管理工具环境提供的功能嵌入在其相关联的应用程序内。由主机程序提供的处理在下文结合图8详细描述。
在图2所示的示例中,主机程序可以是管理控制台(即,主机程序210),它提供了简单、一致的管理用户界面,以供用户创建、保存和打开管理计算装置的硬件、软件和网络组件的管理工具。为实现这些功能,主机程序210提供了用于在管理工具框架上构建管理GUI的一组服务。GUI交互也可被展示为用户可见的脚本,它帮助将由管理工具环境提供的脚本能力教给用户。
在另一示例中,主机程序可以是命令行交互式外壳(即,主机程序212)。命令行交互式外壳可允许外壳元数据216在命令行上输入,以影响命令行的处理。
在又一示例中,主机程序可以是web服务(即,主机程序214),它使用用于跨平台的分布式计算和互操作性的行业标准规范、编程语言和应用程序。
除这些示例之外,第三方可通过创建在其主机程序或其它主机程序中使用的“第三方”或“提供者”接口和提供者小命令,来添加其自己的主机组件。提供者接口展示了应用程序或基础结构,使得该应用程序或基础结构可由管理工具框架来操纵。提供者小命令提供了用于导航、诊断、配置、生命周期、操作等的自动化。提供者小命令展示了完整的数据存储异构集上的多态小命令行为。管理工具环境在提供者小命令上用与其它小命令类相同的优先级操作。提供者小命令是使用与其它小命令相同的机制创建的。提供者小命令向管理工具框架展示了应用程序或基础结构的特定功能。由此,通过使用小命令,产品开发者只需创建一个主机程序,它然后将允许其产品对许多管理工具运作。例如,采用示例性管理工具环境,系统级图形用户界面帮助菜单可以被集成并移植到现有的应用程序中。
主机专用组件
主机专用组件204包括计算装置(例如,图1描述的计算装置100)用于将管理工具框架与该框架所运行的平台细节相隔离的服务的集合。由此,对每一类型的平台有一组主机专用组件。主机专用组件允许用户在不同的操作系统上使用同一管理工具。
简要地转向图3,主机专用组件204可包括智能感知(intellisense)/元数据访问组件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。例如,每一平台支持获取和设置系统管理属性(如,获取/处理、设置/IP地址)的管理小命令232。主机无关组件206通过主机无关组件206内生成的小命令对象与管理小命令通信。用于小命令对象的示例性数据结构将在下文结合图5-7详细描述。
非管理小命令234(有时候称为基础小命令)包括在由管理小命令232提供的对象上组合、排序、过滤和执行其它处理的小命令。非管理小命令234也可包括用于格式化并输出与管道化对象相关联的数据的小命令。用于提供数据驱动命令行输出的一种示例性机制在下文参考图19-23描述。非管理小命令234可以在每一平台上是相同的,并提供了一组通过小命令对象与主机无关组件206交互的实用程序。非管理小命令234和主机无关组件之间206的交互允许对象上的反射,并允许与其(对象)类型无关地在反射的对象上进行处理。由此,这些实用程序允许开发者一次书写非管理小命令,然后跨计算系统上支持的所有对象类应用这些非管理小命令。在过去,开发者必须首先充分理解要处理的数据的格式,然后书写应用程序来仅处理该数据。结果,传统应用程序只能处理非常有限范围的数据。用于与其对象类型无关地处理对象的一种示例性机制在下文结合图18描述。
传统实用程序230包括现有的可执行代码,诸如在cmd.exe下运行的win32可执行代码。每一传统实用程序230使用文本流(即,stdin和stdout)与管理工具框架通信,文本流是对象框架内的一种对象类型。由于传统实用程序230使用了文本流,因此由管理工具框架提供的基于反射的操作是不可用的。传统实用程序230在与管理工具框架不同的进程内执行。尽管未示出,其它小命令也可在进程外操作。
远程小命令236与web服务接口238一起提供了通过诸如因特网或内联网(例如,图2所示的因特网/内联网240)等通信介质访问其它计算装置上的交互式和编程管理工具环境的远程机制。在一个示例性管理工具框架中,远程机制支持依赖于跨越多个独立控制域的基础结构上的联合服务。远程机制允许脚本在远程计算装置上执行。脚本可以在单个或多个远程系统上运行。脚本的结果可以当每一个别的脚本完成时被处理,或者结果可以被累积,并在各种计算装置上的所有脚本完成之后一起处理。
例如,被示出为主机组件202之一的web服务214可以是远程代理。远程代理处理远程命令请求对目标系统上的语法分析器和管理工具框架的提交。远程小命令担当以提供对远程代理的访问的远程客户机。远程代理和远程小命令通过经语法分析的流来通信。该经语法分析的流可以在协议层上保护,或者可使用另外的小命令来加密,然后解密经语法分析的流。
主机无关组件
主机无关组件包括语法分析器220、脚本引擎222以及核心引擎224。主机无关组件206提供了组合多个小命令、协调小命令的操作以及协调其它资源、会话和作业与小命令的交互的机制和服务。
示例性语法分析器
语法分析器220提供了从各种主机程序接收输入请求并将输入请求映射到贯穿整个管理工具框架使用,诸如在核心引擎224内使用的统一小命令对象的机制。另外,语法分析器220可基于接收到的输入执行数据处理。用于基于输入执行数据处理的一种示例性方法在下文结合图12描述。本发明的管理工具框架的语法分析器220提供了简单地向用户展现同一能力的不同的语言或句法的能力。例如,由于语法分析器220负责解释输入请求,因此语法分析器220内影响期望输入句法的代码改变本质上将影响管理工具框架的每一用户。因此,系统管理员可在不同的计算装置上提供支持不同句法的不同的语法分析器。然而,用同一语法分析器操作的每一用户对每一小命令将经历一致的句法。相反,在传统的环境中,每一命令实现其自己的句法。由此,对于上千种命令,每一环境支持若干不同的句法,它们中的大多数通常彼此不一致。
示例性脚本引擎
脚本引擎222提供了使用脚本将多个小命令联系在一起的机制和服务。脚本是在继承的严格规则下共享会话状态的命令行的聚集。基于输入请求中提供的句法,脚本内的多个命令行可以同步或异步地执行。脚本引擎22能够处理诸如如循环和条件子句等控制构造,并能够处理脚本内的变量。脚本引擎也管理会话状态,并向小命令给予基于政策(未示出)对会话数据的访问。
示例性核心引擎
核心引擎224负责处理由语法分析器220识别的小命令。简单地转向图4,示出了管理工具框架200内的一个示例性核心引擎。该示例性核心引擎224包括管道处理器402、加载器404、元数据处理器406、以及出错和事件处理器308、会话管理器410、以及扩展类型管理器412。
示例性元数据处理器
元数据处理器406被配置成访问元数据并将其储存在诸如图3所示的数据库存储314等元数据存储中。元数据可以通过命令行、在小命令类定义内等提供。管理工具框架200内的不同组件可在执行其处理时请求元数据。例如,语法分析器202可请求元数据以确认命令行上提供的参数。
示例性出错和事件处理器
出错和事件处理器408提供了一错误对象,它储存关于命令行的处理期间的每一出错发生的信息。对于尤其适合本发明的管理工具框架的一个特定出错和事件处理器的额外信息,请参阅名为“System and Method for Persisting Error Informationin a Command Line Environment(用于持久保存命令行环境中的错误信息的系统和方法)”的美国专利申请号_______/美国专利号______,其为本发明的同一受让人所有,并通过引用结合于此。
示例性会话管理器
会话管理器410向管理工具框架200内的其它组件提供会话和状态信息。会话管理器管理的状态信息可由任一小命令、主机或核心引擎通过编程接口来访问。这些编程接口允许状态信息的创建、修改和删除。
示例性管道处理器和加载器
加载器404被配置成加载存储器中的每一小命令,以使管道处理器402能够执行小命令。管道处理器402包括小命令处理器420和小命令管理器422。小命令处理器420分派个别的小命令。如果小命令需要在远程或一组远程机器上执行,则小命令处理器420协调与图2所示的远程小命令236的执行。小命令管理器422处理小命令的聚集的执行。小命令管理器422、小命令处理器420以及脚本引擎222(图2)彼此通信,以在从主机程序210-214接收到的输入上执行处理。通信可以本质上是递归的。例如,如果主机程序提供脚本,则该脚本可调用小命令管理器422以执行小命令,该小命令本身可以是脚本。脚本然后可由脚本引擎222执行。核心引擎的一个示例性过程流在下文结合图14详细描述。
示例性扩展类型管理器
如上所述,管理工具框架提供了允许对象上的反射并允许独立于其(对象)类型在反射的对象上处理的一组实用程序。管理工具框架200与计算系统上的组件框架(图1所示的组件框架120)交互,以执行这一反射。本领域的技术人员可以理解,反射提供了查询对象并获取该对象的类型,然后在各种对象以及与该类型对象相关联的属性反射以获取其它对象和/或需要的值的能力。
即使反射向管理工具框架200提供了对象上的大量信息,因此发明人理解,反射集中在该类型的对象上。例如,当在数据库数据表上反射时,返回的信息是数据表具有两个属性:列属性和行属性。这两个属性未提供关于数据表内的“对象”的足够细节。当在可扩充标记语言(XML)和其它对象上使用反射时也会产生类似的问题。
由此,发明人构想了一种集中在类型的使用上的扩展类型管理器412。对于这一扩展类型管理器,对象的类型不是重要的。相反,扩展类型管理器对于该对象是否能用于获取需要的信息是感兴趣的。继续上述数据表示例,发明人理解,知道数据表具有列属性和行属性并不是特别感兴趣的,但是理解,一列包含感兴趣的信息。集中在使用上,可将每一行与“对象”相关联,并将每一列与该“对象”的“属性”相关联。由此,扩展类型管理器412提供了一种从任一类型的可精确语法分析输入中创建“对象”的机制。如此,扩展类型管理器412补充了基于组件的框架120提供的反射能力,并将“反射”扩展到任一类型的可精确语法分析输入。
总体上,扩展类型管理器被配置成访问可精确语法分析输入(未示出),并将可精确语法分析输入与请求的数据类型相关。扩展类型管理器412然后向作出请求的组件,例如管道处理器402或语法分析器220提供所请求的信息。在以下讨论中,可精确语法分析输入被定义为其中可辨别属性和值的输入。某些示例性可精确语法分析输入包括Windows管理规程(WMI)输入、ActiveX数据对象(ADO)输入、可扩充标记语言(XML)输入以及诸如.NET对象等对象输入。其它可精确语法分析输入可包括第三方数据格式。
简要地转向图18,示出了在管理工具框架内使用的示例性扩展类型管理器的功能框图。为解释的目的,由扩展类型管理器提供的功能(由圆圈内的数字“3”表示)与由传统紧绑定系统提供的功能(由圆圈内的数字“1”表示)以及由反射系统提供的功能(由圆圈内的数字“2”表示)形成对比。在传统的紧绑定系统中,应用程序内的调用者1802直接访问对象A内的信息(例如,属性P1和P2、方法M1和M2)。如上所述,调用者1802在编译时必须事先知道由对象A提供的属性(如,属性P1和P2)以及方法(如,方法M1和M2)。在反射系统中,类属代码1820(不依赖于任何数据类型)查询在请求的对象上执行反射1810的系统1808,并向类属代码1820返回关于该对象(如,对象A)的信息(例如,属性P1和P2、方法M1和M2)。尽管未在对象A中示出,返回的信息可包括诸如销售商、文件、日期等的附加信息。由此,通过反射,类属代码1820至少包含紧绑定系统提供的相同信息。反射系统也允许调用者1802查询系统,并在没有关于参数的任何先验知识的情况下获取附加信息。
在紧绑定系统和反射系统中,新数据类型不能被容易地结合到操作环境中。例如,在紧绑定系统中,一旦操作环境被交付,则操作环境无法结合新数据类型,因为它必须被重构以支持它们。同样,在反射系统中,每一对象类的元数据是固定的。由此,结合新数据类型通常未完成。
然而,采用本发明的扩展类型管理器,可以将新数据类型结合到操作系统中。采用扩展类型管理器1822,类属代码1820可在请求的对象上反射,以获取由各种外部源提供的扩展数据类型(如,对象A′),诸如第三方对象(如,对象A′和B)、语义web 1832、本体论服务1834等等。如图所示,第三方对象可扩展现有对象(如,对象A′)或可创建全新的对象(如,对象B)。
这些外部源的每一个可在类型元数据1840内注册其唯一的构造,并可提供代码1842。当对象被查询时,扩展类型管理器审阅类型元数据1840,以判断对象是否已被注册。如果对象未在类型元数据1840内注册,则执行反射。否则,执行扩展反射。代码1842返回与反射的类型相关联的附加属性和方法。例如,如果输入类型是XML,则代码1842可包括描述使用XML来从XML文档创建对象的方式的描述文件。由此,类型元数据1840描述了扩展类型管理器412应当如何查询各种类型的可精确语法分析输入(例如,第三方对象A′和B、语义web 1832)来获取用于对该特定输入类型创建对象的期望属性,并且代码1842提供了获取这些期望属性的指令。结果,扩展类型管理器412提供了一间接层,它允许在所有类型的对象上“反射”
除提供扩展类型之外,扩展类型管理器412提供了附加的查询机制,如属性路径机制、关键字机制、比较机制、开关机制、通配符处理(globber)机制、属性设置机制、关系机制等等。这些查询机制的每一个在下文“示例性扩展类型管理器处理”一节中详细描述,它们在输入命令串时向系统管理员提供了灵活性。可使用各种技术来实现扩展类型管理器的语义。下文描述了三种技术。然而,本领域的技术人员可以理解,可使用这些技术的变体而不脱离要求保护的本发明的范围。
在一种技术中,可提供具有静态方法(如,getproperty())的一系列类。对象被输入到静态方法中(例如,getproperty(object)),并且静态方法返回一组结果。在另一种技术中,操作系统用适配器包装对象。由此,不提供输入。适配器的每一实例具有getproerty(获取属性)方法,它在包装的对象上运作,并返回该包装对象的属性。以下是示出这一技术的伪代码:
Class Adaptor
{
      Object X;
      getProperties();
}
在又一种技术中,适配器类对对象进行细分类。传统上,细分类在编译之前发生。然而,对于某些操作环境,细分类可动态地发生。对于这些类型的环境,以下是示出这一技术的伪代码:
Class Adaptor:A
{
      getProperties()
      {
             return data;
      }
}
由此,如图18所示,扩展类型管理器允许开发者创建新的数据类型、注册该数据类型、并允许其它应用程序和小命令使用该新的数据类型。相反,在现有的管理环境中,在编译时每一数据类型必须是已知的,使得与从该数据类型例示的对象相关联的属性或方法可被直接访问。因此,添加管理环境所支持的新数据类型在过去很少完成。
返回到图2,总体上,管理工具框架200不依赖于用于协调用户的命令输入的执行的外壳,但是相反,将功能分割成处理部分(例如,主机无关组件206)和用户交互部分(例如,通过主机小命令)。另外,本发明的管理工具环境很大程度上简化了管理工具的编程,因为语法分析和数据确认所需的代码不再包括在每一命令中,而是相反,由管理工具框架内的组件(例如,语法分析器220)提供。下文描述管理工具框架内执行的示例性处理。
示例性操作
图5-7图形地示出了在管理工具环境中使用的示例性数据结构。图8-17图形地示出了管理工具环境内的示例性处理流。本领域的技术人员可以理解,某些处理可以由与以下描述的组件不同的组件来执行,而不脱离本发明的范围。在描述管理工具框架内执行的处理之前,描述管理工具框架内使用的示例性数据结构。
小命令对象的示例性数据结构
图5是用于指定始于在图2所示的管理工具框架内使用的小命令的示例性数据结构。当完成时,小命令可以是管理小命令、非管理小命令、主机小命令、提供者小命令等等。以下讨论描述了相对于系统管理员的观点的小命令(即,提供者小命令)的创建。然而,每一类型的小命令以相同的方式创建并以相同的方式操作。小命令可以用任何语言来书写,如C#。另外,小命令可以使用脚本语言或类似语言来书写。当管理工具环境用.NET框架来运作时,小命令可以是.NET对象。
提供者小命令500(后文称为小命令500)是具有小命令类名(例如,StopProcess(停止进程)504)的公用类。小命令500从小命令类506导出。小命令类506的一个示例性数据结构在下文结合图6描述。每一小命令500与一命令属性502相关联,该命令属性将名字(例如,Stop(停止)/Process(进程))与小命令500相关联。名字在管理工具环境内注册。如下文描述的,当在命令行或脚本中提供具有名字(例如,Stop/Process)的命令串作为输入时,输入语法分析器在小命令注册表中查找,以识别小命令500。
小命令500与一语法机制相关联,该语法机制定义了对小命令的期望输入参数的语法。语法机制可以直接或间接地与小命令相关联。例如,小命令500示出了直接语法关联。在这一小命令500中,声明了一个或多个公用参数(如,ProcessName(进程名)510和PID 512)。公用参数的声明驱动了对小命令500的输入对象的语法分析。或者,参数的描述可以在外部源中出现,如XML文档。该外部源中的参数描述然后将驱动对小命令的输入对象的分析。
每一公用参数510、512可具有与其相关联的一个或多个属性(即,伪指令)。伪指令可来自以下类别的任一个:语法分析伪指令521、数据确认伪指令522、数据生成伪指令523、处理伪指令524、编码伪指令525以及文档编制伪指令526、伪指令可以用方括号环绕。每一伪指令描述了要在下面预期的输入参数上执行的操作。某些伪指令也可在类级应用,如用户交互类型伪指令。伪指令储存在与小命令相关联的元数据中。这些属性的应用在下文结合图12描述。
这些属性也可反映小命令内声明的参数的填充。用于填充这些参数的一个示例性过程在下文结合图16描述。核心引擎可应用这些伪指令以确保依从性。伪指令500包括第一方法530(后文可互换地被称为StartProcessing(开始处理)方法530)以及第二方法540(后文可互换地被称为processRecord(处理记录)方法540)。核心引擎使用第一和第二方法530、540,来指示小命令500的处理。例如第一方法530被执行一次,并执行设置功能。第二方法540内的代码542对需要由小命令500处理的每一对象(如,记录)执行。小命令500也可包括在小命令500之后清理的第三方法(未示出)。
由此,如图5所示,第二方法540内的代码542通常相当简单,并且不包含传统管理工具环境中需要的功能,如语法分析代码、数据确认代码等等。由此,系统管理员能够开发复杂的管理任务,而无需学习复杂的编程语言。
图6是用于指定从其导出图5所示的小命令的小命令基类602的示例性数据结构600。当小命令包括挂钩(hook)语句并且对应的开关是命令行上或脚本中的输入(统称为命令输入)的任何时候,小命令基类602包括提供额外功能的指令。
示例性数据结构600包括参数,如布尔参数verbose 610、whatif620和confirm630。如下文所解释的,这些参数对应于可在命令输入上键入的串。示例性数据结构600也可包括确定请求执行的任务是否被允许的安全方法640。
图7是用于执行小命令的另一示例性数据结构700。总体上,该数据结构700提供了用于清楚地表达管理工具框架和小命令之间的合约的方法。类似于数据结构500,该数据结构700是从小命令类704导出的公用类。软件开发者指定将名词/动词对,如“get/process(获取/进程)”和“format/table(格式化/表格)”与小命令700相关联的cmdletDeclaration 702。名词/动词对在管理工具环境内注册。动词或名词可以在小命令名中是隐含的。同样,类似于数据结构500,数据结构700可包括一个或多个公用成员(如,Name 730、Recurse 732),它们可以与结合数据结构500所描述的一个或多个伪指令520-526相关联。
然而,在这一示例性数据结构700中,期望输入参数730和732的每一个可以分别与输入属性731和733相关联。输入属性731和733指定了其相应参数730和732的数据应当从命令行获取。由此,在此示例性数据结构700中,没有从另一小命令发出的管道化对象填充的任何期望输入参数。由此,数据结构700不覆盖由小命令基类提供的第一方法(如,StartProcessing)或第二方法(如,ProcessRecord)。
该数据结构700也可包括不被识别为输入参数的私有成员740。私有成员740可用于储存基于伪指令之一生成的数据。
由此,如数据结构700中所示的,通过使用在特定小命令类中声明公有属性和伪指令,小命令开发者可容易地为其小命令的期望输入参数指定语法,并指定应当在期望输入参数上执行的处理,而无需小命令开发者生成任一底层逻辑。数据结构700示出了小命令和语法机制之间的直接关联。如上所述,这一关联也可以是间接的,如通过指定诸如XML文档等外部源内的期望参数定义。
现在描述管理工具环境内的示例性过程流。
示例性主机处理流
图8所示是用于在图2所示的管理工具框架内执行的主机处理的示例性过程的逻辑流程图。该过程800在框801开始,其中,接收到启动特定应用程序的管理工具框架的请求。该请求可以通过诸如选择应用程序图标等键盘输入本地发送,或者通过不同计算装置的web服务接口远程发送。对于任一种情形,处理继续到框802。
在框802,“目标”计算装置上特定的应用程序(例如,主机程序)设置其环境。这包括判断令小命令的哪些子集(例如,管理小命令232、非管理小命令234以及主机小命令218)对用户可用。通常,主机程序将令所有的非管理小命令234可用,并且令其自己的主机小命令218可用。另外,主机程序将令管理小命令234的一个子集可用,如处理进程、盘等的小命令。由此,一旦主机程序令小命令的子集可用,管理工具框架被有效地嵌入在对应的应用程序中。处理继续到框804。
在框804,通过特定的应用程序获取输入。如上所述,输入可采用若干形式,如命令行、脚本、语音、GUI等等。例如,当输入是通过命令行获取时,输入从键盘上键入的按键来检索。对于GUI主机,串是基于GUI来组成的。处理在框806继续。
在框806,将输入提供给管理工具框架内的其它组件以供处理。主机程序可将输入直接转发到其它组件,如语法分析器。或者,主机程序可通过其主机小命令之一来转发输入。主机小命令可将其特定类型的输入(如,语音)转换成可由管理工具框架识别的一种类型的输入(如,文本串、脚本)。例如,语音输入可以被转换成脚本或命令行串,取决于语音输入的内容。由于每一主机程序负责将其类型的输入转换成可由管理工具框架识别的输入,因此管理工具框架可接受来自任意数量的各种主机组件的输入。另外,管理工具框架提供了一组丰富的实用程序,当输入通过其小命令之一转发时,它们执行数据类型之间的转换。其它组件在输入上执行的处理在下文结合若干其它附图来描述。主机处理在判别框808继续。
在判别框808,判断是否接收到对另外的输入的请求。如果负责处理输入的其它组件之一需要来自用户的另外的输入以完成其处理,则会发生这一情况。例如,可能需要口令来访问某些数据、可能需要特定行动的确认等等。对于某些类型的主机程序(如,语音邮件),这样的请求可能不是适当的。由此,与向用户查询另外的输入相反,主机程序可串行化状态、挂起状态、并发送通知,使得稍后该状态得以恢复并且输入的执行得以继续。在另一变体中,主机程序可在预定的时间段之后提供默认值。如果接收到对另外的输入的请求,则处理循环回到框804,其中获取另外的输入。处理然后通过上述框806和808继续。如果未接收到对另外的输入的请求,且输入已被处理,则处理继续到框810。
在框810,从管理工具框架内的其它组件接收结果。该结果可包括出错消息、状态等等。结果是以对象的形式,它可由管理工具框架内的主机小命令识别和处理。如下文所描述的,对每一主机小命令书写的代码是非常少的。由此,可显示一组丰富的输出,而无需开发成本的巨大投资。处理在框812继续。
在框812,可审阅结果。主机小命令将结果转换成主机程序支持的显示风格。例如,返回的对象可由GUI主机程序使用图形描述来显示,如图标、吠叫狗(barkingdog)等。主机小命令提供数据的默认格式和输出。默认格式和输出可使用下文结合图19-23描述的示例性输出处理小命令。在可任选地显示了结果之后,主机处理完成。
用于处理输入的示例性过程
图9所示是用于在图2所示的管理工具框架内执行的处理输入的示例性过程的逻辑流程图。处理在框901开始,其中通过主机程序键入输入,并将其转发到管理工具框架内的其它组件。处理在框902继续。
在框902,从主机程序接收输入。在一个示例性管理工具框架中,输入由语法分析器接收,它对输入进行译码,并定向输入以供进一步处理。处理在判别框904继续。
在判别框904,确定输入是否为脚本。输入可采用脚本或表示命令行的串(后文称为“命令串”)的形式。命令串可表示管道化在一起的一个或多个小命令。即使管理工具框架支持若干不同的主机,然而每一主机提供输入作为脚本或命令串以供处理。如下文可见到的,脚本和命令串之间的交互在本质上是递归的。例如,脚本可具有调用小命令的行。小命令本身可以是脚本。
由此,在判别框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,判断来自脚本的该行是否包括内建能力。内建能力是不由核心引擎执行的能力。内建能力可以使用小命令来处理,或者使用诸如内嵌函数来处理。如果该行不具有内建能力,则处理在判别框1014继续。否则,处理在框1012继续。
在框1012,处理在脚本的行上提供的内建能力。示例内建能力可包括诸如“if”语句、“for”循环、开关等控制构造的执行。内建能力也可包括赋值类型语句(例如,a=3)。一旦处理了内建能力,处理在判别框1014继续。
在判别框1014,判断脚本的行是否包括命令串。该判断基于行上的数据是否与注册的命令串相关联并且是否与潜在的小命令调用的句法相关联。如上所述,命令串和脚本的处理可以在本质上是递归的,因为脚本可包括命令串,而命令串可执行小命令,小命令本身是脚本。如果行不包括命令串,则处理在判别框1018。否则,处理在框1016继续。
在框1016,处理命令串。总体上,命令串的处理包括由语法分析器识别小命令类,以及将对应的小命令对象传递到核心引擎以供执行。命令串也可包括管道化的命令串,它被语法分析成若干个别的小命令对象,并由核心引擎个别地处理。下文结合图14描述用于处理命令串的一个示例性过程。一旦处理了命令串,处理在判别框1018继续。
在判别框1018,判断脚本中是否有另一行。如果脚本中有另一行,则处理循环回到框1004,并如上文在框1004-1016中描述的继续。否则,处理完成。
图12示出了应用框1008中的约束的示例性过程。该过程在框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之间。示例命令串确保了如果变量$a在随后的命令串或行中被赋值,则将对照两个约束来校验变量$a。由此,以下命令串的每一个都将导致错误:
$a=231
$a=″apple″
$a=$(get/location)
约束在管理工具框架的不同阶段被应用。例如,适用性伪指令、文档编制伪指令以及语法分析准则伪指令在语法分析器内非常早期的阶段处理。数据生成伪指令和确认伪指令一旦在语法分析器完成了对所有输入参数的语法分析之后在引擎内处理。
以下表格示出了各种类别的代表性伪指令,以及由管理工具环境响应于伪指令执行的处理的解释。
名称 描述
PrerequisiteMachineRoleAttribute 通知外壳元素是否仅在某些机器角色(如,文件服务器、邮件服务器)中使用。
PrerequisiteUserRoleAttribute 通知外壳元素是否仅在某些用户角色(如,域管理员、备份操作员)中使用。
PrerequisiteScriptAttribute 通知外壳该脚本将在执行实际的命令或参数之前运行。可以对参数确认使用。
PrerequisiteUITypeAttribute 这用于在执行前核查用户界面是否可用。
表1  适用性伪指令
名称 描述
ParsingParameterPositionAttribute 基于位置映射不合格的参数。
ParsingVariableLengthParameterListAttribute 映射不具有ParsingParameterPosition属性的参数。
ParsingDisallowInteractionAttribute 指定当参数数量少于需要的数量时的行动。
ParsingRequireInteractionAttribute 指定通过交互获得的参数。
ParsingHiddenElementAttribute 令参数对终端用户不可见。
ParsingMandatoryParameterAttribute 指定该参数是需要的。
ParsingPasswordParameterAttribute 需要参数的特殊处理。
ParsingPromptStringAttribute 指定参数的提示。
ParsingDefaultAnswerAttribute 指定参数的默认回答。
ParsingDefaultAnswerScriptAttribute 指定获取参数默认回答的行动。
ParsingDefaultValueAttribute 指定参数的默认值。
ParsingDefaultValueScriptAttribute 指定获取参数默认值的行动。
ParsingParameterMappingAttribute 指定组合参数的方法。
ParsingParameterDeclarationAttribute 这定义了已归档的是参数。
ParsingAllowPipelineInputAttribute 定义参数可从管道填充。
表2  语法分析管道伪指令
名称 描述
DocumentNameAttribute 提供参考用于交互或帮助的元素的名字。
DocumentShortDescriptionAttribute 提供了元素的简要描述。
DocumentLongDescriptionAttribute 提供了元素的详细描述。
DocumentExampleAttribute 提供了元素的示例。
DocumentSeeAlsoAttribute 提供了相关元素的列表。
DocumentSynopsisAttribute 提供了元素的文档编制信息。
表3  文档编制伪指令
名称 描述
ValidationRangeAttribute 指定了参数必须在某一范围内。
ValidationSetAttribute 指定参数必须在某一集合内。
ValidationPatternAttribute 指定参数必须符合某一模式。
ValidationLengthAttribute 指定串必须在大小范围内。
ValidationTypeAttribute 指定参数必须是某一类型。
ValidationCountAttribute 指定输入项必须是某一数字。
ValidationFileAttribute 指定文件的某些属性。
ValidationFileAttributesAttribute 指定文件的某些属性。
ValidationFileSizeAttribute 指定文件必须在指定的范围内。
ValidationNetworkAttribute 指定给定的网络实体支持某些属性。
ValidationScriptAttribute 指定在使用元素前要评估的条件。
ValidationMethodAttribute 指定在使用元素前要评估的条件。
表4  数据确认伪指令
名称 描述
ProcessingTrimStringAttribute 指定串的大小限制。
ProcessingTrimCollectionAttribute 指定集合的大小限制。
EncodingTypeCoercionAttribute 指定对象要被编码的类型。
ExpansionWildcardsAttribute 提供允许通配符操作的机制。
表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”,然而“-w”选项由“ls”命令用于表示页的宽度,而“-w”选项由“ps”命令表示打印出宽的输出(本质上,忽略页宽度)。与“ls”和“ps”命令相关联的帮助页面也具有若干不一致性,如在一个中有加粗的选项而在另一个中没有、在一个中对选项按字母表排序而在另一个中没有、需要某些选项具有短划线而某些选项没有。
本发明的管理工具框架提供了更一致的方法,并最小化了每一开发者必须书写的重复代码量。管理工具框架200提供了句法(如,语法)、对应的语义(如,字典)、以及参考模型,以使开发者能够容易地利用管理工具框架200提供的公用功能。
在进一步描述本发明之前,提供对贯穿本说明书出现的其它术语的定义。输入参数指小命令的输入字段。形式参数指传递到小命令的输入参数,它等效于argv数组中的单个串,或作为小命令对象中的单个元素传递。如下文所描述的,小命令提供了用于指定语法的机制。该机制可以直接或间接提供。形式参数是命令名后的选项、选项形式参数或操作数之一。形式参数的示例基于以下命令行给出:
Findstr/i/d:\winnt;\winnt\system32 aa*b*.ini
在以上命令行中,“findstr”是形式参数0,“/i”是形式参数1,“/d:\winnt;\winnt\system32”是形式参数2,“aa*b”是形式参数3,“*.ini”是形式参数4。“选项”是小命令的形式参数,通常用于指定对程序的默认行为的改变。继续上述命令行的示例,“/i”和“/d”是选项。“选项形式参数”是跟随在某些选项后的一个参数。在某些情况下,“选项形式参数”作为选项被包括在同一形式参数串内。在其它情况下,选项形式参数作为下一形式参数被包括。再次参考上述命令行,“winnt;\winnt\system32”是选项形式参数。“操作数”是小命令的形式参数,通常向程序提供完成程序处理所必需的信息的对象。在命令行中,操作数一般在选项之后。再次参考上述示例命令行,“aa*b”和“*.ini”是操作数。“可语法分析流”包括形式参数。
参考图13,语法分析器220将可语法分析流(如,命令串1350)语法分析成要素部分1320-1326(如,where部分1322)。每一部分1320-1326与小命令1330-1336之一相关联。语法分析器220和引擎224执行各种处理,如语法分析、参数确认、数据生成、参数处理、参数编码和参数文档编制。由于语法分析器220和引擎224在命令行的输入参数上执行公用的功能,因此管理工具框架200能够向用户发出一致的出错消息。
如可以认识到的,依照本发明的管理工具框架书写的可执行小命令1330-1336需要比现有管理环境中的命令更少的代码。每一可执行小命令1330-1336使用其相应的构成部分1320-1326来标识。另外,每一可执行小命令1330-1336输出对象(由箭头1340、1342、1344和1346表示),它们是作为对下一管道化小命令的输入对象(由箭头1341、1343和1345表示)的输入。这些对象可以通过向对象传递引用(例如,句柄)来输入。可执行小命令1330-1336然后可在所传入的参数上执行额外的处理。
图14是更详细地示出了适于在处理图9所示的输入的过程中使用的命令串的处理的逻辑流程图。命令串处理在框1401开始,其中语法分析器或脚本引擎识别输入中的命令串。一般而言,核心引擎执行小命令的数据流的设置和排序。对一个小命令的设置和排序在下文描述,但是可适用于管道中的每一小命令。处理在框1404继续。
在框1404,识别小命令。小命令的识别可以通过注册来进行。核心引擎判断小命令是本地还是远程的。小命令可以在以下位置中执行:1)在管理工具框架的应用程序域内;2)在与管理工具框架相同的进程的另一应用程序域内;3)在同一计算装置的另一进程内;或者4)在远程计算装置内。在同一进程内操作的小命令之间的通信是通过对象来进行的。在不同的进程内操作的小命令之间的通信是通过串行化的结构化数据格式来进行的。一个示例性串行化的结构化数据格式基于可扩充标记语言(XML)。处理在框1406继续。
在框1406,创建小命令对象的实例。用于创建小命令的实例的一个示例性过程在下文结合图15描述。一旦创建了小命令对象,处理在框1408继续。
在框1408,填充与小命令对象相关联的属性。如上所述,开发者声明小命令类内或外部源内的属性。简言之,管理工具框架基于对属性声明的名字和类型将传入的对象译码成从小命令类例示的小命令。如果类型不同,则可通过扩展数据类型管理器来强制类型。如先前所提到的,在管道化的命令串中,每一小命令的输出可以是对象句柄的列表。下一小命令可输出这一对象句柄列表、执行处理、并将另一对象句柄列表传递到下一小命令。另外,如图7所示,输入参数可以被指定为来自命令行。用于填充与小命令相关联的属性的一个示例性方法在下文结合图16描述。一旦填充了小命令,处理在框1410继续。
在框1410,执行小命令。总体上,由小命令提供的处理至少被执行一次,这包括对小命令的每一输入对象的处理。由此,如果小命令是管道化的命令串中的第一个小命令,则处理被执行一次。对于后续的小命令,对传递到小命令的每一对象执行处理。用于执行小命令的一个示例性方法在下文结合图5描述。当输入参数仅来自命令行时,小命令的执行使用基础小命令类提供的默认方法。一旦小命令完成执行,处理前进到框1412。
在框1412,小命令被清除。这包括调用相关联的小命令对象的析构函数,它负责解除分配存储器等等。然后,命令串的处理完成。
用于创建小命令对象的示例性过程
图15所示是用于创建适于在图14所示的命令串的处理中使用的小命令对象的示例性过程的逻辑流程图。在这一点上,开发了小命令数据结构,并指定了属性和期望的输入参数。小命令被编译并已被注册。在注册期间,类名(即,小命令名)被写入注册存储中,并且储存了与小命令相关联的元数据。过程1500在框1501开始,语法分析器接收到指示小命令的输入(例如,按键)。语法分析器可通过从注册表内查找该输入,并将该输入与注册的小命令之一相关联,以将输入识别为小命令。处理前进到框1504。
在框1504,读取与小命令对象相关联的元数据。元数据包括与小命令相关联的伪指令的任一个。伪指令可应用于小命令本身或一个或多个参数。在小命令注册期间,注册代码将元数据注册到永久存储中。元数据可以储存在串行化格式的XML文件、外部数据库等中。类似于脚本处理过程中伪指令的处理,每一类别的伪指令在不同的阶段处理。每一元数据伪指令处理其自己的错误处理。处理在框1506继续。
在框1506,基于识别的小命令类例示小命令对象。处理在框1508继续。
在框1508,获取关于小命令的信息。这可以通过反射或其它手段发生。信息是关于期望的输入参数。如上所述,被声明为公用的参数(例如,公用串Name 730)对应可以是在命令行上的命令串中指定或在输入流中提供的期望输入参数。管理工具框架通过图18描述的扩展类型管理器提供用于向调用者返回信息(在需要的基础上)的公用接口。处理在框1510继续。
在框1510,应用适用性伪指令(例如,表1)。适用性伪指令确保了该类在某些机器角色和/或用户角色中使用。例如,某些小命令可能只能由域管理员使用。如果未满足适用性伪指令之一中指定的约束,则出现差错。处理在框1512继续。
在框1512,使用元数据来提供智能感知。在处理的这一点上,尚未输入整个命令串。然而,管理工具框架知道可用的小命令。一旦确定了小命令,则管理工具框架知道在小命令对象上反射所允许的输入参数。由此,一旦提供了小命令名字的可消除歧义的部分,则管理工具框架可自动完成小命令,然后一旦在命令行上键入了输入参数的可消除歧义的部分,则自动完成输入参数。自动完成可以在一旦输入参数的部分能够明确地识别输入参数之一之后发生。另外,自动完成也可在小命令名字和操作数上发生。处理在框1514继续。
在框1514,处理等待,直到输入了小命令的输入参数。这可在一旦用户例如通过敲击回车键指示了命令串的结束之后发生。在脚本中,新行指示命令串的结束。这一等待可包括从用户获取关于参数的额外信息并应用其它伪指令。当小命令是管道化参数之一时,处理可立即开始。一旦提供了必要的命令串和输入参数,处理完成。
用于填充小命令的示例性过程
用于填充小命令的示例性过程在图16中示出,并现在结合图5来描述。在一个示例性管理工具框架中,核心引擎执行处理来填充小命令的参数。处理在创建了小命令的实例之后在框1601开始。处理在框1602继续。
在框1602,检索小命令中声明的参数(例如,ProcessName(进程名))。基于对小命令的声明,核心引擎识别出传入的输入对象将提供名为“ProcessName”的属性。如果传入的属性的类型不同于参数声明中指定的类型,则该类型将通过扩展类型管理器来强制。强制数据类型的过程在下文名为“示例性扩展类型管理器处理”一节中解释。处理继续到框1603。
在框1603,获取与参数相关联的属性。属性标识了参数的输入源是否为命令行或者它是否来自管道。处理继续到判别框1604。
在判别框1604,判断属性是否将输入源指定为命令行。如果输入源是命令行,则处理在框1609继续。否则,处理在判别框1605继续。
在判别框1605,判断是应当使用声明中指定的属性名还是应当使用属性名的映射。这一判断基于命令输入是否指定了参数的映射。以下行示出了参数“ProcessName”到传入对象的成员“foo”的示例性映射:
$ get/process|where han*-gt 500|stop/process-ProcessName<-foo处理在框1606继续。
在框1606,应用映射。映射将期望参数的名字从“ProcessName”替换成“foo”,它然后由核心引擎用于对传入对象进行语法分析并识别正确的期望参数。处理在框1608继续。
在框1608,查询扩展类型对象以查找传入对象内的参数的值。如结合扩展类型管理器所解释的,扩展类型管理器采用参数名并使用反射来识别传入对象内具有参数名的参数。如有必要,扩展类型管理器也可对参数执行其它处理。例如,扩展类型管理器可通过上述的转换机制将数据类型强制成期望的数据类型。处理继续到框1610。
返回到框1609,如果属性指定了输入源是命令行,则获取来自命令行的数据。获取来自命令行的数据可以通过扩展类型管理器来执行。处理然后继续到判别框1610。
在判别框1610,判断是否存在另一期望参数。如果存在另一期望参数,则处理循环回到框1602,并如上所述地继续。否则,处理完成并返回。
由此,如图所示,小命令担当用于切碎传入数据以获取期望参数的模版。另外,期望参数是在不知道提供期望参数的值的传入对象的类型的情况下获取的。这比传统的管理环境要困难得多。传统的管理环境是紧绑定的,并需要该对象的类型在编译时是已知的。另外,在传统环境中,期望参数将按传值或按传址被传递到函数。由此,本发明的语法分析(例如,“切碎”)机制允许程序员指定参数的类型,而无需他们具体地知道如何获取这些参数的值。
例如,给定对小命令Foo的以下声明:
Class Foo:Cmdlet
{
      string Name;
      Bool Recurse;
}
命令行句法可以是以下的任一种:
$Foo-Name:(string)-Recurse:True
$Foo-Name<string>-Recurse True
$Foo-Name(string)
该组规则可由系统管理员修改,以产生期望的句法。另外语法分析器可支持多组规则,使得用户可使用一个以上句法。本质上,与小命令构造相关联的语法(例如,string Name和Bool Recurse)驱动语法分析器。
一般而言,语法分析伪指令描述了作为命令串输入的参数应当如何映射到小命令对象中识别的期望参数。核查输入参数类型以判断是否正确。如果输入参数类型不正确,则可强制输入参数成为正确。如果输入参数类型不正确并且不能被强制,则打印使用出错。使用出错允许用户变得知晓期望的正确句法。使用出错可从文档编制伪指令获取描述句法的信息。一旦映射或验证了输入参数类型,则填充小命令对象实例中对应的成员。当填充成员时,扩展类型管理器提供了对输入参数类型的处理。简言之,处理可包括属性路径机制、关键字机制、比较机制、转换机制、通配符处理机制、关系机制以及属性集机制。这些机制的每一个在下文名为“扩展类型管理器处理”一节中详细描述,它也包括了说明性示例。
用于执行小命令的示例性过程
用于执行小命令的示例性过程在图7中示出,并现在描述。在一个示例性管理工具环境中,核心引擎执行小命令。如上所述,对每一输入对象执行第二方法1440内的代码1442。处理在框1701开始,其中已填充了小命令。处理在框1702继续。
在框1702,检索来自代码542的语句用于执行。处理在判别框1704继续。
在判别框1704,判断语句内是否包括挂钩。简单地转向图5,挂钩可包括调用由核心引擎提供的API。例如,图5中小命令500的代码542内的语句550调用了指定必要参数、第一个串(如,“PID=”)以及参数(如,PID)的confirmprocessing(确认处理)API。返回到图17,如果语句包括挂钩,则处理继续到框1712。由此,如果指定了调用confirmprocessing API的指令,则小命令在由操作环境提供的备选执行模式中操作。否则,处理在框1706继续,并且执行在“正常”模式中继续。
在框1706,处理该语句。处理然后前进到判别框1708。在框1708,判断代码是否包括另一语句。如果有另一语句,则处理循环回到框1702,以获取下一语句,并如上所述地前进。否则,处理继续到判别框1714。
在判别框1714,判断是否有另一输入对象要处理。如果有另一输入对象,则处理继续到框1716,其中用来自下一对象的数据填充小命令。对下一对象执行图16中描述的填充过程。处理然后循环回到框1702,并如上所述地前进。一旦处理了所有的对象,用于执行小命令的过程完成并返回。
返回到判别框1704,如果语句包括挂钩,则处理继续到框1712。在框1712,处理由管理工具环境提供的附加特征。处理在判别框1708继续,并如上所述地继续。
现在结合图6所示的示例性数据结构600描述框1712内执行的附加处理。如上所述,在命令基类600内,可以声明对应于附加的期望输入参数的参数(如,开关)。
开关包括预定义的串,并且当被识别时,指示核心引擎向小命令提供附加功能。如果在命令输入中指定了参数verbose 610,则执行verbose语句614。以下是包括verbose开关的命令行的一个示例:
$get/rocess|where″han*-gt 500″|stop/process-verbose
一般而言,当在命令输入内指定“-verbose”时,核心引擎对每一输入对象执行该命令,并将对每一输入对象执行的实际命令转发到主机程序用于显示。以下是当在示例性管理工具环境中执行上述命令行时生成的输出的示例:
$ stop/process PID=15
$ stop/process PID=33
如果在命令输入中指定了参数whatif620,则执行whatif语句624。以下是包括whatif开关的命令行的示例:
$ get/process|where″han*-get 500″|stop/process-whatif
一般而言,当指定“-whatif”时,核心引擎实际上不执行代码542,而是相反将要被执行的命令发送到主机程序用于显示。以下是当在本发明的管理工具环境中执行上述命令行时生成的输出示例:
$ stop/process PID=15
$ stop/process PID=33
如果在命令输入中指定了参数confirm 630,则执行confirm语句634。以下是包括confirm开关的命令行的一个示例:
$ get/process|where″han*-get 500″|stop/process-confirm
一般而言,当指定了“-confirm”时,核心引擎请求关于是否继续命令的额外用户输入。以下是当在本发明的管理工具环境中执行上述命令行时生成的输出示例。
$ stop/process PID 15
Y/N Y
$stop/process PID 13
Y/N N
如上所述,示例性数据结构600也可包括判断所请求的用于执行的任务是否应当被允许的安全性方法640。在传统的管理环境中,每一命令负责核查执行该命令的人是否具有足够的特权来执行该命令。为执行这一核查,需要广泛的代码来访问来自若干来源的信息。由于这些复杂度,许多命令不执行安全性核查。本发明的管理工具环境的发明人认识到,当在命令输入中指定任务时,用于执行安全性核查的必要信息在管理工具环境内是可用的。因此,管理工具框架执行安全性核查,而不需要来自工具开发者的复杂代码。该安全性核查可对在其小命令内定义挂钩的任一小命令执行。或者,挂钩可以是可任选的输入参数,它可在命令输入中指定,类似于上述的verbose参数。
实现安全性核查以支持基于角色的认证,它一般被定义为基于用户的角色控制哪些用户具有对资源的访问的系统。由此,向每一角色分配对不同资源的某些访问权限。然后将用户分配给一个或多个角色。一般而言,基于角色的认证集中在三项上:原则、资源和行动。原则标识了谁请求了在资源上执行行动。
本发明的发明人认识到,所请求的小命令对应于要执行的行动。另外,发明人理解,其中执行管理工具框架的进程的所有者对应于原则。此外,发明人理解,资源是在小命令中指定的。因此,由于管理工具框架具有对这些项的访问,因此发明人认识到,可以从管理工具框架内执行安全性核查,而不需要工具开发者实现安全性核查。
安全性核查的操作可以在当小命令内请求附加功能的任一时刻通过使用诸如confirmprocessing API等挂钩来执行。或者,安全性核查可以通过核查在命令行上是否输入了类似于verbose、whatif和confirm等安全开关来执行。对于任一实现,checkSecurity(核查安全性)方法调用了由安全性进程(未示出)提供的API,该安全性进程提供了用于判断谁被允许的一组API。安全性进程采用由管理工具框架提供的信息,并提供指示任务是否可被完成的结果。管理工具框架然后可提供出错或仅仅停止任务的执行。
由此,通过在小命令内提供挂钩,开发者可使用由管理工具框架提供的附加处理。
示例性扩展类型管理器处理
如上文结合图18提到的,扩展类型管理器可在提供的对象上执行附加的处理。附加处理可以在语法分析器220、脚本引擎222或管道处理器402处执行。附加处理包括属性路径机制、关键字机制、比较机制、转换机制、通配符处理机制、关系机制以及属性集机制。本领域的技术人员可以理解,扩展类型管理器也可以用其它处理来扩展,而不脱离本发明的范围。现在描述附加处理机制的每一个。
首先,属性路径机制允许一个串导航对象的属性。在当前反射系统中,查询可查询对象的属性。然而,在本发明的扩展类型管理器中,可以指定提供到连续的对象属性的导航路径的串。以下是属性路径P1.P2.P3.P4的说明性句法。
每一组件(例如,P1、P2、P3和P4)包括可表示属性、具有参数的方法、不是有参数的方法、字段、XPATH等等的串。XPATH指定了查询串,以搜索元素(例如,“/Foo@=13”。在该串内,可以包括特殊的字符以具体地指示组件的类型。如果串不包含特殊的字符,则扩展类型管理器可执行查找以确定组件的类型。例如,如果组件P1是对象,则扩展类型管理器可查询P2是否为对象的属性、方法上的对象、对象的字段或属性集。一旦扩展类型管理器标识了P2的类型,则执行依照该类型的处理。如果组件不是上述类型之一,则扩展类型管理器可进一步查询扩展源,以判断是否有将P1的类型转换成P2的类型的转换功能。现在将使用说明性命令串描述这些和其它查找,并示出代表性输出。
以下是包括属性路径的说明性串:
$ get/process|/where hand*-gt>500|format/table name.toupper,ws.kb,exe.*ver.*.description.tolower.trunc(30)
在上述说明性串中,有三个属性路径:(1)“name.toupper”;(2)“ws.kb”;以及(3)“exe*.ver*.description.tolower.trunc(30)”。在描述这些属性路径之前,应当注意,“name”、“ws”和“exe”指定了表格的属性。另外,应当注意,这些属性的每一个是传入对象的直接属性,它们最初由“get/process”生成,然后通过各种小命令管道化。现在描述三个属性路径的每一个所涉及的处理。
在第一个属性路径(即,“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(40)”)执行该同一查找机制。由此,如所示,扩展类型管理器可在命令串上执行相当精细的处理,而无需管理员书写任何特定代码。表1示出了对说明性串生成的输出。
Name.toupper ws.kb exe*.ver*.description.tolower.trunc(30)
ETCLIENT     29,964 etclient
CSRSS        6,944
SVCHOST         28,944 generic host process for win32
OUTLOOK         18,556 office outlook
MSMSGS          13,248 messenger
表1
另一查询机制1824包括关键字。关键字标识了产生唯一数据类型的实例的一个或多个属性。例如,在数据库中,一列可以被标识为可唯一地标识每一行(例如,社会保障号)的关键字。关键字储存在与数据类型相关联的类型元数据1840中。该关键字然后可由扩展类型管理器在处理该数据类型的对象时使用。数据类型可以是扩展的数据类型或现有的数据类型。
另一查询机制824包括比较机制。比较机制比较两个对象。如果两个对象直接支持比较功能,则执行直接支持的比较功能。然而,如果没有一个对象支持比较功能,则扩展类型管理器可在类型元数据中查找被注册来支持两个对象之间的比较的代码。下文在表2中示出了调用比较机制的一系列说明性命令行串,以及对应的输出。
$ $a=$(get/date)
$ start/sleep 5
$ $b=$(get/date
compare/time $a $b
Ticks        :51196579
Days         :0
Hours        :0
Milliseconds    :119
Minutes      :0
Seconds      :5
TotalDays    :5.92552997685185E-05
TotalHours   :0.00142212719444444
TotalMilliseconds :5119.6579
TotalMinutes      :0.00853276316666667
TotalSecond       :5.1196579
表2
书写compare/time小命令以比较两个datetime对象。在这一情况下,DateTime对象支持IComparable接口。
另一查询机制1824包括转换机制。扩展类型管理器允许注册规定其执行特定转换的能力的代码。然后,当输入类型A的对象,并且小命令指定类型B的对象,扩展类型管理器可使用注册的转换之一执行转换。扩展类型管理器可执行一系列转换以将类型A强制成类型B。上述属性路径(“ws.kb”)示出了转换机制。
另一查询机制1824包括通配符处理机制。通配符处理指的是串内通配符字符。通配符处理机制输入具有通配符字符串并产生一组对象。扩展类型管理器允许要被注册指定通配符处理的代码。上述属性路径(“exe*.ver*.description.tolower.trunc(30)”)示出了通配符处理机制。注册的进程可提供对文件名、文件对象、传入属性等的通配符处理。
另一查询机制1824包括属性集机制。属性集机制允许对一组属性定义名字。管理员然后可指定命令串内的名字,以获得属性集。属性集可以用各种方式来定义。在一种方法中,诸如“?”等预定义参数可以作为对小命令的输入参数而被输入。操作环境在识别预定义的参数之后列出传入对象的所有属性。列表可以是允许管理员容易地核查(例如,“点击”)期望的属性以及对属性集命名的GUI。属性集信息然后可储存在扩展的元数据中。以下在表3中示出了调用属性集机制的说明性串以及对应的输出:
$ get/process|where han*-gt>500|format/table config
在这一说明性串中,定义了名为“config”属性集,以包括名字属性、进程id属性(Pid)以及优先级属性。该表的输出示出如下。
Name      Pid Priority
ETClient  3528 Normal
cvsrss    528 Normal
svchost   848 Normal
OUTLOOK   2,772 Normal
msmsgs    2,584 Normal
表3
另一查询机制1824包括关系机制。与支持一种关系(即,继承)的传统类型系统相反,关系机制支持表达类型之间的一个以上关系。再一次,这些关系被注册。关系可包括找出对象消耗的项,或找出消耗对象的项。扩展类型管理器可访问描述各种关系的本体论。使用扩展的元数据和代码,可描述用于访问诸如OWL、DAWL等的任何本体论服务的规范。以下是使用关系机制的说明性串的一部分:.OWL:″string″。
“OWL”标识符标识了本体论服务,而“string”指定了本体论服务内的特定串。由此,扩展类型管理器可访问本体论服务提供的类型。
用于显示命令行数据的示例性过程
本发明的机制提供了一种数据驱动的命令行输出。数据的格式化和输出由小命令管道中的一个或多个小命令提供。通常,这些小命令包括在上文结合图2描述的非管理小命令中。小命令可包括格式化(format)小命令、标记(markup)小命令、转换(convert)小命令、变换(transform)小命令以及输出(out)小命令。
图19图形地描绘了管道内这些小命令的示例性序列1901-1907。第一序列1901示出输出小命令1910为管道内的最后一个小命令。以上文对于其它小命令描述的同一方式,输出小命令1910接受由管道内的其它小命令生成和处理的管道对象流。然而,与大多数小命令相反,输出小命令1910不为其它小命令发出管道对象。相反,输出小命令1910负责呈现/显示由管道生成的结果。每一输出小命令1910与一输出目的地相关联,如设备、程序等。例如,对于控制台设备,输出小命令1910可被指定为out/console(输出/控制台);对于内联网浏览器,输出小命令1910可被指定为out/browser(输出/浏览器);对于窗口,输出小命令1910可被指定为out/window(输出/窗口)。每一特定的输出小命令熟悉其相关联目的地的性能。场所信息(例如,日期和货币格式)由输出小命令1910处理,除非管道中转换小命令超过输出小命令。在这一情况下,转换小命令处理本地信息。
每一主机负责支持某些输出小命令,如out/console。主机也支持任一目标专用主机小命令(例如,out/chart,它将输出定向到由电子表格应用程序提供的图表)。另外,主机负责提供结果的默认处理。这一序列中的输出小命令可决定通过调用其它输出处理小命令(如格式化/标记/转换/变换)来实现其行为。由此,输出小命令可隐含地将序列1901修改成其它序列的任一个,或可添加其自己的附加格式化/输出小命令。
第二序列1902示出了格式化小命令1920在输出小命令1910之前。对于这一序列,格式化小命令1920接受由管道内的其它小命令生成和处理的管道对象流。总体上,格式化小命令1920提供了选择显示属性的方式以及指定诸如形状、列宽度、页眉、页脚等页面布局的方式。形状可包括表格、宽列表、栏式列表等等。另外,格式化小命令1920可包括总计或总和的计算。由格式化小命令1920执行的示例性处理在下文结合图20描述。简言之,格式化小命令除发出管道对象之外还发出格式化对象。格式化小命令可由输出小命令(例如,序列1902中的输出小命令1902)通过扩展类型管理器或其它机制来向下游识别。输出小命令1920可选择使用发出的格式化对象或可选择忽略它们。输出小命令基于显示信息中指定的页面布局数据确定页面布局。在某些情况下,对页面布局的修改可由输出小命令指定。在一个示例性过程中,输出小命令可通过找出预定数量对象的每一属性的最大长度(例如,50)并将列宽度设为该最大长度,来确定未指定的列宽度。格式化对象包括格式化信息、页眉/页脚信息等等。
第三序列1903示出了格式化小命令1920在输出小命令1910之前。然而,在第三序列1903中,在格式化小命令1920和输出小命令1910之间管道化了标记小命令1930。标记小命令1930提供了用于向选择的参数添加属性注释(例如,字体、颜色)的机制。由此,标记小命令1930出现在输出小命令1910之前。属性注释可以使用“阴影属性袋(shadow property bag)”来实现,或通过在属性袋中添加自定义名字空间中的属性注释来实现。只要标记注释可在处理格式化小命令1920的过程中维护,标记小命令1930就可出现在格式化小命令1920之前。
第四序列1904再次示出了格式化小命令1920在输出小命令1910之前。然而,在第四序列1904中,在格式化小命令1920和输出小命令1910之间管道化了转换小命令1 940。转换小命令1940也被配置成处理由格式化小命令1920发出的格式化对象。转换小命令1940将管道化的对象转换成基于特定编码的格式化对象。转换小命令1940与该特定的编码相关联。例如,将管道化对象转换成现用目录对象(ADO)的转换小命令1940可以在命令行上被声明为“convert/ADO”。同样,将管道化对象转换成用逗号分隔的值(csv)的转换小命令1940可在命令行上被声明为“convert/csv”。某些格式化小命令1940(例如,convert/XML和convert/html)可以是阻断的小命令,这意味着所有管道化对象在执行转换之前接收。通常输出小命令1920可确定是否使用由格式化对象提供的格式化信息。然而,当转换小命令1920出现在输出小命令1920之前时,实际的数据转换已经在输出小命令接收对象之前发生。因此,在这一情况下,输出小命令不能忽略该转换。
第五序列1905示出了该顺序的格式化小命令1920、标记小命令1930、转换小命令1940以及输出小命令1910。由此,这示出了标记小命令1930可发生在转换小命令1940之前。
第六序列1906示出了格式化小命令1920、特定转换小命令(例如,convert/xml小命令1940′)、特定的变换小命令(例如,transfrom/xslt小命令1950)以及输出小命令1910。convert/xml小命令1940′将管道化的对象转换成可扩展标记语言(XML)文档。transform/xslt小命令1950使用可扩充样式语言(XSL)样式表将XML文档变换成另一XML文档。变换过程通常被称为可扩充样式语言变换(XSLT),其中,XSL处理器读取XML文档,并遵循XSL样式表中的指令来创建新的XML文档。
第七序列1907示出了格式化小命令1920、标记小命令1930、特定的转换小命令(例如,convert/xml小命令1940′)、特定的变换小命令(例如,transform/xslt小命令1950)以及输出小命令1910。由此,第七序列1907示出了令标记小命令1930在转换小命令和变换小命令的上游。
图20示出了由格式化小命令执行的示例性处理2000。格式化过程在由语法分析器和管道处理器以上述方式对格式化小命令进行语法分析和调用之后,在框2001开始。处理在框2002继续。
在框2002,接收管道对象,作为格式化小命令的输入。处理在框2004继续。
在框2004,启动查询以识别管道化对象的类型。这一查询由上文结合图18描述的扩展类型管理器执行。一旦扩展类型管理器识别了对象的类型,则处理在框2006继续。
在框2006,在显示信息中查找识别的类型。显示信息的示例性格式在图21中示出,并在下文描述。处理在框2008继续。
在判别框2008,确定是否在显示信息中指定了识别的类型。如果显示信息中没有识别类型的条目,则处理完成。否则,处理在框2010继续。
在框2010,从显示信息获取与识别的类型相关联的格式化信息。处理在框2012继续。
在框2012,在管道上发出信息。一旦信息被发出,处理完成。
现在更详细地描述可被发出的示例性信息。该信息可包括格式化信息、页眉/页脚信息以及组结束/开始信号对象。格式化信息可包括形状、标签、编号/项目符号、列宽度、字符编码类型、内容字体属性、页长度、“按……分组”属性名等等。这些的每一个可具有与其相关联的附加指定。例如,形状可指定形状是表格、列表还是其它。标签可指定是使用列标题、列表标签还是其它。字符编码可指定ASCII、UTF-8、Unicode等等。内容字体属性可指定应用到显示的属性值的字体。如果内容字体属性未被指定,则可使用默认字体属性(例如,Courier New,10磅)。
页眉/页脚信息可包括页眉/页脚范围、字体属性、标题、小标题、日期、时间、页编号、分隔符等等。例如,范围可指定文档、页、组等。对页眉或页脚可指定另外的属性。例如,对于组和文档页脚,另外的属性可包括计算总和/总计的属性或列、对象计数、用于总计和计数的标签串等等。
组结束/开始信号对象在格式化小命令检测到“按……分组”属性改变之后被发出。当发生这一情况时,格式化小命令将管道对象流作为先前已排序来处理,并且不对它们重新排序。组结束/开始信号对象可以散布在管道对象中。可对嵌套的排序指定多个“按……分组”属性。格式化小命令也可发出包括最终的总和和总计的格式化结束对象。
简要地转向图21,示例性显示信息2100是结构化的格式,并包含与定义的每一对象相关联的信息(例如,格式化信息、页眉/页脚信息、“按……分组”属性或方法)。例如,显示信息2100可以是基于XML的。上述属性的每一个然后可在显示信息内指定。显示信息2100内的信息可以由输入的对象类型的所有者来填充。操作环境提供了允许所有者通过创建、删除和修改条目来更新显示信息的某些API和小命令。
图22是列出由于某些格式化小命令(例如,formate/table(格式化/表格)、format/list(格式化/列表)以及format/wide(格式化/宽))、标记小命令(例如,add/markup(添加/标记))、转换小命令(例如,convert/text(转换/文本)、convert/sv(转换/sv)、convert/csv(转换/csv)、convert/ADO(转换/ADO)、convert/XML(转换/XML))、变换小命令(例如,transform/XSLT(变换/XSLT))以及输出小命令(例如,out/console(输出/控制台)、out/file(输出/文件))的示例性句法2201-2213。图23示出了由使用输出处理小命令(例如,格式化小命令、转换小命令和标记小命令)的各种管道序列的out/concole小命令呈现的结果。
如上所述,获取并应用交互式环境中的约束的机制可用于管理工具环境中。然而,本领域的技术人员可以理解,该机制可以用于各种交互式环境中。
尽管上文描述了具体实现和实施例的细节,然而这些细节旨在满足法定的公开约束,而非限制所附权利要求书的范围。由此,所附权利要求书所定义的本发明不限于上文所描述的具体特征。相反,本发明是以落入所附权利要求书的正确范围内、依照等效技术方案的原则适当解释的其形式或修改的任一个要求保护的。

Claims (24)

1.一种具有计算机可执行指令的计算机可读介质,所述指令包括:
接收交互式环境中的串;
识别所述串内的属性;
识别与所述属性相关联的构造;以及
保存将所述属性与所述构造相关的信息。
2.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了所述构造的约束。
3.如权利要求1所述的计算机可读介质,其特征在于,所述构造包括变量、结构、函数或脚本。
4.如权利要求1所述的计算机可读介质,其特征在于,所述信息包括元数据。
5.如权利要求1所述的计算机可读介质,其特征在于,还包括当交互地遇到所述构造时,向所述构造应用所述属性。
6.如权利要求1所述的计算机可读介质,其特征在于,所述串包括在命令行环境中输入的命令串。
7.如权利要求1所述的计算机可读介质,其特征在于,所述串包括脚本的一部分。
8.如权利要求1所述的计算机可读介质,其特征在于,识别所述属性包括识别与所述构造相关联的多个属性。
9.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了所述构造的类型。
10.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了向所述构造应用智能以自动完成所述构造。
11.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了向所述串应用用于判断所述串的处理是否继续的谓词伪指令。
12.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了应用用于指示获取所述构造的方式的语法分析伪指令。
13.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了用于生成储存在所述构造内的一组信息的数据生成伪指令。
14.如权利要求1所述的计算机可读介质,其特征在于,所述属性指定了用于判断分配给所述构造的值是否满足由所述属性指定的准则的数据确认伪指令。
15.一种处理交互式环境内指定的约束的方法,其特征在于,所述方法包括:
识别交互式环境内输入的串内的预定义开始符号和结束符号;
识别所述开始符号和所述结束符号之间的约束名;以及
识别所述结束符号之后的构造。
16.如权利要求15所述的方法,其特征在于,还包括,只要在所述交互式环境内遇到所述构造,则向所述构造应用所述约束。
17.如权利要求16所述的方法,其特征在于,所述约束包括谓词伪指令,并且应用所述约束包括在继续处理所述构造前判断是否满足一条件。
18.如权利要求16所述的计算机可读介质,其特征在于,所述属性指定了向所述构造应用智能以自动完成所述构造。
19.如权利要求16所述的计算机可读介质,其特征在于,所述属性指定了应用用于指示获取所述构造的方式的语法分析伪指令。
20.如权利要求16所述的计算机可读介质,其特征在于,所述属性指定了用于生成储存在所述构造中的一组信息的数据生成伪指令。
21.如权利要求16所述的计算机可读介质,其特征在于,所述属性指定了用于判断分配给所述构造的值是否满足由所述属性指定的准则的数据确认伪指令。
22.如权利要求15所述的计算机可读介质,其特征在于,所述开始符号包括左括号,并且所述结束符号包括右括号。
23.一种处理输入参数的系统,其特征在于,所述系统包括:
用于处理的装置;以及
存储器装置,所述存储器装置为多个计算机可执行指令而分配,所述多个计算机可执行指令被加载到所述存储器装置中,以供所述处理装置执行,所述计算机可执行指令执行一种方法,包括:
用于接收交互式环境中的串的装置;
用于识别所述串内的属性的装置;
用于识别与所述属性相关联的构造的装置;以及
用于保存将所述属性与所述构造相关联的信息的装置。
24.如权利要求23所述的系统,其特征在于,还包括用于在交互地遇到所述构造时向所述构造应用所述属性的装置。
CN2004800012959A 2003-10-24 2004-07-22 用于获取并应用交互式环境内对构造的约束的方法和系统 Expired - Fee Related CN101351771B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/693,396 2003-10-24
US10/693,396 US7676798B2 (en) 2003-10-24 2003-10-24 Mechanism for obtaining and applying constraints to constructs within an interactive environment
PCT/US2004/023365 WO2005045561A2 (en) 2003-10-24 2004-07-22 Mechanism for obtaining and applying constraints to constructs within an interactive environment

Publications (2)

Publication Number Publication Date
CN101351771A true CN101351771A (zh) 2009-01-21
CN101351771B CN101351771B (zh) 2011-04-13

Family

ID=34522384

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2004800012959A Expired - Fee Related CN101351771B (zh) 2003-10-24 2004-07-22 用于获取并应用交互式环境内对构造的约束的方法和系统

Country Status (11)

Country Link
US (1) US7676798B2 (zh)
EP (1) EP1597653A4 (zh)
JP (1) JP5047621B2 (zh)
KR (1) KR101130455B1 (zh)
CN (1) CN101351771B (zh)
AU (1) AU2004279164B2 (zh)
BR (1) BRPI0406428A (zh)
CA (1) CA2501657C (zh)
MX (1) MXPA05006643A (zh)
RU (1) RU2367999C2 (zh)
WO (1) WO2005045561A2 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7712074B2 (en) * 2002-11-21 2010-05-04 Bing Ren Automating interactions with software user interfaces
US20040268155A1 (en) * 2003-06-04 2004-12-30 Andrews Craig C Distributed control of fuel cell operation
US7640540B2 (en) * 2003-10-24 2009-12-29 Microsoft Corporation Mechanism for providing extended functionality to command line instructions
US7454696B2 (en) * 2004-04-09 2008-11-18 International Business Machines Corporation Method and apparatus for stream based markup language post-processing
US7657874B2 (en) * 2004-08-24 2010-02-02 Microsoft Corporation Pattern types as constraints on generic type parameters
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
US7640345B2 (en) 2006-09-18 2009-12-29 Emc Corporation Information management
US8321836B2 (en) * 2007-06-21 2012-11-27 Microsoft Corporation Late bound programmatic assistance
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US9043727B2 (en) * 2007-07-26 2015-05-26 Microsoft Technology Licensing, Llc Visualization techniques for imprecise statement completion
US20090089739A1 (en) * 2007-09-28 2009-04-02 Microsoft Corporation Intelligent editing of relational models
US9141658B1 (en) 2007-09-28 2015-09-22 Emc Corporation Data classification and management for risk mitigation
US9461890B1 (en) 2007-09-28 2016-10-04 Emc Corporation Delegation of data management policy in an information management system
US9323901B1 (en) 2007-09-28 2016-04-26 Emc Corporation Data classification for digital rights management
US8572568B2 (en) * 2008-10-14 2013-10-29 Hewlett-Packard Development Company, L.P. Test tool for concurrent web services and user interface testing
US8364696B2 (en) 2009-01-09 2013-01-29 Microsoft Corporation Efficient incremental parsing of context sensitive programming languages
US8627305B1 (en) * 2009-03-24 2014-01-07 Mcafee, Inc. System, method, and computer program product for hooking code inserted into an address space of a new process
US20110145786A1 (en) * 2009-12-15 2011-06-16 Microsoft Corporation Remote commands in a shell environment
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
US10120776B2 (en) * 2014-09-04 2018-11-06 Home Box Office, Inc. Documents for human readable documentation and runtime validation
JP7080595B2 (ja) * 2017-07-14 2022-06-06 キヤノン株式会社 情報処理装置及びその制御方法、並びにプログラム
JP6904826B2 (ja) 2017-07-14 2021-07-21 キヤノン株式会社 情報処理装置及びその制御方法、並びにプログラム
US10977155B1 (en) * 2018-05-31 2021-04-13 The Ultimate Software Group, Inc. System for providing autonomous discovery of field or navigation constraints
CN114547921B (zh) * 2022-04-28 2022-09-20 支付宝(杭州)信息技术有限公司 离线求解方法和装置、在线决策方法和装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5276880A (en) 1989-12-15 1994-01-04 Siemens Corporate Research, Inc. Method for parsing and representing multi-versioned computer programs, for simultaneous and synchronous processing of the plural parses
US6075817A (en) 1991-12-23 2000-06-13 Digital Compression Technology Compressive communication and storage system
US5892950A (en) * 1996-08-09 1999-04-06 Sun Microsystems, Inc. Interface for telecommunications network management
US5854930A (en) 1996-12-30 1998-12-29 Mci Communications Corporations System, method, and computer program product for script processing
US6263376B1 (en) * 1997-02-24 2001-07-17 Novell, Inc. Generic run-time binding interpreter
WO1999063431A2 (en) 1998-06-01 1999-12-09 Quality Consultants, Inc. Preprocessor for encapsulating software source scripts
US6208339B1 (en) * 1998-06-19 2001-03-27 International Business Machines Corporation User-interactive data entry display system with entry fields having distinctive and changeable autocomplete
US6654953B1 (en) 1998-10-09 2003-11-25 Microsoft Corporation Extending program languages with source-program attribute tags
US6658625B1 (en) 1999-04-14 2003-12-02 International Business Machines Corporation Apparatus and method for generic data conversion
US6625590B1 (en) 1999-08-10 2003-09-23 International Business Machines Corporation Command line interface for reducing user input in a network management device
US6629313B1 (en) 2000-06-29 2003-09-30 Microsoft Corporation In-line database access statements without a pre-compiler
US6941558B2 (en) * 2001-10-31 2005-09-06 Agilent Technologies, Inc. System and method for automatically generating an object-oriented class wrapper
US7032210B2 (en) 2001-11-11 2006-04-18 International Business Machines Corporation Method and system for generating program source code of a computer application from an information model
US20030115309A1 (en) 2001-12-19 2003-06-19 Mann Robert Alexander Methods of invoking polymorphic operations in a statically typed language
US20040006765A1 (en) * 2002-04-16 2004-01-08 Goldman Kenneth J. Live software construction with dynamic classes
US7055132B2 (en) * 2002-06-28 2006-05-30 Microsoft Corporation System and method for associating properties with objects
US20040153995A1 (en) * 2003-02-03 2004-08-05 Jean-Pierre Polonovski Software development tool
US7620959B2 (en) * 2003-05-12 2009-11-17 Microsoft Corporation Reflection-based processing of input parameters for commands

Also Published As

Publication number Publication date
WO2005045561A3 (en) 2008-06-05
EP1597653A4 (en) 2009-01-28
AU2004279164A1 (en) 2005-06-23
KR101130455B1 (ko) 2012-07-03
RU2005115980A (ru) 2006-01-20
CA2501657C (en) 2012-06-26
US7676798B2 (en) 2010-03-09
BRPI0406428A (pt) 2005-10-04
MXPA05006643A (es) 2005-08-16
AU2004279164B2 (en) 2009-12-10
JP2007519070A (ja) 2007-07-12
RU2367999C2 (ru) 2009-09-20
KR20060111363A (ko) 2006-10-27
CA2501657A1 (en) 2005-04-24
US20050091531A1 (en) 2005-04-28
AU2004279164A8 (en) 2008-10-02
WO2005045561A2 (en) 2005-05-19
JP5047621B2 (ja) 2012-10-10
EP1597653A2 (en) 2005-11-23
CN101351771B (zh) 2011-04-13

Similar Documents

Publication Publication Date Title
CN100547552C (zh) 用于自动化管理任务的系统和方法
CN101351771B (zh) 用于获取并应用交互式环境内对构造的约束的方法和系统
CN101073057B (zh) 提供命令行操作环境的方法和系统
CN100592256C (zh) 无缝地比较对象的系统和方法
KR101130500B1 (ko) 데이터 구동 커맨드 라인 출력을 제공하는 메커니즘
KR101098603B1 (ko) 원격 경계를 가로질러 컴퓨터 판독가능한 객체들을전달하기 위한 시스템 및 방법
AU2004279192B2 (en) Mechanism for analyzing partially unresolved input

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150507

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150507

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110413

Termination date: 20200722