在重建整个存储库之前,我正在寻找一些列出 WMI 第三方提供程序的 Powershell cmdlet/脚本。
有 GWMI cmdlet 列出了所有 WMI 对象,但我缺少类似“公司:”,然后我将使用过滤器列出非微软 WMI。
Get-WmiObject -List | fl *
...
PSComputerName : MyComputer
Name : __SystemClass
__GENUS : 1
__CLASS : __SystemClass
__SUPERCLASS :
__DYNASTY : __SystemClass
__RELPATH : __SystemClass
__PROPERTY_COUNT : 0
__DERIVATION : {}
__SERVER : MyComputer
__NAMESPACE : ROOT\CIMV2
__PATH : \\MyComputer\ROOT\CIMV2:__SystemClass
Path : \\MyComputer\ROOT\CIMV2:__SystemClass
Derivation : {}
Methods : {}
Scope : System.Management.ManagementScope
Options : System.Management.ObjectGetOptions
ClassPath : \\MyComputer\ROOT\CIMV2:__SystemClass
Properties : {}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers : {abstract}
Site :
Container :
....
有什么方法可以检测第三方 WMI 提供程序?感谢您的帮助。
答案1
考虑到 WMI 的构建和实现方式,你对神奇的解决方案有点迷茫。我可以帮你一些忙,但你仍然需要亲眼看看结果。本质上,你需要从提供程序列表开始,你可以使用以下代码获取这些提供程序:
$Providers = Get-WmiObject "__win32provider"
如果数组数量不足,请仔细查看提供程序名称。Microsoft 没有使用标准命名约定,因此您可以忘记使用“MSProvider”等有用名称进行过滤。
建议并要求第三方(但不是强制要求)为自己的命名空间创建提供程序。任何不在“CIMV2”中的内容都应突出显示并进行更仔细的检查。作为参考,您可以查看第三方如何注册 WMI 提供程序以及注册时需要哪些信息这里。
上述代码返回的对象具有 CLSID 属性,该属性对应于 Windows 注册表中的条目。您可以循环遍历它们并查询注册表,看看是否有第三方向您可以用来识别它们的键添加了任何值。
祝您狩猎愉快。