2008-12-02 4 views

Répondre

3

Utilisation d'un pont Java-COM, comme Jacob. Vous sélectionnez ensuite une bibliothèque COM appropriée, par ex. COM API for WMI pour répertorier les utilisateurs locaux ou toute autre information de gestion Windows.

La classe WMI d'association Win32_SystemUsers relie un système informatique et un compte d'utilisateur sur ce système.

La classe WMI abstraite Win32_Account contient des informations sur les comptes d'utilisateurs et les comptes de groupe connus du système informatique exécutant Windows. Les noms d'utilisateur ou de groupe reconnus par un domaine Windows NT sont des descendants (ou des membres) de cette classe.

Exemple de travail (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(); 
    } 
} 
} 
+0

Pouvez-vous fournir plein exemple de code? Je ne suis pas familier avec Jacob et COM (Le code dans les autres réponses n'est pas correct) – kolobok

+0

Exemple complet non disponible, peut-être un indice comme http://stackoverflow.com/questions/1817459/better-code-using-jacob-and -wmi/aidera. Jacob est à http://sourceforge.net/projects/jacob-project/ de nos jours. – gimel

+0

Comment obtenir la propriété Name de PartComponent? (Résolu: Je peux remplacer Win32_SystemUsers par Win32_UserAccount et PartComponent par Name). En outre, vous devez supprimer "break". de votre code. – kolobok

0

Il existe une solution simple pour ce que je avais besoin.
Cette implémentation utilisera la commande "net user" pour obtenir la liste de tous les utilisateurs sur une machine. Cette commande a un formatage qui dans mon cas ne m'importe pas, je me soucie seulement si mon utilisateur est dans la liste ou pas. Si quelqu'un a besoin de la liste des utilisateurs réelle, il peut analyser le format de sortie de « net user » pour extraire la liste sans les en-têtes inutiles et pieds de page générés par « net use »

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; 
} 

La méthode runProcessAndReturnOutput exécute le processus, recueille le stdout et le stderr du processus et le renvoie à l'appelant.

2

Utilisation de Java objet COM, à savoir 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); 
    } 

} 
+1

Fonctionne avec le nouveau Jacob: http://sourceforge.net/projects/jacob-project/ – kolobok

Questions connexes