查询Win32_Products需要很长时间,在尝试查询大量计算机时,这让我感到沮丧。我之前从未使用过MOF文件,但有人建议“创建”一个新的命名空间,只包含我要从注册表中查找的信息。
我被指向以下MOF代码:
#PRAGMA AUTORECOVER
qualifier dynamic:ToInstance;
qualifier ProviderClsid:ToInstance;
qualifier ClassContext:ToInstance;
qualifier propertycontext:ToInstance;
[dynamic, provider("RegProv"),
ProviderClsid("{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"),
ClassContext
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
]
class Software {
[key] string KeyName;
[read, propertycontext("Publisher")] string Vendor;
[read, propertycontext("DisplayName")] string ProductName;
[read, propertycontext("DisplayVersion")] string Version;
[read, propertycontext("InstallDate")] string InstallDate;
[read, propertycontext("InstallLocation")] string InstallLocation;
[read, propertycontext("InstallSource")] string InstallSource;
[read, propertycontext("UninstallString")] string UninstallString;
};
这很棒,但是如何检查软件和软件\ Wow6432Node路径?我试过在VM上玩它,但没有运气只是在黑暗中刺伤。
我试过了:
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
或
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
"local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
以及其他一些随意的想法。似乎没什么用。您将如何从两个注册表路径收集信息?
我将不胜感激任何帮助!这会让我的剧本分崩离析。
答案 0 :(得分:0)
创建两个单独的MOF
文件(每个注册表路径一个),或使用多个实例化的__Win32Provider
,如下所示
#PRAGMA AUTORECOVER
#pragma namespace("\\\\.\\root\\CimV2")
qualifier dynamic:ToInstance;
qualifier ProviderClsid:ToInstance;
qualifier ClassContext:ToInstance;
qualifier propertycontext:ToInstance;
Instance of __Win32Provider as $prov32bit
{
Name = "RegProv32";
// ClsId = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
};
Instance of __Win32Provider as $prov64bit
{
Name = "RegProv64";
// ClsId = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}";
};
[dynamic, provider($prov32bit),
ProviderClsid("{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"),
ClassContext
("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
]
[dynamic, provider($prov64bit),
ProviderClsid("{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}"),
ClassContext
("local|HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
]
非常确定将class Software
部分加倍的必要性。不确定所有ToInstance
qualifier flavors是否正确。最后,上述脚本并不关心Wow6432Node
的存在。但是,this solution looks good:
此脚本会创建
WMI
类Win32_AddRemovePrograms
(以及64位 系统,支持32位应用的Win32_AddRemovePrograms32
由注册管理机构提供商然后可以查询它们以列出已安装的列表 应用程序(和版本)的运行速度比运行相同 使用PowerShell注册表提供程序的查询。此外,他们可以 用于GPO政策等。