浅谈WMI范文
背景:
采集Windows 日志的方式:
NXLog:C 语言写的一个开源日志收集处理软件,支持多平台。需要进行安装,配置使用。powershell怎么以管理员身份运行
WMI:是 Microsoft 对基于 Web 的企业管理 (WBEM) 的实现,WBEM 是一项业界倡议,用于为访问企业环境中的管理信息开发一项标准技术,是管理数据和操作在基于 Windows 操作系统上的基础结构。 可以编写 WMI 脚本或应用程序以在远程计算机上自动执行管理任务,但 WMI 还会向操作系统的其他部分和产品提供管理数据。需要对Windows 系统进行配置使用
WMI简介 
官方说法:
Windows Management Instrumentation (WMI) 是 Microsoft 对基于 Web 的企业管理 (WBEM) 的实现,WBEM 是一项业界倡议,用于为访问企业环境中的管理信息开发一项标准技术。 W
MI使用通用信息模型 (CIM)行业标准来表示系统、应用程序、网络、设备和其他托管组件。 CIM 由分布式管理任务组(DMTF) 来开发和维护。
WindowsManagement Instrumentation (WMI) 是管理数据和操作在基于 Windows 操作系统上的基础结构。可以编写 WMI 脚本或应用程序以在远程计算机上自动执行管理任务,但WMI 还会向操作系统的其他部分和产品提供管理数据,例如 System Center Operations Manager
(以前Microsoft
Operations Manager (MOM) ) 或 Windows 远程管理— (WinRM)。
WMI 可用于所有基于Windows的应用程序,在企业应用程序和管理脚本中非常有用。
通俗说法:
Windows 管理规范(Windows Management Instrumentation)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WMI通过编程和脚本语言为日常管理提供了一条连续一致的途径。用户可以:
在远程计算机器上启动一个进程。
设定一个在特定日期和时间运行的进程。
远程启动计算机。
获得本地或远程计算机的已安装程序列表。
查询本地或远程计算机的 Windows 事件日志。
WMI体系结构 
WMI为从计算机系统、网络或企业获取管理数据的任何本地或远程应用程序或脚本提供统一接口。统一接口的设计使得WMI客户端应用程序和脚本不必调用各种各样的操作系统应用程序编程接口(API)。许多API不能被脚本或Visual Basic应用程序等自动化客户端调用。
要从 WMI 获取数据,请编写一个客户端脚本或应用程序,用于访问 Wmi 类 或通过编写WMI提供程序向WMI提供数据。
下图显示了WMI 基础结构与WMI 提供程序和托管对象之间的关系,还显示了WMI 基础结构与WMI 使用者之间的关系。
结构说明:
托管对象和 WMI 提供程序
托管对象:WMI 提供程序是一个 COM 对象,用于监视 WMI 的一个或多个 托管对象。 托管对象是逻辑或物理企业组件,例如硬盘驱动器、网络适配器、数据库系统、操作系统、进程或服务。
 提供程序:提供程序的一个示例是预安装的 注册表提供程序,它在系统注册表中访问数据。 注册表提供程序有一个 WMI 类 StdRegProv,其中有许多方法,但没有属性。 其他预安装的提供程序(如 win32 提供程序)通常具有多个属性的类,但这种方法很少,如 Win32 _ 进程 或 win32 _ 逻辑磁盘。 注册表提供程序 DLL 文件 Stdprov.dll 包含在客户端脚本或应用程序请求时动态返回数据的代码。
WMI 基础结构
WMI 存储库:WMI 存储库 按WMI命名空间组织。WMI 服务在系统启动时创建一些命名空间(如root\default, root\cimv2, and root\subscription), 并预安装一组默认的类定义,包括 Win32 类、 WMI 系统类以及其他命名空间。 系统中到的其余命名空间由操作系统或产品的其他部分的提供程序创建。 有关详细信息以及大多数操作系统版本中的 WMI 提供程序的列表。
 WMI Core:WMI 服务充当提供程序、管理应用程序与 WMI 存储库之间的媒介。对象的静态数据存储在存储库中,如由提供程序定义的类。 当客户端请求大量数据时,WMI 会从提供程序动态获取该数据。 还可以设置订阅以从提供程序接收事件通知。
WMI 使用者:WMI 使用者是与 WMI 基础结构交互的管理应用程序或脚本。 管理应用程序可以通过调用WMI的 COM API 或 WMI 的脚本 API来查询、枚举数据、运行提供程序方法或订阅事件。 可用于托管对象(如磁盘驱动器或服务)的唯一数据或操作是提供程序提供的数据或操作。
WMI的使用 
通过编写脚本或应用程序从 WMI 获取数据
WMI客户端 
WMI 的核心功能包括从 WMI 存储库检索对象和检查这些对象的属性。
使用 PowerShell 创建客户端 WMI 和 PowerShell 紧密集成;因此,使用 PowerShell 检索 WMI 对象只需调用 Get-WmiObject cmdlet 即可。 请注意,为了保持一致性,第一个代码段显式说明了许多默认值;第二个示例假设默认值是正确的。
使用 VBScript 创建客户端 VBScript 是与 WMI 共同使用的原始脚本语言。 虽然 PowerShell 已变得越来越普遍,但本文档中的许多现有代码示例都是用 VBScript 编写的。 请注意,此特定 VBScript 示例明确说明了本地计算机路径以及模拟级别;这不是必需的,但通常是最佳做法。
使用 c # (创建 客户端) 此命名空间包含用于访问托管代码 WMI 的当前解决方案,称为 Windows 管理基础结构 (MI 或 WMIv2)。 目前,MI 是创建托管管理客户端所支持的技术。
使用 c # (system.web 创建客户端) 此命名空间包含用于通过托管代码访问 WMI 的原始解决方案。 尽管 系统管理 类仍可用,但在通常情况下,我们的 管理 类更有效且更好地扩展。
因此,建议使用 MI 类,而不是原始 WMI 类。 
WMI服务端设置 
WMI 可用于管理和访问远程计算机上的 WMI 数据。 Windows 防火墙和 DCOM 设置会影响 WMI 中的远程连接。 (UAC) 的用户帐户控制 也可能需要更改一些设置。 但是,一旦设置正确,对远程系统的调用与本地 WMI 调用非常类似。 您可以选择使用不同的凭据、备用身份验证协议和其他安全功能,使其更复杂。
Windows 防火墙 
使用防火墙页面启用或禁用 WMI 流量 1.在 控制面板 中,单击 "安全",然后单击 " Windows 防火墙" 2.单击 "允许应用或功能通过Windows Defender防火墙",然后单击"更改设置" 3.在 "允许的应用和功能" 窗口中,选中 Windows Management Instrumentation (wmi) 的复选框,以便通过防火墙启用 wmi 流量。 若要禁用 WMI 流量,请清除该复选框
用户帐户控制 (UAC) 
用户帐户控制 (UAC) 访问-令牌筛选可能会影响 WMI 命名空间中允许的操作或返回的数据。 在UAC 下,本地 Administrators 组中的所有帐户都使用标准用户 访问令牌运行,也称为 UAC 访问令牌筛选。 管理员帐户可以使用提升的权限("以管理员身份运行")运行脚本。
当你未连接到内置管理员帐户时,UAC 会影响与远程计算机的连接,具体取决于两台计算机是在域中还是在工作组中
DCOM设置 
WMI 使用 DCOM 来处理远程调用。 连接到远程计算机失败的一个原因是,DCOM 故障 (错误 "DCOM 拒绝访问" 十进制-2147024891 或 hex 0x80070005)。
a)在 " 启动权限 " 对话框中,单击 " 添加"。 b)在 " 选择用户、计算机或组 " 对话框中,在 " 输入要选择的对象名称 " 框中添加你的名称和组,然后单击 "确定"。
6.在 " 启动权限 " 对话框中,在 " 组或用户名 " 框中选择用户和组。 在 "用户权限" 下的 "允许" 列中,选择 "远程启动",然后选择 "远程激活",然后单击 "确定"。
授予 DCOM 远程访问权限:
WMI控件设置 
对 WMI 命名空间及其数据的访问由 安全描述符控制。 通过调整命名空间安全描述符来控制谁有权访问数据和方法,可以保护 命名空间 中的数据。
使用 WMI 控件设置命名空间安全性: 1.使用 MOF 代码创建托管对象格式 (命名空间) 命名空间。 2.运行 WMI 控件以设置新命名空间的安全性。 在" 开始" 菜单上, 单击"运行 "并键入 wmimgmt.msc 3.在 "WMI 控件" 窗格中,右键单击 "WMI 控件", 选择"属性 ",然后选择" 安全" 选项卡。 4.导航到新命名空间,单击" 安全性", 然后为命名空间配置组和权限
将命名空间安全设置为要求对远程连接进行数据加密 管理员或 MOF 文件可以配置 WMI 命名空间,以便不会返回任何数据,除非将 (RPC _ C _ 身份验证 _ LEVEL _ PKT _ 隐私 或 PktPrivacy 的数据包隐私设置为与该命名空间的连接中的脚本) 中的名字对象。 这可确保在数据跨越网络时对其进行加密。 如果尝试设置较低的身份验证级别,会收到 "拒绝访问" 消息。如VB示例代码 
WMI设置固定端口
WMI 作为共享服务主机的一部分运行,默认情况下,该主机具有通过 DCOM 分配的端口。 但是,可以将 WMI 服务设置为在单独的主机中作为唯一进程运行,并指定固定端口。
为 WMI 设置固定端口: 1.在命令提示符下,键入 winmgmt –standalonehost 2.通过键入命令 net stop"Windows Management Instrumentation" 来停止 WMI 服务,或使用 net stop winmgmt 的短名称 3.通过键入 net start "Windows Management Instrumentation" 或 net start winmgmt, 在新的服务主机中再次重启 WMI 服务 4.键入 netsh 防火墙添加端口打开 TCP 24158 WMIFixedPort,为 WMI 服务建立新的端口号

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。