Page 1 sur 1

[R] Lister les comptes locaux d'une machine

Posté : mar. 05 févr. 2008 18:09
par Yindoo
Bon voilà mon problème, je voudrais lister afin de pouvoir les supprimer, les comptes locaux d'une machine fonctionnant sous XP pro... je sais qu'on devrait pouvoir y avoir accès via ObjGet mais comment ??? si quelqu'un a un debut de solution, merci d'avance

Re: [..] lister les comptes locaux d'une machine

Posté : mar. 05 févr. 2008 20:56
par sylvanie
au plus simple, je redirigerai la comande net user vers un fivhier via :

Code : Tout sélectionner

run(@comspec& ' /c net user > users.txt',@workingdir,@sw_hide)
et j'utiliserai le log.

Re: [..] lister les comptes locaux d'une machine

Posté : mer. 06 févr. 2008 01:26
par Tlem
J'ai essayé en récupèrant les infos du Net Use, mais il faut en plus convertir en Ansi, sinon ça ne donne pas le résultat escompter !

Sinon, j'ai trouvé un bout de code qui donnais le nom de l'administrateur, et en le modifiant un peut, ça me crée un tableau, avec le nom de chaque utilisateur.

Code : Tout sélectionner

#include <Array.au3>

$Users = GetUsersName()
_ArrayDisplay($Users,"Liste des utilisateurs")

Func GetUsersName()
    Local $UsersName
    Dim $UserSID, $oWshNetwork, $oUserAccount
    $objWMIService = objGet( "winmgmts:{impersonationLevel=impersonate}!//"  & @ComputerName & "/root/cimv2")
    $oUserAccounts = $objWMIService.ExecQuery("Select Name, SID from Win32_UserAccount WHERE Domain = '" & @ComputerName & "'")
    For $oUserAccount In $oUserAccounts
        $UsersName &= $oUserAccount.Name & "|"
    Next
    Return StringSplit(StringLeft($UsersName, StringLen($UsersName)-1), "|")
EndFunc

Re: [..] lister les comptes locaux d'une machine

Posté : mer. 06 févr. 2008 18:30
par arrkhan
cette Wmi peut te donner de nombreuses infos:

Code : Tout sélectionner

#include<guiconstants.au3>
dim $Output
$strComputer = "localhost"
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & " == == == == == == == == == == == == == == == == == == == == == " & @CRLF
$objWMIService = ObjGet ( "winmgmts:\\" & $strComputer & "\root\CIMV2" )
$colItems = $objWMIService.ExecQuery ( "SELECT * FROM Win32_UserAccount" , "WQL" )
For $objItem In $colItems
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "Disabled: " & $objItem.Disabled & @CRLF
$Output = $Output & "Domain: " & $objItem.Domain & @CRLF
$Output = $Output & "FullName: " & $objItem.FullName & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$Output = $Output & "PasswordChangeable: " & $objItem.PasswordChangeable & @CRLF
$Output = $Output & "PasswordExpires: " & $objItem.PasswordExpires & @CRLF
$Output = $Output & "PasswordRequired: " & $objItem.PasswordRequired & @CRLF
$Output = $Output & "SID: " & $objItem.SID & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF & @crlf
Next
GUICreate ( "" , 400 , 400 , - 1 , - 1 , $WS_overlappedwindow )
GUICtrlCreateEdit ( $Output , 10 , 10 , 380 , 380 , $ws_vscroll )
GUISetState ( @SW_SHOW )
While 1
$msg = guigetmsg ( )
if $msg = - 3 then ExitLoop
sleep ( 10 )
WEnd
esperant que ca reponde a ta question.

Re: [..] lister les comptes locaux d'une machine

Posté : mer. 06 févr. 2008 21:44
par Tlem
@arrkhan : Yindoo demandait de lister les comptes utilisateurs, et non le détail de chaque compte.

Re: [..] lister les comptes locaux d'une machine

Posté : jeu. 07 févr. 2008 02:01
par arrkhan
ah ouais ^^

mais la .SID peut egalement etre pratique pour supprimer les cle correspondate aux compte supprimes

Re: [..] lister les comptes locaux d'une machine

Posté : jeu. 07 févr. 2008 07:43
par Tlem
Il suffisait donc d'indiquer les éléments qui pouvaient être rajouter au code précédent.
Liste des éléments :

Code : Tout sélectionner

$oUserAccount.Caption
$oUserAccount.Description
$oUserAccount.Disabled
$oUserAccount.Domain
$oUserAccount.FullName
$oUserAccount.Name
$oUserAccount.PasswordChangeable
$oUserAccount.PasswordExpires
$oUserAccount.PasswordRequired
$oUserAccount.SID
$oUserAccount.Status
 
Ou plus simplement si c'était pour la SID, de modifier le code comme ceci :

Code : Tout sélectionner

    For $oUserAccount In $oUserAccounts
        $UsersName &= $oUserAccount.Name & "#" & $oUserAccount.SID & "|"
    Next