- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究如何使用 JACOB 在计算机上拉取本地组的成员。
我能做什么:使用单独的 WMI 查询从计算机中提取本地组列表。我不能做的:拉取这些组的成员。
我使用下面的文章给出了程序的框架:Using Java, How can I get a list of all local users on a windows machine
问题:我相信我的问题要么出在我正在使用的 WMI 查询中,要么出在程序如何使用查询的输出中。
下面是我正在使用的代码。我包含了在代码示例中使用的两个查询。这是“实例”变体。
import java.util.Enumeration;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;
public class WMITest {
public static void main(String[] args) {
ComThread.InitMTA();
try {
ActiveXComponent wmi = new ActiveXComponent("winmgmts:\\\\.");
//Variant instances = wmi.invoke("InstancesOf", "Win32_Group Where LocalAccount=True");
Variant instances = wmi.invoke("InstancesOf", "Win32_GroupUser WHERE GroupComponent=\"Win32_Group.Domain='.',Name='Administrators'\"");
Enumeration<Variant> en = new EnumVariant(instances.getDispatch());
while (en.hasMoreElements())
{
ActiveXComponent bb = new ActiveXComponent(en.nextElement().getDispatch());
System.out.println(bb.getPropertyAsString("Name"));
}
} finally {
ComThread.Release();
System.exit(1);
}
}
}
最佳答案
请小心查询,因为动词(where)之前必须有一个空格,请注意我的代码
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;
import com.jacob.com.Dispatch;
// you have to add Jacob library into your project
// you have to copy jacob.xx.xx.dll from Jacob Library (both x64 and x86) and paste in c:/...java/jdk/bin (both x64 and x86)
// you can call any class in WMI by checking class and prop by using WMI Explorer.
public class GET_COM_PROPERTIES_CLASS {
// Step 1: Set exported value , you call them from another class.
public static String COMNAME; //Get Computer Name from Win32_Computersystem-
public static String SERIAL_NUMBER; //Get Serial Number from Win32_BIOS-
public static String BIOS_VERSION; //Get Bios Version from Win32_BIOS-
public static String NOTEBOOK_BRAND; //Get Notebook Brand from Win32_Computersystem-
public static String DOMAIN; // Get domain from Win32_Computersystem-
public static String SYSTEM_FAMILY; //Get Laptop model from Win32_Computersystem-
public static String SYSTEM_TYPE; //Get x64 or x86 from Win32_Computersystem-
public static String WORKGROUP; //Get Workgroup name from Win32_Computersystem-
public static String MOTHER_BOARD_PN; //Get ther board partnumber from Win32_MotherboardDevice-
public static String GRAPHIC_CARD_NAME; //Get graphic car name(Prop: name)Win32_VideoController-
public static String GRAPHIC_CARD_VER; //Get graphic card version from Win32_VideoController-
public static String GRAPHIC_SOLUTION; //Get solution of card from Win32_VideoController-
public static String DISK_SIZE; //Get disk size from Win32_DiskDrive-
public static String DISK_INTERFACE_TYPE; //Get IDE or other type of interface from Win32_DiskDrive-
public static String WIN_VERSION; // Get Window version from Win32_OperatingSystem-
public static String WIN_SERIAL_NUMBER; // Get windows serial number from Win32_OperatingSystem
public static void main(String[] args) {
//Step 2: Set Var of ActiveXComponent
ActiveXComponent wmi_Computersystem, wmi_Win32_BIOS, wmi_Win32_MotherboardDevice, wmi_Win32_VideoController,
wmi_Win32_DiskDriver, wmi_Win32_OperatingSystem = null;
//Set SWbemLocator for specify server or your computer and it is used for connect WMI
wmi_Computersystem = new ActiveXComponent("WbemScripting.SWbemLocator");
wmi_Win32_BIOS = new ActiveXComponent("WbemScripting.SWbemLocator");
wmi_Win32_MotherboardDevice = new ActiveXComponent("WbemScripting.SWbemLocator");
wmi_Win32_VideoController = new ActiveXComponent("WbemScripting.SWbemLocator");
wmi_Win32_DiskDriver = new ActiveXComponent("WbemScripting.SWbemLocator");
wmi_Win32_OperatingSystem = new ActiveXComponent("WbemScripting.SWbemLocator");
//Step 3: Call method of SWbemLocator to connect server or your computer
Variant conRet_Computersystem = wmi_Computersystem.invoke("ConnectServer");
Variant conRet_Win32_BIOS = wmi_Win32_BIOS.invoke("ConnectServer");
Variant conRet_Win32_MotherboardDevice = wmi_Win32_MotherboardDevice.invoke("ConnectServer");
Variant conRet_Win32_VideoController = wmi_Win32_VideoController.invoke("ConnectServer");
Variant conRet_Win32_DiskDriver = wmi_Win32_DiskDriver.invoke("ConnectServer");
Variant conRet_Win32_OperatingSystem = wmi_Win32_OperatingSystem.invoke("ConnectServer");
//Step 4: Prepare object for query
ActiveXComponent wmiconnect_Computersystem = new ActiveXComponent(conRet_Computersystem.toDispatch());
ActiveXComponent wmiconnect_Win32_BIOS = new ActiveXComponent(conRet_Win32_BIOS.toDispatch());
ActiveXComponent wmiconnect_Win32_MotherboardDevice = new ActiveXComponent(conRet_Win32_MotherboardDevice.toDispatch());
ActiveXComponent wmiconnect_Win32_VideoController = new ActiveXComponent(conRet_Win32_VideoController.toDispatch());
ActiveXComponent wmiconnect_Win32_DiskDriver = new ActiveXComponent(conRet_Win32_DiskDriver.toDispatch());
ActiveXComponent wmiconnect_SYSTEM_TYPE = new ActiveXComponent(conRet_Win32_OperatingSystem.toDispatch());
//Step 5: Set query
String query_Computersystem = "select Name, Manufacturer, Domain, SystemFamily, SystemType, Workgroup " +
"from Win32_Computersystem";
String query_Win32_BIOS = "select SerialNumber, BIOSVersion " +
"from Win32_BIOS";
String query_Win32_MotherboardDevice = "select PNPDeviceID " +
"from Win32_MotherboardDevice";
String query_Win32_VideoController = "select Name, DriverVersion, VideoModeDescription " +
"from Win32_VideoController";
String query_Win32_DiskDrive = "select Size, InterfaceType " +
"from Win32_DiskDrive";
String query_Win32_OperatingSystem = "select Caption, SerialNumber " +
"from Win32_OperatingSystem";
//Step 6: Set object for enum
Variant vCollection_Computersystem = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Computersystem));
Variant vCollection_Win32_BIOS = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Win32_BIOS));
Variant vCollection_Win32_MotherboardDevice = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Win32_MotherboardDevice));
Variant vCollection_Win32_VideoController = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Win32_VideoController));
Variant vCollection_Win32_DiskDrive = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Win32_DiskDrive));
Variant vCollection_Win32_OperatingSystem = wmiconnect_Computersystem.invoke("ExecQuery", new Variant(query_Win32_OperatingSystem));
//Step 7: Set Enum and Dispatch object
EnumVariant enumVariant_Computersystem = new EnumVariant(vCollection_Computersystem.toDispatch());
EnumVariant enumVariant_Win32_BIOS = new EnumVariant(vCollection_Win32_BIOS.toDispatch());
EnumVariant enumVariant_Win32_MotherboardDevice = new EnumVariant(vCollection_Win32_MotherboardDevice.toDispatch());
EnumVariant enumVariant_Win32_VideoController = new EnumVariant(vCollection_Win32_VideoController.toDispatch());
EnumVariant enumVariant_Win32_DiskDrive = new EnumVariant(vCollection_Win32_DiskDrive.toDispatch());
EnumVariant enumVariant_Win32_OperatingSystem = new EnumVariant(vCollection_Win32_OperatingSystem.toDispatch());
Dispatch item_Computersystem, item_Win32_BIOS, item_Win32_MotherboardDevice, item_Win32_VideoController, item_Win32_DiskDrive,
item_Win32_OperatingSystem = null;
//Step 8: Set Conmtread for Try
ComThread.InitMTA();
//Step 9: Step Try anf Finally
try {
while (enumVariant_Computersystem.hasMoreElements()) {
//Step 10: Set Item
item_Computersystem = enumVariant_Computersystem.nextElement().toDispatch();
item_Win32_BIOS = enumVariant_Win32_BIOS.nextElement().toDispatch();
item_Win32_MotherboardDevice = enumVariant_Win32_MotherboardDevice.nextElement().toDispatch();
item_Win32_VideoController = enumVariant_Win32_VideoController.nextElement().toDispatch();
item_Win32_DiskDrive = enumVariant_Win32_DiskDrive.nextElement().toDispatch();
item_Win32_OperatingSystem = enumVariant_Win32_OperatingSystem.nextElement().toDispatch();
// call prop of Win32_ComputerSystem
COMNAME = Dispatch.call(item_Computersystem, "Name").toString();
NOTEBOOK_BRAND = Dispatch.call(item_Computersystem, "Manufacturer").toString();
DOMAIN = Dispatch.call(item_Computersystem, "Domain").toString();
SYSTEM_FAMILY = Dispatch.call(item_Computersystem, "SystemFamily").toString();
SYSTEM_TYPE = Dispatch.call(item_Computersystem, "SystemType").toString();
WORKGROUP = Dispatch.call(item_Computersystem, "Workgroup").toString();
// call prop of Win32_BIOS
SERIAL_NUMBER = Dispatch.call(item_Win32_BIOS, "SerialNumber").toString();
BIOS_VERSION = Dispatch.call(item_Win32_BIOS, "BIOSVersion").toString();
//call prop of Win32_MotherboardDevice
MOTHER_BOARD_PN = Dispatch.call(item_Win32_MotherboardDevice, "PNPDeviceID").toString();
//call prop of Win32_VideoController
GRAPHIC_CARD_NAME = Dispatch.call(item_Win32_VideoController, "Name").toString();
GRAPHIC_CARD_VER = Dispatch.call(item_Win32_VideoController, "DriverVersion").toString();
GRAPHIC_SOLUTION = Dispatch.call(item_Win32_VideoController, "VideoModeDescription").toString();
//call prop of Win32_DiskDrive
DISK_SIZE = Dispatch.call(item_Win32_DiskDrive, "Size").toString();
DISK_INTERFACE_TYPE = Dispatch.call(item_Win32_DiskDrive, "InterfaceType").toString();
//call prop of Win32_OperatingSystem
WIN_VERSION = Dispatch.call(item_Win32_OperatingSystem, "Caption").toString();
WIN_SERIAL_NUMBER = Dispatch.call(item_Win32_OperatingSystem, "SerialNumber").toString();
//output for Win32_Computersystem
System.out.println("Computer Name : " + COMNAME + "\n");
System.out.println("Notebook Brand : " + NOTEBOOK_BRAND + "\n");
System.out.println("Domain Name : " + DOMAIN + "\n");
System.out.println("System Family : " + SYSTEM_FAMILY + "\n");
System.out.println("System Type : " + SYSTEM_TYPE + "\n");
System.out.println("Workgroup Name : " + WORKGROUP + "\n");
//output for Win32_BIOS
System.out.println("Serial Number : " + SERIAL_NUMBER + "\n");
System.out.println("Bios Version : " + BIOS_VERSION + "\n");
//output for Win32_MotherboardDevice
System.out.println("MotherBoard Part Number : " + MOTHER_BOARD_PN + "\n");
//output for Win32_VideoController
System.out.println("Graphic Card Name : " + GRAPHIC_CARD_NAME + "\n");
System.out.println("Graphic Card Version : " + GRAPHIC_CARD_VER + "\n");
System.out.println("Graphic Version : " + GRAPHIC_SOLUTION + "\n");
//output for Win32_DiskDrive
System.out.println("Disk Size : " + DISK_SIZE + "\n");
System.out.println("Disk Interface Type : " + DISK_INTERFACE_TYPE + "\n");
//output for Win32_OperatingSystem
System.out.println("Windows Version : " + WIN_VERSION + "\n");
System.out.println("Windows Serial Number : " + WIN_SERIAL_NUMBER + "\n");
break;
}
} finally {
ComThread.Release();
}
}
}
关于Java JACOB WMI 查询本地组成员身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337564/
对于 Windows,我可以使用哪些与 WMI 的监视和系统管理功能类似的其他框架或编程语言? 最佳答案 最能与 WMI 的性能监控功能相媲美的是 SNMP (Simple Network Manag
我的客户有一个旧的基于 DOS 的应用程序,它将格式化的输出发送到打印机。我已禁用打印,因此假脱机文件仍保留在打印队列中。我想拿起这些假脱机文件并将它们转换为 PDF 格式(然后最好删除它们)。这可能
给定一个查询,例如 SELECT * FROM WIN32_PROCESS 有没有办法查询结果对象的返回列的名称? 将结果对象中的所有行写入文本文件,例如 最佳答案 Is there a way to
谷歌让我失望,我在 MSDN 上找不到它。 man wmi在 Windows shell 上不起作用... 我正在寻找可以查询的对象列表,以及如何构建查询。 使用 WMI 我的意思是查询语言来查询诸如
我使用 .Net Framework SDK 中的 MgmtClassGen.exe 为 BizTalk 工件(例如主机、主机实例等)生成一些 WMI 包装器类。 我正在使用 HostSetting.
我正在尝试使用 WMI 获取连接到 Windows XP 计算机的硬件打印机列表。我想要的与从 Win32_Printers 获取列表不同,因为我只想获取物理上以盒子形式存在的打印机,从而消除所有“打
我查看了“root\virtualization”命名空间中的几个对象,但我无法找到 Hyper-V 存储给定虚拟机配置文件路径的位置。我需要以编程方式获取此文件路径,或者至少只是给定虚拟机的主路径也
这些都驻留在 root\RSOP\Computer 命名空间中。我得到非空结果的唯一类是 RSOP_RegistryPolicySetting ,而那个只给了我 Windows 更新和系统还原配置的设
有没有办法通过 WMI 创建/删除磁盘分区?我已经能够挂载/卸载虚拟磁盘 (vhd) 并列出它们的分区。 最佳答案 据我所知,在 WMI 中无法创建/删除分区。您可能想查看 Shell Functio
是否有用于 WMI/WBEM 的 OLEDB 提供程序? 换句话说,有人可以通过以下方式访问 WMI: shell vbscript 中的 ADO ASP 脚本中的 ADO Win32 native
我正在尝试破译 SecurityCenter.productState WMI 命名空间中的 productState 属性。 例如,产品状态是一个整数:262144 - 然后您可以查看此文档页面,将
最近很多用户在使用电脑的时候发现了wmi provider host进程占用内存比较大,不知道这个进程到底是干什么的,能不能禁止,怎么禁止。下面来一起看看想想的介绍吧。 wmi provide
我很难过,似乎无法找到明确的答案。我正在尝试通过 WMI 获取网络适配器列表。我一直在使用的命令在我们办公室的几乎所有工作站上都运行良好,没有任何问题。昨天,问题。一台机器出故障。由于它直接在用户
首先,我想说谢谢你帮我解决这个问题。非常感谢您付出的时间和努力。 标题总结得很好,但我将提供一些细节。基本上,如果我使用 C# 提取操作系统版本,它会返回适用于 Windows 8 的结果 6.2,即
我正在检测我是否正在尝试与本地主机建立连接,并创建(或不创建)WMI 连接选项,如下所示: if (NetworkUtils.IsLocalIpAddress(machineName)) {
我们如何枚举所有网络连接,以便使用 WMI 提取 VPN 连接的 IP 地址?在 XP 上,Win32_NetworkAdapterConfiguration 工作正常,但在 Vista 上它似乎只枚
我想使用 WMI(在 C++ 中)来配置静态 IPv6 地址。 使用 EnableStatic 配置静态 IPv4 地址工作正常,它是名为 Win32_NetworkAdapterConfigurat
我用这里的安装程序安装了wmi http://timgolden.me.uk/python/wmi/index.html但我无法导入模块。 这是我的代码: import wmi c=wmi.WMI()
当我尝试这样做时 SetDynamicDNSRegistration(True) 它返回“68”,我在 MSDN WMI page 上查找过它它的意思是“输入参数无效”。 完整脚本 import wm
我尝试使用 convert-vhd 命令将 VHD 转换为 VHDX,但出现以下错误: The Hyper-V Management Tools could not access an expecte
我是一名优秀的程序员,十分优秀!