您如何查询WMI名称空间?
所以我知道WMI命名空间,因为我读到它们退出了,我知道我可以连接说:
root\cimv2
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我不知道那里有什么命名空间,我将如何查询可用的命名空间?
我只是想探索WMI而不必查找每个命名空间.
我正在使用WBEMtest,但我会接受任何东西,.NET,winapi.h,你有什么.
我需要在放置/移除USB时获得唯一的USB ID(不是卷序列号).但在所有情况下,"PNPDeviceID"始终为空.我使用的代码是:
static void Main(string[] args)
{
const string QUERY = @"select * from __InstanceOperationEvent within 1 where TargetInstance isa 'Win32_LogicalDisk' and (TargetInstance.DriveType=2)";
Program p = new Program();
ManagementEventWatcher w = new ManagementEventWatcher(new WqlEventQuery(QUERY));
w.EventArrived += new EventArrivedEventHandler(p.OnWMIEvent);
w.Start();
Console.ReadKey();
w.Stop();
}
public void OnWMIEvent(object sender, EventArrivedEventArgs e)
{
PropertyData p = e.NewEvent.Properties["TargetInstance"];
if (p != null)
{
ManagementBaseObject mbo = p.Value as ManagementBaseObject;
PropertyData deviceid = mbo.Properties["DeviceID"];
PropertyData drivetype = mbo.Properties["DriveType"];
PropertyData driveSerial = mbo.Properties["VolumeSerialNumber"];
PropertyData driveGUID = mbo.Properties["PNPDeviceID"]; …Run Code Online (Sandbox Code Playgroud) Dim strComputer, objReg, ScriptName, strKeyPath, strValueName, strValue
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
Run Code Online (Sandbox Code Playgroud)
这是一个较大的脚本,我正在尝试对工作进行逆向工程.原始编码器不可用.
我试图研究和理解最后一行代码,但我在网上找不到任何好的信息,而且我对vbs并不擅长.
据我所知: - objreg是一个SWbemObjectEx类型的对象. - winmgmts:{impersonationLevel = impersonate}让对象使用调用者的安全级别(在我的案例系统中) - StdRegProv应该指向HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Impersonation Level
我有点得到它应该做的但是我不知道它是如何玩的.
如果任何人都可以逐字逐句地解释它的作用,包括"!\"之类的东西,我会非常感激它.谢谢.
使用 PowerShell 我可以使用 cmdlet(Get-VpnServerIPsecConfiguration).SstpPorts
但是我们有严格的安全策略,所以我只需要获取带有Get-WmiObject -Query. 我试图用谷歌搜索,但找不到这个值的某个类。
请问你能帮帮我吗?
最近我一直在学习WMI和WQL.我找到了我可以查询的Win32类列表(来自MSDN),但是我无法找到事件类列表(应该是Win32类列表的子集不是吗?)是否有任何一个为此有一份清单或某种备忘单?出于好奇,我很想问这个问题.
事件类的示例 - Win32_ProcessStartTrace
我发现确定网络连接链接速度 ,现在我尝试将Win32_PerfRawData_Tcpip_NetworkInterface中的数据与 Win32_NetworkAdapter(或Win32_NetworkAdapterConfiguration)相关联.
在类上,Win32_PerfRawData_Tcpip_NetworkInterface我没有看到任何可用于引用的索引或唯一键
Win32_NetworkAdapterConfiguration或者Win32_NetworkAdapter.
I tried to use the名称inWin32_PerfRawData_Tcpip_NetworkInterface
andWin32_NetworkAdapter`,但它们看起来仍然不同.
例如
名称:英特尔(R)PRO/1000 PL网络连接
VS
名称:Intel [R] PRO_1000 PL网络连接
任何提示?
先感谢您,
Milde
===
也许这段代码会帮助你帮助我们:)
# I got the DeviceID of a NIC and use it to get the "NetConnection ID":
$objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "Exit: WMI connection failed. \n";
$colNicSetts = $objWMIService->ExecQuery(
"SELECT * FROM Win32_NetworkAdapter Where DeviceID = '$ID'", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);
foreach …Run Code Online (Sandbox Code Playgroud) 我当前的代码如下所示:
define ( 'CPU_NAME', 'remote_server' );
$obj = new COM ( 'winmgmts:{impersonationLevel=impersonate}//' . CPU_NAME . '/root/cimv2' );
if ( is_object ( $obj ) ){
$process = $obj->execquery ( "SELECT * FROM Win32_Process" );
}
Run Code Online (Sandbox Code Playgroud)
我在哪里放置remote_server的登录凭据?我看到它需要一个用户名和密码,但我不知道如何实现它.
任何帮助,将不胜感激.
我正在寻找一种更好的方法来使用来自多个系统的WMI来获得CPU负载百分比(意味着不同的CPU等).我的代码正在运行,但我认为有一种更好的方法来克服所有CPU使用率百分比.
有任何想法吗?
先感谢您!
SelectQuery queryCpuUsage = new SelectQuery("SELECT * FROM Win32_Processor");
ManagementObjectSearcher cpuUsage = new ManagementObjectSearcher(scope, queryCpuUsage);
ManagementObjectCollection cpuUsageCollection = cpuUsage.Get();
foreach (ManagementObject queryObj in cpuUsageCollection)
{
iCPU++;
calcCPU = Convert.ToInt32(queryObj["LoadPercentage"]);
perCPU = perCPU + calcCPU;
}
perCPU = perCPU / iCPU;
cpuUsageCollection.Dispose();
Console.WriteLine("LoadPercentage CPU: {0}", perCPU);
Run Code Online (Sandbox Code Playgroud) 在Win32_Product尝试查询以找到软件版本后,我无法理解为什么结果如此之慢。比查询Win32_service或Win32_process. 所以来到这里看看我是否遗漏了什么,我发现其他人报告了同样的问题,这篇文章解释了原因。
查找已安装软件的最常建议替代方法是查询一个或三个注册表项。这将是我的第一个解决方案,但我的公司尚未开始配置服务器以接受PSRemoting。任何 reg 查询只会返回 Kerberos 身份验证错误。我可以PSRemoting在单个服务器上启用,但我的团队支持 30K 系统。所以这个解决方案已经出来了。
最重要的是,我们正在将 Symantec Endpoint Protection 从 v. 11 升级到 v. 12,我想要一个简单的检查来查找服务器上安装的版本。除了Win32_Product注册表查询之外,还有其他方法可以找到版本吗?