




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
跟我从头学WMI(一),介绍WMI 呵呵,这是我耽搁了很久的帖子,以前一直说抽空弄好,放到盆盆的坛子上来,但一直就懒,这次整理了一下,放上来。给各位大侠们批判!后续篇章就这两天完成。介绍WMI的基础结构一. 概览:企业面临的挑战不同的系统安装有不同的代理,管理着不同域通常一个系统上有安装多种代理,每个代理都有自己的协议和数据格式。Desktop Management Interface (DMI):was designed to report only hardware-oriented data。每一种不同的协议都有自己特有的API和数据格式Directory Service tools use Lightweight Directory Access Protocol (LDAP) to communicate with Microsoft Active Directory.Microsoft SQL Server. Enterprise Manager uses COM to talk to SQL. Managing Performance Monitoring requires access to the registry.挑战是:如何开发出一种简便易用的统一接口,方便用户的管理二. 企业管理的挑战1. WMI的目标WMI的目标Enterprise Manageability: WMI在操作系统中内置了管理基础结构Enable System and Application Observation and Control 隐藏了复杂的、分裂的、多样的系统管理技术(比如win32,WDM,DMI等) 一致的执行 一个单一的访问点Make Windows the Best-Managed Operating System WMI支持最新的微软产品,第三方厂商也开发出各种基于wmi的工具2. 什么是WMI使可扩展的基于架构模式的管理简易化The model is based on the Common Information Model (CIM), which forms part of the WBEM standard owned by the Distributed Management Task Force (DMTF).提供了丰富的事件和查询管理服务集简化易用的WQL,是一种类SQL的语言,能够查询特殊的数据Remote-enable提供远程的数据能力Scriptable 提供一个scripting api接口WMI历史Nt 4 1.01 Sms 2.0 1.1Win2000 1.5Winxp/2003 2.03. 常规管理任务查看系统状态:安装200个客户端,服务器上的共享是否正常,是否在客户计算机上有冲突的服务,是否有足够的内存和硬盘等等监视:要清楚事件日志,定义一个最大的尺寸,要注意一个远程计算机上的特定错误,要适时地获得一些系统在备份操作时的性能数据等注册表:要重设远程计算机的注册表,使其适应一个新的应用程序的运行事件:知道特定的计算机刷新dhcp地址,在一台服务器上有太多的尝试登陆,当远程服务器的服务停止时发送一个邮件。举例: 查看计算机上的共享For each obj in _ GetObject(WinMgmts:).instancesOf(win32_share) strResult = strResult & & vbcrlf NextWscript.echo strResult 运行的进程For each obj in _ GetObject(WinMgmts:).instancesOf(win32_process) strResult = strResult & & vbcrlf NextWscript.echo strResult 返回网卡情况For each obj in _ GetObject(WinMgmts:).instancesOf(win32_networkadapter) strResult = strResult & & vbcrlf NextWscript.echo strResult 教室里的计算机的内存情况,需要编辑Dim system(5)system(0) = Localhostsystem(1) = Localhostsystem(2) = Localhostsystem(3) = Localhostsystem(4) = LocalhostFor i = 0 to Ubound(system)Set oSysSet = GetObject(WinMgmts:/ & _system(i).instancesOf(win32_computerSystem)For Each oSys in oSysSet strResult = strResult & oS & has & _oSys.totalPhysicalmemory & Bytes & vbcrlf NextNextWscript.echo strResult 三. WMI的概览1. WMI基础结构WMI架构WMI使用CIM(Common Information Model)来描述在windows 系统中管理的对象。WMI可以被描述成三层Consumers(消费者) layer是应用程序,使得数据可以被WMI所管理。比如script,acitvex MOM SMS,它们均使用相同的underlying 接口,基于com 对象,隐藏起复杂性,应用程序不需要直接知道系统是如何驱动数据的。CIM是WMI的核心,%SystemRoot%System32WBEMRepository 其中的cim.rep,是一个仓库,包含了所有的类定义等等信息。Windows Management Service就像一个CIM仓库的代理人,这个角色被描述成Common Information Model ObjectManager (CIMOM).是%SystemRoot%System32WBEMWinMgmt.exe.MOFManagement Object Format 用来定义在CIM中的类,实例和名称空间。在%SystemRoot%System32Mofcomp.exeProvidersProviders are pieces of software that communicate directly with the managed objects by using their native application programming interfaces (APIs).2. 管理对象管理对象:一个管理对象可以是任何系统管理者感兴趣的item,包括device,application,整个系统或服务。管理应用程序在一个有WMI能力的系统上,应用程能被自动控制。四. 常用的信息模式1. 对象模式WMI提供了一个一致和可扩展的对象表述,用来管理类WMI是一个分类系统,被管理对象依类形被划分。比如win32_share类用于共享对象,包含文件夹,打印机等等Win32_networkadapter类是网卡,可以使10/100m以太网卡,令牌环网网卡等子类是从父类导出的,WMI采用了一个类和子类的层次结构。在日常的管理中,最为常见的是叶子(leaf)类。属性:对类的描述比如:Win32_NetworkAdapter class is defined with the properties that reflect thecharacteristics of interest for network cards. These include items such as Name,Manufacturer, and MACAddress. Similarly, Win32_Process has Name,Creationdate, and MaximumWorkingSetSize properties to describe processes。大多数的类定义了一个或多个key properties,是唯一的描述,比如win32_networkadapter的device id和win32_share的name另一种重要的属性是关联属性,该属性被描述成和其他类的属性有关联。Qualifiers(限定)比如限定一个描述最大的长度(maxlen=256)Instances(实例) 具体的某个由类派生的东西方法:类和实例支持方法和数据库类似Class TableInstance RowProperty AttributeKey Primary keyReference Foreign key2. CIM schemaCIM schema架构用于管理和类命名类的名称必须唯一当前有三个主要架构被用于CIM核心和常规架构核心架构定义最多的抽象类,其他的类都是从抽象类导出。所以,CIM_managedsystemelement是管理对象的起点。从这里,CIM定义CIM_logicalelement,随后,定义了CIM_Logicaldevice,当然,这些类可以继续细分下去,比如CIM_MediaAccessDevice 有两个schema被定义在WEBM标准:vendor-independent和platform-independent,在这个级别不需要创建新的类。Extensible schemasVendor-specific和platform-specific.在WMI,这些类通常使用win32_schma,这个类是在管理最重要的。这些类从wbem标准常规类中派生出来。并且包含windows的额外信息。3. 举例: Cscript CLASSProps.VBS-strSuperClass = CIM_ManagedSystemElementWhere to start searchingiFlags = 0search all subclassesvClassCount = 0vPropCount = 0For Each oSubClass in GetObject(WinMgmts:).SubclassesOf(strSuperClass,iFlags)If Left(oSubClass.Path_.RelPath,5) = Win32 ThenvClassCount = vClassCount + 1wscript.Echo oSubClass.Path_.RelPath For Each oProp in oSubCperties_vPropCount = vPropCount + 1wscript.Echo space(20)& oP,vType NextEnd IfNextstrMsg = There were & cStr(vClassCount)& Win32 Classes, & vbcrlf strMsg = strMsg & cStr(vPropCount) & Properties & vbcrlf MsgBox strMsg,vbInformation,Win32_Classes under & strSuperClass -上面的例子注意: SubclassesOf方法0代表递归查找,1代表仅仅查1层 通过将其改为1就可以看到在CIM_ManagedSystemElement类下面有2个子类 CIM_PhysicalElement CIM_LogicalElement 参考:/en-us/library/aa393875(VS.85).aspx然后逐次替代顶级类,观察下面的子类 Cscript ClassMethods.VBS:注意,并不是所有的类都有方法Cscript StartCalc.vbs:启动计算器 五. 访问WMI1. 名称空间名称空间名称空间是classes的逻辑组,root是层次结构的最高级,类似文件系统Root The start of the namespace hierarchy.CIMV2 The namespace for storing objects that relate to the management domain of systems such as computers and their operating systems.DEFAULT The namespace where classes are created by default, if no other namespace is specified.directory A generic namespace for directory services. WMI creates a sub-namespace called LDAP.SECURITY A namespace used to support WMI on Windows 9x computers.WMI A namespace for classes that use Windows Driver Model providers. This avoids name conflicts with class names in the CIMV2 namespace.注意,不要将namespaces和类的继承混淆。2. WMI providersWMI providers是标准的com/com+ servers能够: 处理动态的dll 本地/远程windows nt/2000服务 Out-of-process EXEsProvider rolesInstance provider:提供管理对象的instances给windows management serviceEvent provider:写报告到windows management service从被管理对象被生成的时候Property provider: 找回和编辑属性Method provider: 调用请求操作Class provider: 找回,编辑,删除 和枚举特定的classProvider typeApplication-specific provider:是由特定的应用程序提供的。比如sqladmin provider,exchange provider等Built-in provider: WMI SDK标准提供所有的providers必须注册在wmi repository。这是windows management service知道如何调用那些服务。For each obj in _ GetObject(WinMgmts:server1).instancesOf(_win32Provider) strResult = strResult & & vbcrlf Next WScript.Echo strResult 参考:/en-us/library/aa393870(VS.85).aspx3. WMI的标准providerWMI 标准 providers每一个标准provider有一个mof file来构建class,并且注册在名称空间中。标准providers由wmi或wmi sdk提供。Win32 providerThe Win32 provider defines the classes used to describe hardware or software available on Win32 systems and the relationships between them.SNMP Provider 默认没有直接安装,systemwbemwbemsnnp.exe安装后在名称空间中形成:rootsnmp Performance Counter Provider 从perfomance monitor中实时返回数据Registry Provider 应用程序使用它读取和修改注册表Windows Driver Model Provider (WDM) 提供了设备的信息的简要方法4. MOFWMI repository的规范能够被描述为一个或多个MOF文件Managed Object Format Language 是一种编译语言,由DMTF(Managed Object Format Language)创建,并给予IDL(InterfaceDefinition language),MOF被用于定义名称空间,类和实例MOFcomp 名称空间,类,和实例被定义在ascii或unicode文本文件中,并被提交到MOF编译器。MOFcomp.exe将文本文件编译为2进制格式。Windows management service使用2进制格式来增加名称空间,类和实例到cim repository.WMI Repository被编辑在多个MOF文件中,核心的MOF文件安装在%systemroot%system32wbem文件夹中。MOF File Classes supported byCimwin32.mof Win32 providerDSProv.MOF Directory Service providerNTEvt.MOF NT Event Log providerRegEvent.MOF Registry Event providerMsi.MOF MS Installer provider自动恢复当Windows Management service启动的时候,WMI检查WMI repository的完整性,如果repository被破坏了,WMI自动重建和重编译MOF文件那些列在autorecover mofs key中的。HKLMSoftwareMicrosoftWBEMCimomautorecover mofs 跟我从头学WMI(二)-访问WMI对象 WMI对象一. 使用脚本连接到WMI1. 使用SWBEM脚本APISWBEM脚本是可以用来访问和控制WMI内部对象的一系列可用在脚本中的对象。 Scripting object model 脚本通过访问wbemdisp.dll这个library来访问wmi对象,这个仅被设计用来为脚本工作。 Collections Swbem API 支持collection object。这些对象包含其它对象,比如用脚本返回系统正在运行的进程,那么返回的就是一个collection,包含很多对象,每个对象包含一个单独的进程For Each objProc in objProcSet WScript.Echo objPNext 属性和方法对象包含属性和方法,在脚本中,在名称后用点来分隔,比如: objP. 属性数组有些wmi的属性是一个数组,比如在Win32_NetworkAdapterConfiguration的WMI类中,IPAddress属性就是一个数组你用下面的脚本就会报错:WScript.Echo NicConfig.IPAddress 必须用下面的脚本来反映可能的组件构成If isArray(obj.IPAddress) ThenFor i = 0 to Ubound(obj.IPAddress,1)strResult = strResult & IP: _& obj.Ipaddress(i) & vbcrlf NextElsestrResult = strResult & obj.IPAddress & vbcrlf End IfWscript.Echo strResult 2. 使用一个locator获得WMI的连接有两种方法可以通过脚本连接到WMI第一种是locator对象 你可以通过vbs 编辑器直接创建locator对象,SWbemLocator对象是对象模式中可以通过vbscrip来创建的对象模型之一,创建这个对象的实例.vbscrip来创建的对象模型之一,创建这个对象的实例,Set objLocator = _CreateObject(wbemScripting.SwbemLocator)ConnectServer方法被用来为特定服务器和名称空间提交一个SWbemServices对象,在这个过程中要提交相应的安全信息Set object = LocatorObjects.ConnectServer _(ServerName, Namespace, UserAccount, UserPassword,_Locale, Authority, SecurityFlags, NamedValueSet)Enumerate (例举、枚举对象)返回: 属性,方法3.使用Moniker获得WMI的连接 什么是Moniker(绰号) Moniker是COM程序的概念,简单讲,就是用来替代掉复杂的在COM下的链接对象。 在脚本中,你可以通过显示名称来使用Moniker的,比如WinMgmts WMI使用WinMgmts:前缀WinMgmts:是一个反应地点和验证绑定的WMI名称空间的moniker。 于此类似的是adsi,用来连接到不同的目录服务。 它使用VBScript的GetObject方法 下面是举例: Set objSvc = GetObject(WinMgmts:)对于moniker,在语法上有明显的三部分:强制部分,安全部分,对象路径 Mandatory Component(强制组件)至少,moniker语法包含winmgmts:上面的例子显示了moniker如何使用仅有的一个强制组件,它返回一个SWbemservice对象,链接到本地计算机和默认的名称空间rootcimv2上,使用的票证是当前的登录用户 Security Setting components安全设置选项是一个可选项,默认的默认的安全设置对于大多数的WMI脚本是足够的, ! Impersonation! Authentication! Authority! Privileges设置在括号中,如下列示例:Set objSvc = _GetObject(WinMgmts:impersonationLevel=impersonate)local setting component允许脚本制定语言版本,比如对象描述是一个字符串,CIM存有不同语言版本的字符串,local setting允许脚本决定采用什么样的版本Set objSvc = _ GetObject(WinMgmts:Locale = ms_409)这个例子,代表着使用Language ID x409的语言,指的是US EnglishWMI Object Path Component在WinMgmts,可以使用下列的参数,来对一个对象进行描述! The server.! The namespace.(比如从默认的rootcimv2变为rootsnmp)! The object.这意味着使用winmgmts:moniker语法可以连接到远程计算机上。越来越多的应用程序使用自己的独立的名称空间,比如rootMicrosoftSQLServer名称空间用于SQLServeradmin provider,用于通过WMI管理SQL server.举例:下面是在默认的rootcimv2名称空间,这三部分可以多样的组织,这使得winmgmts:成为非常简易和有力的脚本工具。 Set objLogicalDisk = _GetObject(WinMgmts:Win32_LogicalDisk.DeviceId=C:)通常,分号“:”隔离Winmgmts和对象路径,比如WinMgmts:Win32_LogicalDisk.DeviceId=C:.如果,你有安全设置,你必须使用“!”比如: WinMgmts:impersonationLevel=impersonate!Win32_LogicalDisk.DeviceId=C:GetObject(“WinMgmts:”)The SWbemServices object for the default namespace (rootcimv2) on the local computer.GetObject(“WinMgmts:/Instructor”) The SWbemServices object for the default namespace (rootcimv2) on the instructor computer.GetObject(“WinMgmts:/Instructor/root/cimv2”)The SWbemServices object for the specified namespace on the instructor computer.GetObject(“WinMgmts:root/cimv2”)The SWbemServices object for the specified namespace on the default server (Local).GetObject(“WinMgmts: Win32_LogicalDisk.DeviceID = C:”)The SWbemObject object for the instance of the logical drive C on the default server (Local).GetObject(“WinMgmts: impersonationLevel=impersonatelocale=ms_409 !/Instructor/root/cimv2: Win32_LogicalDisk”)The SWbemServices object for the specified namespace and object on the instructor computer by using the impersonate security setting and US English locale setting. Note that the exclamation mark is required to demarcate the objectpath in this example.注意,在使用中“/”和“”是通用的4. Locator和moniker的比较Object returned使用locator对像的connectserver方法,仅返回SWbemService对象,需要另一个步骤的步骤取回一个SWbemObject对象。你必须采用被SWbemService支持的一种方法,比如Get方法:如下所示:Set objLocator = CreateObject(wbemscripting.SwbemLocator)Set objSvc = objLocator.ConnectServer()Set objDisk_C = objSvc.Get(Win32_LogicalDisk.DeviceID=C:)freeSpace = objdisk_C.freeSpace Wscript.echo The Free Space on C: is & freeSpace 而采用winMgmts:moniker要更灵活,因为它可以即可以被用来返回SWbemService对象,也可以是直接返回SWbemObject对象。下面的例子,moniker被用来提交一个实际的实例,来反映逻辑磁盘c:Set objDisk_C = _GetObject(WinMgmts:Win32_LogicalDisk.DeviceID=C:)freeSpace = objdisk_C.freeSpace Wscript.echo The Free Space on C: is & freeSpace SecurityLocator和moniker机制都提供设置扮演,验证,授权和特权设置。 只有locator对象的connectServer方法当你链接的时候允许你使用不同的票证。在下面的例子中,当前登录的用户选择一个用户帐号,sysadmin,密码是password链接到server1的rootcimv2的名称空间Set objLocator = CreateObject(wbemscripting.SwbemLocator)Set objSvc = _objLocator.ConnectServer(Server1,sysAdmin,password,)Set objDisk_C = objSvc.Get(Win32_LogicalDisk.DeviceID=C:)freeSpace = objdisk_C.freeSpace Wscript.echo The Free Space on C: is & freeSpace Winmgmts:moniker链接总是使用运行脚本用户的票证。这看起来似乎限制了使用moniker,但在实际上,大多数脚本由管理员运行,他往往不需要修改他的票证。反而是,如果把用户和密码作为脚本的一部分,会引发安全隐患。 5. 使用SWbemServices ObjectKey Object for accessing WMI Features无论脚本是用locator object,并且运行connectServer方法,或是使用winMgmts:moniker,结果是一样的。WMI返回一个SWbemServices对象的实例。SWbemService对象可以被执行18种方法中的一种,并且提供WMI脚本管理的主要功能。 propertiesSWBemService对象只有一个属性,security属性,用来对访问WMi进行设置验证,扮演和特权。Class and Intances 一些方法返回类和实例,通常,你必须返回一个对象的实例,来读取它的属性。常见的例子包括空闲的磁盘空间,内存尺寸或网络IP地址等等,下面的例子是win32_process对象的实例,指明process ID 764的unique processSet objSvc = GetObject(WinMgmts: )Set obj = objSvc.Get(Win32_process.handle=764)Wscript.echo Working Set: is & obj.workingSetSize 但是,也有一些特殊的情况下,重要的是要取得类,而不是实例。举例来说,创建一个新的进程是一个类方法,不是一个实例方法。要运行一个新的进程,你必须因此而检索Win32_process类。在下面的例子中,一个类被返回,因为没有一个实例所指定的关键属性(处理)。Set objSvc = GetObject(WinMgmts: )Set obj = objSvc.Get(Win32_process)Result = obj.Create(calc.exe, null, null, processID)二. 访问WMI对象1. 使用属性和方法在脚本里,属性或方法是用点分隔描述的 类和类的实例有属性和方法,它们各不相同,WIM的SDK信息于此关联。 安装软件情景 你需要在远程系统上安装windows installer package(.msi file),要做到这,在安装前,你需要初始确认那计算机是否有足够的物理内存。 要在脚本中使用一个对象的属性和方法,要执行以下步骤 1. 连接到WMI2. 提交一个SWbemServices对象 3. 使用一个SWbemSerive对象的枚举方法来获得SWbemObject对象,来表示你所需要类或实例。 4. 读取属性 5. 执行方法 考虑咨询WMI SDK,有两个类需要了解Win32_ComputerSystem 和 Win32_Product.检查物理内存Win32_ComputerSystem有51个属性,没有方法,要使用TotalPhysicalMemory属性,采用下面方法:Set objSvc = GetObject(winmgmts:Server1)Set obj = objSvc.Get(Win32_computerS=Server1)If obj.TotalPhysicalMemory 267952128 Then Must have 256MB Go ahead and installEnd If安装一个Windows Installer PackageWin32_Product类,支持11个属性和7个方法,Install方法可以用来安装一个windows install packasge,它具有三个参数,并返回一个数值,指明安装是成功还是失败。下面是语法:Product.install(PackageLocation,Options,AllUsers)PackageLocation:是msi文件的完整路径,Options允许命令行的一些特殊选项(如果需要)。Allusers被设定为True或False,指明这个包是安装给所有的用户还是当前登录用户,默认是True。在这里的例子,是一个简单的安装实例,.msi文件已经在本地,而其他参数没有加以设置Set objSvc = GetObject(winmgmts:Server1)Set obj = objSvc.Get(Win32_Product)VLocationPath = C:sourcescriptApp.msiretVal = obj.Install(VLocationPath)比如: 管理DHCP客户的情景情景:你需要暂时将DHCP服务器从网络上移开一会,在这个时候,客户机无法更新地址,你决定赋予客户机静态地址,然后当服务器可用时,重新设置其为DHCP客户机。这个任务要求访问每一个计算机,这有困难,所以可以使用WMI脚本禁用DHCP客户使用Win32_NetworkAdapterConfiguration包含属性和方法,有一些方法用来禁用DHCP,你通过设置静态地址来禁用DHCP,使用EnableStatic方法Obj.enableStatic(IPAddress,SubnetMask)下面是完整示例:Set objSvc = GetObject(WinMgmts:)Set obj = objSvc.Get _(Win32_NetworkAdapterConfiguration.index=0)ipaddr = Array(5)subnet = Array()RetVal = obj.EnableStatic(ipaddr,subnet)注意,IPAddress和SubnetMask参数是一个数组,意味着可能有多个记录,一个网卡可能有多个地址等。在Win32_NetworkAdapterConfiguration类中,有一个key property是index,当index=0,指的是第一张网卡。启用DHCP使用同一个类的EnableDHCP方法Obj.enableDHCP() 下面是一个示例:Set objSvc = GetObject(WinMgmts:)Set obj = objSvc.Get _(Win32_NetworkAdapterConfiguration.index=0)RetVal = obj.EnableDHCP()GET和实例方法Get方法指定一个类或类的实例,为获得一个对象的实例,实例必须绝对确定,这表示你必须在脚本中为其提供一个辨识信息。在前面的例子中,你必须为特定的网卡进行网络设置。这个在WMI中用index number进行辨识。这个数字是在这个类中是key property。 Get方法仅工作于key properties.为获得一个对象的实例,实例必须绝对确定,这表示你必须在脚本中为其提供一个辨识信息。在前面的例子中,你必须为特定的网卡进行网络设置。这个在WMI中用index number进行辨识。这个数字是在这个类中是key property。 Get方法仅工作于key propertiesInstancesof方法被用于指明当前连接的名称空间的所有实例,返回一个集合,要用for each语法进行遍历 3. 编辑属性值 可写属性并不是所有的属性都可以改变的,比如Win32_Processor.currentClockSpeed(CPU的时钟频率),就算你修改这个cpu的时钟值为真实值的两倍,也不会加快系统的速度,所以,有些属性是只读的。但是,有些属性是可以修改的,比如一个分区的volumeName,什么样的属性是可写的取决于底层的开发商。但在多数情况下,该属性的的写特性被设置为True使用Put_Method 如果你采用一个方法,用脚本获取一个对象,这个对象的数据存放在memory中,当这个对象被释放,就将丢失。要修改属性值,它必须先写入内存,然后提交到长久的存储设备,使用Put_方法。虽然整个实例被提交到存储设备,但只有属性可修改才被改变。所有的其他的属性被简单忽略,不产生一个错误。注意,你不能写一个对象key property。使用场景:要将所有的桌面计算机的分区名进行标准化的转换。Set objSvc = GetObject(WinMgmts:)Set obj = objSvc.Get(Win32_LogicalDisk.DeviceId=C:)obj.VolumeName=Systemobj.Put_4. Qualifiers(约束)Qualifiers的目的是提供一种机制,使架构定义语言(schema definition language)在有限的和有控制的方式下进行扩展。什么是qualifierQualifier告知用户类或属性的“语义”,但并不强制。强制是provider的责任。比如,Win32_VideoConfiguration.AdapterCompatibility属性有一个qulifier叫maxlen,设置为256.这指明了这个属性可以接受的最大字符串长度。 The Key Qualifier如果一个属性的key qualifier设置为True,它被用来指示这个对象的唯一性,它和数据库表中的主键一个意思 valuemap和value一个valuemap qualifier包含了某属性所有允许的值。这些值可能是整数也可能是字符串。alueMap可以和Value qualifier进行映射比如:Win32_Proc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 路基技术员试题及答案
- 社区护理-学自学考试分章节复习试题(含答案1-4章)
- 2025年药店药品采购协议范本
- 2025设计师标准劳动合同书
- 2025公司终止合同证明样本
- 2025年春季部编版初中数学教学设计八年级下册第2课时 正比例函数的图像与性质
- 2025企业购房合同协议书范本
- 公司餐厅安全知识培训课件
- 公司财务知识培训的意义
- 公司财务报税知识培训课件
- 重庆市沙坪坝区人民医院消防安全整改工程施工方案
- 实验中学初一新生分班考试数学试卷附答案
- 施工组织设计施工总体部署完整版
- 天津电网规划设计技术原则
- YY 0054-2010血液透析设备
- LY/T 2383-2014结构用木材强度等级
- GB/T 8017-2012石油产品蒸气压的测定雷德法
- GB/T 528-2009硫化橡胶或热塑性橡胶拉伸应力应变性能的测定
- 中日关系历史
- 2023年江苏省中学生生物学竞赛(奥赛)初赛试题和答案
- DB32-T 3129-2016适合机械化作业的单体钢架塑料大棚 技术规范-(高清现行)
评论
0/150
提交评论