在Win32_Product尝试查询以找到软件版本后,我无法理解为什么结果如此之慢。比查询Win32_service或Win32_process. 所以来到这里看看我是否遗漏了什么,我发现其他人报告了同样的问题,这篇文章解释了原因。
查找已安装软件的最常建议替代方法是查询一个或三个注册表项。这将是我的第一个解决方案,但我的公司尚未开始配置服务器以接受PSRemoting。任何 reg 查询只会返回 Kerberos 身份验证错误。我可以PSRemoting在单个服务器上启用,但我的团队支持 30K 系统。所以这个解决方案已经出来了。
最重要的是,我们正在将 Symantec Endpoint Protection 从 v. 11 升级到 v. 12,我想要一个简单的检查来查找服务器上安装的版本。除了Win32_Product注册表查询之外,还有其他方法可以找到版本吗?
WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。Sql Server使用TOP和许多其他RDBMS支持LIMIT等。
有没有变通方法来模拟SELECT查询,使其表现得好像具有将结果集限制为任意数字的TOP / LIMIT子句?
还是还有其他一些特定于WQL的关键字可以像TOP或LIMIT一样工作?
我正在检测我们的专有USB设备何时连接到PC.当我们检测到这个时,我们得到相关的Win32_PnPEntity.我们希望使用此Win32_PnPEntity作为以下信息的来源:
- USB描述符VID,PID,REV,固件版本.
- 逻辑磁盘驱动器卷和分区信息以获取驱动器号信息.
我遇到的问题是试图弄清楚如何使用WMI和WMQ从Win32_PnPEntity获取逻辑磁盘和分区信息.该Win32_PnPEntity是服务类型USBSTOR(USB存储怎么想吗?)
以下是我目前正在进行的流程的描述:
我使用事件监视器监听Win32_USBControllerDevice,以便检测USB设备何时连接或从PC上分离.我使用以下查询来约束事件中发生的事情:
"SELECT*FROM
__InstanceOperationEvent WITHIN 1 WHERE TargetInstance
ISA'Win32_USBControllerDevice'和
TargetInstance .__ RELPATH LIKE'%DeviceId =%VID_1111%'"
当这个事件发生时我拉出" Win32_USBControllerDevice.Dependent "属性并拉出" DeviceId "值.然后,我使用Win32_PNPEntity类的" DeviceId "值来获取关联的实例.
对我来说,事情变得棘手......
我需要去的Win32_DiskDrive的Win32_PnPEntity实例涉及.我需要这个实例以获取卷信息,因此我可以获取每个分区的驱动器号.但我不知道如何达到它.
我经历了这个过程,因为Win32_PnPEntity提供了VID,PID用于事件监听和搜索的约束......但它也提供了我需要的固件版本.所以从这个角度我想要得到的Win32_DiskDrive为Win32_PnPEntity.
任何输入将不胜感激.
---提供更好的信息描述问题:
到目前为止我已经完成的步骤如下:
- 收听'__InstanceModificaitionEvent'获取'Win32_USBControllerDevice'
- 从'__InstanceModificaitionEvent'的'TargetInstnace' 获取'Win32_PnPEntity' - 从'Win32_PnPEntity
获取'DeviceId' '包含PID,VID信息.
我现在的问题是试图找到'Win32_LogicalDisk'和/或'Win32_DiskDrive'和/或'Win32_DiskPartition'或其他一些ASSOCIATOR或REFERENCES链接到USB设备附加的驱动器号已被分配给'Mass Storge'实例.
我可以想到这个问题的最佳方式在下面的"图表"中描述:
USB DEVICE
| |
----------| |----
| Win32_DiskDrive | …Run Code Online (Sandbox Code Playgroud) 给出诸如的查询
SELECT * FROM WIN32_PROCESS
Run Code Online (Sandbox Code Playgroud)
我正在创建一个应用程序,需要跟踪进程何时启动,然后在事件结束时引发事件.
我的代码运行完美,并且完全符合我在英语机器上的需要,但是当我在法语机器上运行相同的应用程序时,它就失败了.
这是失败的代码
qstart = new WqlEventQuery("__InstanceCreationEvent",
new TimeSpan(0, 0, 0, 0, 5),
"TargetInstance isa \"Win32_Process\"");
qstop = new WqlEventQuery("__InstanceDeletionEvent",
new TimeSpan(0, 0, 0, 0, 5),
"TargetInstance isa \"Win32_Process\"");
try
{
using (wstart = new ManagementEventWatcher(qstart))
{
wstart.EventArrived += new EventArrivedEventHandler(ProcessStarted);
Log.DebugEntry("BeginProcess() - Starting wstart Event");
wstart.Start();
}
}
catch (Exception ex)
{
Log.DebugEntry("error on wstart: " + ex.Message);
}
using (wstop = new ManagementEventWatcher(qstop))
{
wstop.EventArrived += new EventArrivedEventHandler(ProcessStopped);
Log.DebugEntry("BeginProcess() - Starting wstop Event");
wstop.Start();
}
Run Code Online (Sandbox Code Playgroud)
尝试启动查询时错误命中:wstart.Start();
并为wstop.Start()做同样的事情;
我只能猜测它与语言和查询字符串有关,但我抓着稻草. …
我试图理解为什么Powershell会获得一个DLL文件的不同版本号,而不是Windows资源管理器中的文件属性页和WMI查询显示的版本号.(如果这不能正确地作为编码问题,我会提前道歉.)
场景:
运行以下powershell命令:
(get-item C:\windows\system32\rdpcorekmts.dll).VersionInfo.ProductVersion
Run Code Online (Sandbox Code Playgroud)
这将返回以下内容:
6.1.7600.16385
但是,此版本号不正确.从Windows资源管理器中检查版本信息时,您会看到以下版本(抱歉,我尝试发布它的一个小屏幕截图,但我没有足够的代表;我是新来的):
6.1.7601.17767
此外,WMIC查询显示与Windows资源管理器相同的结果:
WMIC path CIM_DataFile WHERE (name="c:\\windows\\system32\\rdpcorekmts.dll") get Version
Run Code Online (Sandbox Code Playgroud)
WMIC结果:
版
6.1.7601.17767
我真的不明白为什么他们会有所不同.我真的想用Powershell返回这个值,但是现在我不确定我是否只是忽略了某些东西,或者我遇到了某种奇怪的错误,但这两种方法之间的版本不匹配令人困惑.作为一个注释,我在方法中运行变体以在Powershell中重新获得它(例如Get-ItemChild和Get-ItemProperty),并且得到相同的错误版本结果.
有什么想法吗?
无论如何使用vbscript检查服务的状态?我想为每个可能的服务状态提供一个功能: LINK 任何帮助都会很棒.我写了一个函数来检查服务是否停止:
Public Function IsServiceStop(ByVal serviceName)
On Error Resume Next
Dim objServices, service
Set oWmiService = GetObject("winmgmts:\\.\root\cimv2")
Set objServices = oWmiService.ExecQuery("Select * from Win32_Service where Name='" & serviceName & "'")
For Each service In objServices
IsServiceStop = (service.Started = False)
Exit Function
Next
IsServiceStop = True
On Error Goto 0
End Function
Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关此问题的几乎完全相同的问题(WMI 硬件,获取 RAM 信息),在这里我希望获得有关此主题的更多信息。
我需要获取各种硬件信息,例如 RAM 序列号、硬盘驱动器 SN、CPU SN 等。我使用的是 Visual C++ 2010 并使用 WMI 来查询信息,但它没有给我想要的信息。例如,我开始尝试获取 RAM SN,并在查询之后(我使用 Win32_PhysicalMemory 然后我得到属性“SerialNumber”),我得到
SerialNumber
SerNum0
SerNum1
Run Code Online (Sandbox Code Playgroud)
这显然不是。我也去了命令行(wmic memorychip get serialnumber),但我得到了同样的东西。但我知道序列号在那里;当我使用第 3 方程序 CPU-Z 时,它可以完美地检索 RAM 序列号。
我在查询错误的课程吗?有什么我想念的吗?我尝试了我在其他多台计算机上制作的可执行文件,成功和失败的结果参差不齐——但 CPU-Z 从未失败。
我正在 Windows 7 64 位计算机上使用 Visual Studio C++ 2010 进行开发。谢谢。
这可能吗?
我的第一个猜测是:
C:> Get-WmiObject Win32_CDROMDrive
但是当我尝试这个时,它只告诉我Caption, Drive, Manufacturer,VolumeName
没有关于光盘驱动器中是否有 CD 的信息。
我正在尝试访问有关蓝牙串行端口的特定信息。我能够在我的蓝牙设置中找到这个窗口,它向我显示蓝牙设备的端口、方向和名称(如果它与 COM 端口相关)。
目前,为了尝试获取此信息,我一直在使用 WQL 来查询一些 Windows 管理类。
# I don't really mind if it is run in a Powershell environment
gwmi -query "SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%COM%' AND PNPDeviceID LIKE '%BTHENUM%' AND PNPClass = 'Ports'"
//or a C# environment
ManagementObjectCollection results = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%COM%' AND PNPDeviceID LIKE 'USB%' AND PNPClass = 'Ports'").Get();
#This is a lot slower but it gets a bit more information about the serial ports
gwmi …Run Code Online (Sandbox Code Playgroud)