Page 1 sur 1
[Ex] Liste tous les utilisateurs d'un PC
Posté : jeu. 31 mars 2011 18:11
par supernana66
Bonjour,
Niveau deb.
Petit script sans pretention qui liste tous les comptes utilisateur existants sur un Pc, même ceux qui ne possède pas de profil sur le pc.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GuiImageList.au3>
$i=0
global $Liste_users, $Fin, $i, $the_user
creation_user()
while 1
$msg = GUIGetMsg()
if $msg = $Fin Then
exitloop
endif
WEnd
Func creation_user()
GUICreate("Installation", 200,360, 220,220,$WS_POPUPWINDOW)
GUISetBkColor(0xf0E68C)
$Liste_users = GUICtrlCreateListview(" Liste des utilisateurs ", 10, 5, 180, 300)
_GUICtrlListView_SetExtendedListViewStyle($Liste_users, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
_GUICtrlListView_SetColumnWidth($Liste_users, 0, 210)
$Fin = GUICtrlCreateButton("quitter", 60, 310, 80, 30)
GUISetState()
while 1
$i+=1
$the_user = RegEnumKey("HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names", $i)
If @error <> 0 Then ExitLoop
_GUICtrlListView_AddItem($Liste_users, $the_user)
WEnd
EndFunc
Re: [ex] Liste tous les users (tous)
Posté : jeu. 31 mars 2011 22:10
par vince59
Bonjour,
Bonne idée mais sur mon PC la liste est vide car dans ma base de registre il n'y a ni clef, ni valeur dans la clef [HKEY_LOCAL_MACHINE\SAM\SAM\]
Est-ce que le script suppose d'être dans un environnement particulier ?
Re: [ex] Liste tous les users (tous)
Posté : jeu. 31 mars 2011 23:41
par supernana66
Seven !!!
Voir si vous avez toutes les autorisations, clique droit sur SAM et autorisation.
Sinon je regarderais cela sur xp et vista d'ici demain et j' établir un script qui s'adapte à l'os pour corriger mon erreur.
corrdialement v.
Re: [ex] Liste tous les users (tous)
Posté : ven. 01 avr. 2011 00:29
par supernana66
Bonsoir,
Que se soit xp, vista ou seven je n'ai pas rencontrés de PB.
De plus j'ai testé le script avec la sécu : sans et avec Controls total de l'admin sur le clé SAM, dans les deux cas de figures RAS et ceux pour les trois OS RAS.
Si vous n'avez pas le Control total sur le clé SAM il est normal que votre clé semble vide, son contenue cachées (pas de droit de lecture), cependant cela n’empêche pas le script de fonctionner correctement sur Xp, Vista et Seven.
Qu'elle est votre conf ????
Cordialement V.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : ven. 01 avr. 2011 08:59
par albu68
Je suis en win 7 et dans un domaine,
Ca ne fonctionne pas,
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
Je n'ai rien après SAS\SAM\
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : ven. 01 avr. 2011 09:59
par zeshrek
pareil ici au boulot sous XP dans un domaine.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : ven. 01 avr. 2011 10:43
par supernana66
A Voir lundi à ma reprise, au boulot j' ai des stations xp et seven sous un domaine samba et d'autre sous AD.
Pour visualiser les comptes utilisateur du domaine (sur un pc) ce n'est effectivement pas dans utilisateur qu'il faut aller chercher, mais directement dans le groupe des utilisateurs ou administrateurs ou ….., on peut aussi aller dans la clé de regsitre profillist, quelque soit l'emplacement de stockage du profil ils y sont tous listés.
Ou sont les comptes de bases créés par win, à voir, réponse lundi, j'adapterais le script pour visualiser tous les utilisateurs d'un pc, Pc connecté à un domaine ou pas.
Et désolé.
Cordialement V.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : lun. 04 avr. 2011 19:21
par supernana66
Bonsoir
Et voilà un script vrai pour un domaine, avec un plus car on sait si le compte est un compte systeme, compte appartenant à un domaine ou pas.
Tous les utilisateurs du domaine qui se sont connecté sur le poste ou est lancé le script y seront listés.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GuiImageList.au3>
#RequireAdmin
$i=0
global $Liste_users, $Fin, $i, $the_user
creation_user()
while 1
$msg = GUIGetMsg()
if $msg = $Fin Then
exitloop
endif
WEnd
Func creation_user()
GUICreate("Installation", 450,360, 280,280,$WS_POPUPWINDOW)
GUISetBkColor(0xf0E68C)
$Liste_users = GUICtrlCreateListview(" Liste des utilisateurs ", 10, 5, 430, 300)
_GUICtrlListView_SetExtendedListViewStyle($Liste_users, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth($Liste_users, 0, 429)
$Fin = GUICtrlCreateButton("quitter", 60, 310, 80, 30)
GUISetState()
$i=0
while 1
$i+=1
$id = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\", $i)
$Readid = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\' & $id, 'ProfileImagePath')
If @error <> 0 Then ExitLoop
_GUICtrlListView_AddItem($Liste_users, $Readid )
WEnd
EndFunc
Cordialement V.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : lun. 04 avr. 2011 20:54
par supernana66
Voilà mieux encore
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GuiImageList.au3>
#include <Array.au3>
#include <File.au3>
dim $Readuser[10]
global $Liste_users, $Fin, $i, $the_user
creation_user()
while 1
$msg = GUIGetMsg()
if $msg = $Fin Then
exitloop
endif
WEnd
Func creation_user()
GUICreate("Installation", 300,360, 280,280,$WS_POPUPWINDOW)
GUISetBkColor(0xf0E68C)
$Liste_users = GUICtrlCreateListView("", 10, 5,280, 300)
_GUICtrlListView_SetExtendedListViewStyle($Liste_users, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$Fin = GUICtrlCreateButton("quitter", 60, 310, 80, 30)
GUISetState()
_GUICtrlListView_InsertColumn($Liste_users, 0, "type de compte", 150)
_GUICtrlListView_InsertColumn($Liste_users, 1, "Compte utilisateurs", 150)
$i=0
while 1
$i+=1
$id = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\", $i)
$detail_user = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\' & $id, 'ProfileImagePath')
$Readuser = StringSplit($detail_user,"\")
$nbpara = $Readuser[0]
$typecompte = $Readuser[$nbpara-1]
$user = $Readuser[$nbpara]
If @error <> 0 Then ExitLoop
_GUICtrlListView_AddItem($Liste_users,$typecompte,$i)
_GUICtrlListView_AddSubItem($Liste_users,$i-1, $user, 1, 1)
WEnd
EndFunc
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mar. 05 avr. 2011 10:35
par zeshrek
hmmmm... netement mieux, mais y a encore un truc bizare.
ici, j'ai qqchose qui ressemble a ca :
Code : Tout sélectionner
Type de compte Compte utilisateur
---------------------------------------------
Config SystemService
Documents and Settings LocalService
Documents and Settings NetworkService
Documents and Settings Test [size=85]<- compte domaine user / local user[/size]
Documents and Settings Tech [size=85]<- compte admin local[/size]
Documents and Settings Teledistrib [size=85]<- compte domaine admin admin local[/size]
Documents and Settings ZeShrek [size=85]<- compte domaine user / admin local[/size]
... etc
C'est normal ?
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mar. 05 avr. 2011 21:35
par supernana66
bonsoir,
Honte moi

, une journée passée à tenter de résoudre big pb sur un domaine samba je suis totalement satellisée, alors j’espère avoir mis le doigt sur ce que vous vouliez souligner.
Un truc bizarre

, est ce le terme "type" qui vous dérange, mes collègues ont signalés que le titre utilisait pour la première colonne était très mal choisi, c'est pas faux !!!.
Il faut que je me creuse pour classer ma liste en catégorie, compte système, utilisateur ou admin du domaine ou local, se serait pas mal.
ai je visé juste ou me faut il une bonne nuit de sommeil ?????
Cordialement V.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mar. 05 avr. 2011 23:29
par zeshrek
Bin en fait, je sais pas.
On va dire que si elle reste comme ca, la 1ere colonne ne sert a rien.
Elle ne permet pas de savoir si le compte en question est local ou non. A part ca, pas mal quand même

Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mer. 06 avr. 2011 20:28
par supernana66
bonsoir,
En attendant, voilà un script certe plus simple, mais plus juste.
Je vais essayer ( je dit bien essayer) de l'ameliorer, mon but pouvoir distinguer les comptes locaux des comptes d'un domaine ou d'un autre.
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>
#include <GuiImageList.au3>
#include <Array.au3>
#include <File.au3>
dim $Readuser[10]
global $Liste_users, $Fin, $i, $the_user
creation_user()
while 1
$msg = GUIGetMsg()
if $msg = $Fin Then
exitloop
endif
WEnd
Func creation_user()
GUICreate("Installation", 220,360, 280,280,$WS_POPUPWINDOW)
GUISetBkColor(0xf0E68C)
$Liste_users = GUICtrlCreateListView("", 10, 5,200, 300)
_GUICtrlListView_SetExtendedListViewStyle($Liste_users, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
$Fin = GUICtrlCreateButton("quitter", 60, 310, 80, 30)
GUISetState()
_GUICtrlListView_InsertColumn($Liste_users, 0, "compte utilisateur", 150)
$i=0
while 1
$i+=1
$id = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\", $i)
$detail_user = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\' & $id, 'ProfileImagePath')
$Readuser = StringSplit($detail_user,"\")
$nbpara = $Readuser[0]
$user = $Readuser[$nbpara]
If @error <> 0 Then ExitLoop
_GUICtrlListView_AddItem($Liste_users,$user)
WEnd
EndFunc
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : dim. 10 avr. 2011 03:39
par arrkhan
"Les WMI sont nos amies, il faut les aimer aussi..."
J'ai pas de domaine sous la main pour pouvoir tester et améliorer ton script mais pourquoi faire compliqué en cherchant dans le registre alors qu'il y a les WMI Win32_UserAccount et Win32_UserInDomain
► Afficher le texte
Code : Tout sélectionner
#;http://msdn.microsoft.com/en-us/library/aa394554%28v=VS.85%29.aspx
Opt("guioneventmode", 1)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
Global $Combo
GUICreate("[Ex] Liste tous les utilisateurs d'un PC", 400, 150)
;juste au cas où il me viendrait l'idée de continuer ce script pour lui faire chercher les comptes d'un domaine ^^
$strComputer = GUICtrlCreateInput("127.0.0.1", 10, 10, 100, 20)
GUICtrlCreateButton("Recharger", 110, 10, 80, 20)
GUICtrlSetOnEvent(-1, "_Reload")
$Combo = GUICtrlCreateCombo("", 240, 10, 150, 20, 0x3)
GUICtrlSetOnEvent(-1, "_InfoUser")
$Info1 = GUICtrlCreateLabel("Description : ", 10, 40, 380, 15)
$Info2 = GUICtrlCreateLabel("Domaine : ", 10, 60, 380, 15)
$Info3 = GUICtrlCreateLabel("Compte local : ", 10, 80, 380, 15)
$Info4 = GUICtrlCreateLabel("SID : ", 10, 100, 380, 15)
$Info5 = GUICtrlCreateLabel("Nom complet : ", 10, 120, 380, 15)
GUISetState()
GUISetOnEvent(-3, "_Exit")
While 1
Sleep(100)
WEnd
;~ Fonction qui nous permet de lister tout les comptes locaux de la machine
Func _Reload()
Local $Name = "Choisissez un compte ...|"
GUICtrlSetData($Combo, "")
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT Name FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Name &= $objItem.Name & "|"
Next
GUICtrlSetData($Combo, $Name, "Choisissez un compte ...")
EndIf
EndFunc ;==>_Reload
;~ En se servant de la fonction "_Reload" on liste tout les objets de l'utilisateur précisé dans le combobox
Func _InfoUser()
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount where Name = '" & GUICtrlRead($Combo) & "'", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
GUICtrlSetData($Info1, "Description : " & @TAB & $objItem.Description)
GUICtrlSetData($Info2, "Domaine : " & @TAB & $objItem.Domain)
GUICtrlSetData($Info3, "Compte local : " & @TAB & $objItem.LocalAccount)
GUICtrlSetData($Info4, "SID : " & @TAB & @TAB & $objItem.SID)
GUICtrlSetData($Info5, "Nom complet : " &@TAB & $objItem.FullName)
Next
EndIf
EndFunc ;==>_InfoUser
Func _Exit()
Exit
EndFunc ;==>_Exit
Espérant t'avoir mis sur la voie
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mar. 19 avr. 2011 12:11
par supernana66
Bonjour,
Cela marche à la perfection sur un poste en workgroup mais pas sur un poste intégré à un domaine .
Cordialement V.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mar. 19 avr. 2011 15:02
par albu68
"Les WMI sont nos amies, il faut les aimer aussi..."
Cela marche à la perfection sur un poste en workgroup mais pas sur un poste intégré à un domaine .
+1
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mer. 20 avr. 2011 09:36
par Yogui
arrkhan a écrit :"Les WMI sont nos amies, il faut les aimer aussi..."
J'ai pas de domaine sous la main pour pouvoir tester et améliorer ton script mais pourquoi faire compliqué en cherchant dans le registre alors qu'il y a les WMI Win32_UserAccount et Win32_UserInDomain
► Afficher le texte
Code : Tout sélectionner
#;http://msdn.microsoft.com/en-us/library/aa394554%28v=VS.85%29.aspx
Opt("guioneventmode", 1)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
Global $Combo
GUICreate("[Ex] Liste tous les utilisateurs d'un PC", 400, 150)
;juste au cas où il me viendrait l'idée de continuer ce script pour lui faire chercher les comptes d'un domaine ^^
$strComputer = GUICtrlCreateInput("127.0.0.1", 10, 10, 100, 20)
GUICtrlCreateButton("Recharger", 110, 10, 80, 20)
GUICtrlSetOnEvent(-1, "_Reload")
$Combo = GUICtrlCreateCombo("", 240, 10, 150, 20, 0x3)
GUICtrlSetOnEvent(-1, "_InfoUser")
$Info1 = GUICtrlCreateLabel("Description : ", 10, 40, 380, 15)
$Info2 = GUICtrlCreateLabel("Domaine : ", 10, 60, 380, 15)
$Info3 = GUICtrlCreateLabel("Compte local : ", 10, 80, 380, 15)
$Info4 = GUICtrlCreateLabel("SID : ", 10, 100, 380, 15)
$Info5 = GUICtrlCreateLabel("Nom complet : ", 10, 120, 380, 15)
GUISetState()
GUISetOnEvent(-3, "_Exit")
While 1
Sleep(100)
WEnd
;~ Fonction qui nous permet de lister tout les comptes locaux de la machine
Func _Reload()
Local $Name = "Choisissez un compte ...|"
GUICtrlSetData($Combo, "")
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT Name FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
$Name &= $objItem.Name & "|"
Next
GUICtrlSetData($Combo, $Name, "Choisissez un compte ...")
EndIf
EndFunc ;==>_Reload
;~ En se servant de la fonction "_Reload" on liste tout les objets de l'utilisateur précisé dans le combobox
Func _InfoUser()
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount where Name = '" & GUICtrlRead($Combo) & "'", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
GUICtrlSetData($Info1, "Description : " & @TAB & $objItem.Description)
GUICtrlSetData($Info2, "Domaine : " & @TAB & $objItem.Domain)
GUICtrlSetData($Info3, "Compte local : " & @TAB & $objItem.LocalAccount)
GUICtrlSetData($Info4, "SID : " & @TAB & @TAB & $objItem.SID)
GUICtrlSetData($Info5, "Nom complet : " &@TAB & $objItem.FullName)
Next
EndIf
EndFunc ;==>_InfoUser
Func _Exit()
Exit
EndFunc ;==>_Exit
Espérant t'avoir mis sur la voie
Test avec un domaine : ça fonctionne !!
juste cette ligne :
Code : Tout sélectionner
GUICtrlSetData($Info2, "Domaine : " & @TAB & $objItem.Domain)
Qui en fait donne le nom de la machine
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : mer. 20 avr. 2011 10:49
par albu68
Test avec un domaine : ça fonctionne !!
Oui en effet, j'ai attendu longtemps, le temps de la découverte réseau (400 users)
Même en mettant l'ip de sa propre machine ça prend tout les utilisateur du réseau.
C'est sympa !
Ce qui manque : Après avoir cliquer sur "Choisissez un compte, il faudrait un Scroller pour descendre et monter pour afficher plus que 30 users.
Re: [Ex] Liste tous les utilisateurs d'un PC
Posté : lun. 25 avr. 2011 23:57
par arrkhan
Autre version permettant de s'affranchir de la limitation du combobox, pas de modification majeure du code, mais le treeview est surement plus approprié.
► Afficher le texte
Code : Tout sélectionner
;http://msdn.microsoft.com/en-us/library/aa394554%28v=VS.85%29.aspx
Opt("guioneventmode", 1)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
GUICreate("[Ex] Liste tous les utilisateurs d'un PC/Domaine", 800, 600)
;~ juste au cas où il me viendrait l'idée de continuer ce script pour lui faire chercher les comptes d'un domaine ^^
$strComputer = GUICtrlCreateInput("127.0.0.1", 10, 10, 100, 20)
GUICtrlCreateButton("Recharger", 110, 10, 80, 20)
GUICtrlSetOnEvent(-1, "_Reload")
$Tree = GUICtrlCreateTreeView(10, 40, 200, 550)
$Info1 = GUICtrlCreateLabel("Description : ", 220, 40, 380, 15)
$Info2 = GUICtrlCreateLabel("Domaine : ", 220, 60, 380, 15)
$Info3 = GUICtrlCreateLabel("Compte local : ", 220, 80, 380, 15)
$Info4 = GUICtrlCreateLabel("SID : ", 220, 100, 380, 15)
$Info5 = GUICtrlCreateLabel("Nom complet : ", 220, 120, 380, 15)
GUISetState()
GUISetOnEvent(-3, "_Exit")
While 1
Sleep(100)
WEnd
;~ Fonction qui nous permet de lister tout les comptes locaux de la machine et/ou du domaine
Func _Reload()
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT Name FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
;~ Pour chaque résultat, on ajoute un item au treeview et on lui assigne un évenement
If IsObj($colItems) Then
For $objItem In $colItems
GUICtrlCreateTreeViewItem($objItem.Name, $Tree)
guictrlsetonevent(-1,"_infouser")
Next
EndIf
EndFunc ;==>_Reload
;~ On va lire la valeur avancée du treeviewitem qui nous donne son nom.
Func _InfoUser()
$objWMIService = ObjGet("winmgmts:\\" & GUICtrlRead($strComputer) & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount where Name = '" & GUICtrlRead($tree, 1) & "'", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
GUICtrlSetData($Info1, "Description : " & @TAB & $objItem.Description)
GUICtrlSetData($Info2, "Domaine : " & @TAB & $objItem.Domain)
GUICtrlSetData($Info3, "Compte local : " & @TAB & $objItem.LocalAccount)
GUICtrlSetData($Info4, "SID : " & @TAB & @TAB & $objItem.SID)
GUICtrlSetData($Info5, "Nom complet : " & @TAB & $objItem.FullName)
Next
EndIf
EndFunc ;==>_InfoUser
Func _Exit()
Exit
EndFunc ;==>_Exit
Edit : toujours pas de domaine sous la main, je testerai demain au boulot ^^