标签: wmi-query

Win32_Product 的替代品?

Win32_Product尝试查询以找到软件版本后,我无法理解为什么结果如此之慢。比查询Win32_serviceWin32_process. 所以来到这里看看我是否遗漏了什么,我发现其他人报告了同样的问题,这篇文章解释了原因。

查找已安装软件的最常建议替代方法是查询一个或三个注册表项。这将是我的第一个解决方案,但我的公司尚未开始配置服务器以接受PSRemoting。任何 reg 查询只会返回 Kerberos 身份验证错误。我可以PSRemoting在单个服务器上启用,但我的团队支持 30K 系统。所以这个解决方案已经出来了。

最重要的是,我们正在将 Symantec Endpoint Protection 从 v. 11 升级到 v. 12,我想要一个简单的检查来查找服务器上安装的版本。除了Win32_Product注册表查询之外,还有其他方法可以找到版本吗?

windows powershell wmi-query

6
推荐指数
1
解决办法
9782
查看次数

WQL不支持TOP-需要解决方法

WQL(基本上是WMI的SQL)不支持TOP或LIMIT关键字。Sql Server使用TOP和许多其他RDBMS支持LIMIT等。

有没有变通方法来模拟SELECT查询,使其表现得好像具有将结果集限制为任意数字的TOP / LIMIT子句?

还是还有其他一些特定于WQL的关键字可以像TOP或LIMIT一样工作?

sql wmi wmi-query wql

5
推荐指数
1
解决办法
7105
查看次数

使用WMI和WMQ从服务类型USBSTOR的Win32_PnPEntity获取逻辑磁盘和分区信息

我正在检测我们的专有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_DiskDriveWin32_PnPEntity实例涉及.我需要这个实例以获取卷信息,因此我可以获取每个分区的驱动器号.但我不知道如何达到它.

我经历了这个过程,因为Win32_PnPEntity提供了VID,PID用于事件监听和搜索的约束......但它也提供了我需要的固件版本.所以从这个角度我想要得到的Win32_DiskDriveWin32_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)

hardware usb wmi wmi-query disk-partitioning

5
推荐指数
0
解决办法
3214
查看次数

如何将WMI查询的所有行导出到文件?

给出诸如的查询

SELECT * FROM WIN32_PROCESS
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法询问结果对象返回的列的名称?
  2. 比如,将结果对象中的所有行写入文本文件

wmi wmi-query

5
推荐指数
1
解决办法
2万
查看次数

C#中的WMI查询在NON-English Machine上不起作用

我正在创建一个应用程序,需要跟踪进程何时启动,然后在事件结束时引发事件.

我的代码运行完美,并且完全符合我在英语机器上的需要,但是当我在法语机器上运行相同的应用程序时,它就失败了.

这是失败的代码

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()做同样的事情;

我只能猜测它与语言和查询字符串有关,但我抓着稻草. …

.net c# wmi wmi-query managementeventwatcher

5
推荐指数
1
解决办法
1143
查看次数

Powershell get-item VersionInfo.ProductVersion不正确/不同于WMI

我试图理解为什么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),并且得到相同的错误版本结果.

有什么想法吗?

powershell wmi-query versioninfo wmic

5
推荐指数
1
解决办法
1万
查看次数

如何使用vbscript检查服务状态?

无论如何使用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)

vbscript service wmi status wmi-query

5
推荐指数
1
解决办法
2万
查看次数

WMI 给我不完整的硬件信息 (PhysicalMemory)

我已经阅读了有关此问题的几乎完全相同的问题(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++ wmi wmi-query wmic

5
推荐指数
0
解决办法
865
查看次数

Powershell - 检查 CD 是否在 CD-ROM 驱动器中

这可能吗?

我的第一个猜测是:

C:> Get-WmiObject Win32_CDROMDrive

但是当我尝试这个时,它只告诉我Caption, Drive, Manufacturer,VolumeName

没有关于光盘驱动器中是否有 CD 的信息。

hardware powershell wmi wmi-query

5
推荐指数
1
解决办法
3516
查看次数

获取蓝牙 COM 端口

我正在尝试访问有关蓝牙串行端口的特定信息。我能够在我的蓝牙设置中找到这个窗口,它向我显示蓝牙设备的端口、方向和名称(如果它与 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)

c# powershell bluetooth wmi-query wql

4
推荐指数
1
解决办法
3227
查看次数