使用Java,我怎样才能得到一个Windows机器上的所有本地用户的列表

如何使用java列出在Windows机器上configuration的所有本地用户(Win2000 +)。
如果可能的话,我宁愿使用任何Java 2 com桥或任何其他第三方库来完成此操作。
对于Java来说最好的一些本地方法。

像Jacob一样使用Java-COM Bridge。 然后选择一个适当的COM库,例如用于WMI的COM API列出本地用户,或任何其他Windows管理信息。

Win32_SystemUsers关联WMI类涉及该系统上的计算机系统和用户帐户。

Win32_Account抽象WMI类包含有关运行Windows的计算机系统已知的用户帐户和组帐户的信息。 由Windows NT域识别的用户名或组名是该类的后代(或成员)。

工作示例(jacob 1.17-M2,javaSE-1.6):

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 ComTst { public static void main(String[] args) { ComThread.InitMTA(); try { ActiveXComponent wmi = new ActiveXComponent("winmgmts:\\\\."); Variant instances = wmi.invoke("InstancesOf", "Win32_SystemUsers"); Enumeration<Variant> en = new EnumVariant(instances.getDispatch()); while (en.hasMoreElements()) { ActiveXComponent bb = new ActiveXComponent(en.nextElement().getDispatch()); System.out.println(bb.getPropertyAsString("PartComponent")); } } finally { ComThread.Release(); } } } 

使用Java COM Object,即Jacob:

 public static void EnumerateUsers() { String query = "SELECT * FROM Win32_UserAccount"; ActiveXComponent axWMI = new ActiveXComponent("winmgmts:\\"); Variant vCollection = axWMI.invoke("ExecQuery", new Variant(query)); EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch()); Dispatch item = null; StringBuilder sb = new StringBuilder(); while (enumVariant.hasMoreElements()) { item = enumVariant.nextElement().toDispatch(); sb.append("User: " + Dispatch.call(item, "Name")).toString(); System.out.println(sb); sb.setLength(0); } } 

我需要的是一个更简单的解决方案。
这个实现将使用“ net user ”命令获取机器上所有用户的列表。 这个命令有一些格式,在我的情况下我不在乎,我只关心我的用户是否在列表中。 如果有人需要实际的用户列表,他可以解析“网络用户”的输出格式来提取没有“网络使用”生成的垃圾页眉和页脚的列表,

 private boolean isUserPresent() { //Load user list ProcessBuilder processBuilder = new ProcessBuilder("net","user"); processBuilder.redirectErrorStream(true); String output = runProcessAndReturnOutput(processBuilder); //Check if user is in list //We assume the output to be a list of users with the net user //Remove long space sequences output = output.replaceAll("\\s+", " ").toLowerCase(); //Locate user name in resulting list String[] tokens = output.split(" "); Arrays.sort(tokens); if (Arrays.binarySearch(tokens, "SomeUserName".toLowerCase()) >= 0){ //We found the user name return true; } return false; } 

runProcessAndReturnOutput方法运行进程,收集进程的stdout和stderr并将其返回给调用者。