当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 了解 Windows Management Instrumentation 及其在 Windows Server 中的作用

作者:精品下载站 日期:2024-12-14 12:28:27 浏览:17 分类:玩电脑

了解 Windows Management Instrumentation 及其在 Windows Server 中的作用


Windows Management Instrumentation (WMI) 是一个用于帮助管理 Windows 系统的 Windows 组件。 WMI 是 Microsoft 对基于 Web 的企业管理 (WBEM) 标准的专有实现。 WBEM是分布式管理任务组颁布的开放标准,旨在利用基于标准的互联网技术来统一分布式计算环境的管理。

本文摘自 Thomas Lee 所著的《Windows Server Automation with PowerShell Cookbook》一书中的其中一章。作者精心策划了 100 多个 PowerShell 秘诀,以便更有效地使用 Windows Server 2022/2019。

[玩转系统] 了解 Windows Management Instrumentation 及其在 Windows Server 中的作用

Windows Server Automation with PowerShell Cookbook:自动化和管理 Windows 管理任务的强大方法,第四版

探索 Windows 中的 WMI

Windows 在安装操作系统期间安装 WMI。安装过程会将大多数 WMI 组件(包括存储库、工具和提供程序)放入文件夹 C:\Windows\System32\WBEM 中。在正在运行的 Windows 主机内,WMI 作为一项服务运行,即 winmgmt 服务 (winmgmt.exe)。 Windows 在共享服务进程 (svchost.exe) 内运行此服务。在 Windows 中 WMI 的早期版本中,WMI 将所有 WMI 提供程序加载到 winmgmt 服务中。单个提供程序的故障可能会导致整个 WMI 服务失败。后来,在 Windows XP 及更高版本中,Microsoft 改进了 WMI,以在单独的进程 WmiPrvSE.exe 中加载提供程序。

在本节中,您将检查 WBEM 文件夹、WMI 服务和 WMI 运行时组件的内容。

准备工作

本配方使用 SRV1,即加入域的主机。您已在此主机上安装了 PowerShell 7 和 VS Code。

如何做到...

  1. 查看 WBEM 文件夹
$WBEMFOLDER = "$Env:windir\system32\wbem"
Get-ChildItem -Path $WBEMFOLDER |
  Select-Object -First 20 
  1. 查看 WMI 存储库文件夹
Get-ChildItem -Path $WBEMFOLDER\Repository 
  1. 查看 WMI 服务详细信息
Get-Service -Name Winmgmt  |
  Format-List -Property *
  1. 获取流程详细信息
$S = tasklist.exe /svc /fi "SERVICES eq winmgmt" |
       Select-Object -Last 1
$P = [int] ($S.Substring(30,4))
Get-Process -Id $P  
  1. 检查 WMI 服务进程加载的 DLL
Get-Process -Id $P |
  Select-Object -ExpandProperty modules |
    Where-Object ModuleName -match 'wmi' |
      Format-Table -Property FileName, Description, FileVersion
  1. 发现 WMI 提供商
Get-ChildItem -Path $WBEMFOLDER\*.dll |
  Select-Object -ExpandProperty Versioninfo |
    Where-Object FileDescription -match 'prov' |
      Format-Table -Property Internalname,
                             FileDescription,
                             ProductVersion
  1. 检查 WmiPrvSE 进程
Get-Process -Name WmiPrvSE 
  1. 查找 WMI 事件日志
$Log = Get-WinEvent -ListLog *wmi*
$Log
  1. 查看 WMI 日志中的事件类型
$Events = Get-WinEvent -LogName $Log.LogName
$Events | Group-Object -Property LevelDisplayName
  1. 检查 WMI 事件日志条目
 $Events |
  Select-Object -First 5 |
    Format-Table -Wrap
  1. 查看 WBEM 文件夹中的可执行程序
$Files = Get-ChildItem -Path $WBEMFOLDER\*.exe
"{0,15}  {1,-40}" -f 'File Name','Description'
Foreach ($File in $Files){
 $Name = $File.Name
 $Desc = ($File |
          Select-Object -ExpandProperty VersionInfo).FileDescription
"{0,15}  {1,-40}" -f $Name,$Desc
}
  1. 检查 CimCmdlet 模块
Get-Module -Name CimCmdlets |
  Select-Object -ExcludeProperty Exported*
    Format-List -Property *
  1. 在 CimCmdlets 模块中查找 cmdlet
Get-Command -Module CimCmdlets     
  1. 检查从 Get-CimInstance 返回的 .NET 类型
Get-CimInstance -ClassName Win32_Share | Get-Member  

怎么运行的…

WMI 服务和相关文件位于 Windows 安装文件夹的 System32\WBEM 文件夹中。

步骤 1 中,您可以查看该文件夹的部分内容

步骤 2 中,您检查构成数据库的文件,输出如下:

步骤 3 中,您使用 Get-Service 检查 WMI 服务。

步骤 4 中,您检查运行 WMI 服务的 Windows 进程。

步骤 5 中,您将查看 WMI 服务进程加载的 DLL。

每个 WMI 提供程序都是 WMI 服务可以使用的 DLL。

步骤 6 中,您查看 SRV1 上的 WMI 提供程序。

步骤 7 中,您检查 WmiPrvSE 进程。

与其他 Windows 服务一样,WMI 将事件记录到事件日志中,这可以帮助解决 WMI 问题。

步骤 8 中,您将查找任何与 WMI 相关的事件日志。

步骤 9 中,您从日志中获取事件以查看不同的日志级别。

在步骤 10 中,您可以查看 SRV1 上的前五个 WMI 事件日志条目。

步骤 11 中,您可以查看 WBEM 文件夹中的可执行程序。

通过 PowerShell 7(也可以选择使用 Windows PowerShell),您可以使用 CimCmdlets 模块中的 cmdlet 访问 WMI 的功能。您在安装 PowerShell 7 的过程中安装了此模块。Windows 安装程序在您安装主机操作系统时安装了此模块的一个版本。

步骤 12 中,您检查该模块的属性。

步骤 13 中,您使用 Get-Command 发现 CimCmdlets 模块中的 cmdlet。

在第 14 步中,您将在使用 GetCimInstance 命令后检查从 WMI 返回的对象的属性。

总结

在本文中,我们探讨了 Windows Management Instrumentation 的基础知识,并了解了它在 Windows Server 中的重要性和功能。本书进一步探讨了 WMI 与命名空间和类的相关性。本书进一步深入探讨了获取本地和远程 WMI 对象、使用 WMI 方法、管理 WMI 事件和实现永久 WMI 事件等主题。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯