Comment puis-je lister tous les utilisateurs locaux configurés sur une machine Windows (Win2000 +) en utilisant java.
Je préfèrerais faire cela avec devrait utiliser tous les ponts com Java 2, ou toute autre bibliothèque tierce si possible.
Préférable une méthode native à Java.Utilisation de Java, Comment puis-je obtenir une liste de tous les utilisateurs locaux sur une machine Windows
Répondre
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();
}
}
}
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.
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);
}
}
Fonctionne avec le nouveau Jacob: http://sourceforge.net/projects/jacob-project/ – kolobok
- 1. Dans VB.NET, comment obtenez-vous une liste de tous les utilisateurs de la machine Windows actuelle?
- 2. Comment obtenir la liste de tous les utilisateurs dans SharePoint
- 3. Liste de tous les utilisateurs et groupes
- 4. Comment obtenir une liste de tous les utilisateurs avec un groupe d'autorisation spécifique à Django
- 5. Obtention d'une liste de tous les chargeurs de classe dans une machine virtuelle Java
- 6. Comment obtenir une liste de tous les assemblages actuellement chargés?
- 7. Comment obtenir une liste des utilisateurs qui peuvent se connecter localement sur Windows?
- 8. ASP.NET MVC Liste tous les utilisateurs
- 9. obtenir une liste de tous les modèles de rails
- 10. Obtenir une liste de tous les fichiers dans un répertoire
- 11. Comment puis-je obtenir une liste de tous les canaux nommés ouverts dans Windows?
- 12. Obtention d'une liste de locaux sur l'iPhone
- 13. Cliquez une fois - Tous les utilisateurs
- 14. Comment obtenir une liste des sessions Windows?
- 15. Utilisation de la mémoire sur une machine RHEL 32 bits
- 16. Utilisation de «multimin» de GNU Scientific pour trouver tous les minimums locaux
- 17. Comment partager le registre de Windows sur une machine distante?
- 18. Aide avec subprocess.call sur une machine Windows
- 19. Comment faire pour obtenir une liste de tous les processus de fichiers dans WinXP tiennent?
- 20. Classes .Net pour contrôler les services sur une machine distante?
- 21. Comment obtenir une liste de méthodes sur une table?
- 22. Utilisateurs et groupes locaux Signaler un problème avec Powershell?
- 23. Comment obtenir une liste de tous les fichiers non versionnés de SVN?
- 24. Utilisation Redemption dll (Outlook) sur une machine 64 bits
- 25. Comment redémarrer un service sur une machine distante sous Windows?
- 26. Comment autoriser plusieurs utilisateurs à accéder à une application ASP.NET sur une même machine?
- 27. Dossier "Tous les utilisateurs"
- 28. Comment obtenir une liste de tous les caractères imprimables en C#?
- 29. Comment puis-je envoyer les informations d'identification de l'utilisateur pour une utilisation sur une machine distante en utilisant WCF?
- 30. powershell utilisateur pour obtenir une liste de tous les dossiers/téléchargements/pivots
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
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
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