IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

[VBS] Script modification MDP admin local via admin domaine


Sujet :

VBScript

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [VBS] Script modification MDP admin local via admin domaine
    Bonjour,
    j'ai déjà effectué diverses recherches sur internet, mon problème a déjà était évoqué et j'ai trouvé plusieurs solutions semblant pouvoir convenir mais je suis toujours bloqué !

    Je vous explique mon problème en commençant par le contexte :
    J'ai un réseau d'environ 140 postes, tous membres d'un domaine AD, monté sur un serveur Windows 2003 serveur !

    Mon but est d'arriver à modifier le mot de passe administrateur local de toute les machines de mon réseau, via un script VBS lancé par une GPO, en utilisant le compte administrateur du domaine !

    J'ai effectivement trouvé divers scripts sur internet censé permettre de faire ça, ainsi qu'un logiciel pour changer le mot de passe à distance dcpc (danish company), mais je n'arrive pas à faire fonctionnement correctement aucune des solutions !

    en vous remerciant pour toute aide que vous pourrez m'apporter,
    Cordialement

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Si tu nous montres tes cripts, nous donnes le nom du logiciel et le processus que tu as utilisé pour faire fonctionner tout cela, on pourra peut être t'aider.

    Parce que sinon à moins de te donner encore une autre solution, on aura du mal à t'expliquer pourquoi tu n'y arrives pas.

    Ha et puis dis nous aussi ce qui ne fonctionne pas.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Ok ^^
    Ok ! Merci de t'intéresser à mon post !

    Alors lorsque j'utilise le logiciel DC-PasswordChanger (DCPC)
    Version 1.0, celui-ci me change bien les mots de passe de certains postes mais bloque sur certains et me retourne par exemple l'erreur \\PCC31: Error 53 : Le chemin réseau n'a pas été trouvé, alors que les postes concernés sont bien allumés !

    Pour ce qui est des scripts vbs, je me suis basé sur ce que j'ai pu récupérer sur le net, par exemple :

    http://mcpmag.com/articles/2006/06/2...-weigh-in.aspx
    et puis un script de JC Bellamy ...Etc

    J'en ai testé plusieurs (des .bat aussi avec net user), le dernier en date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set objOU = GetObject("LDAP://OU=users, DC=Pedago, DC=local")
    objOU.Filter = Array("Computer")
     
    For Each objItem in objOU
        strComputer = objItem.CN
        Set objUser = GetObject("WinNT://" & strComputer & "/Administrator")
        objUser.SetPassword("mdp")
    Next
    Un autre (celui fait par JC BELLAMY) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    ' ----------------------------------------------------------
    ' Script de modification du mot de passe d'un compte donné
    ' sur toutes les machines d'un domaine ou workgroup
    ' Syntaxe:
    '	chgallpwd [/d<domain>] /u<utilisateur> /a<ancien> /n<nouveau> 
    '		<domain>      : nom du domaine ou workgroup concerné
    '	                    si ce nom est omis, on prend le domaine
    '                       de la machine locale
    '       <utilisateur> : nom du compte utilisateur
    '	                    si absent => utilisateur courant
    '		<ancien>      : ancien mot de passe
    '		<nouveau>     : nouveau mot de passe	
    '
    ' JC BELLAMY © 2002
    ' ----------------------------------------------------------
    Const SW_HIDE=0
    Const SW_SHOWNORMAL=1 
    Dim net,shell,computer, args, fso,oWinnt, oDomain, oDomainItem, SAM
    Set net  = Wscript.CreateObject("WScript.Network")
    Set fso  = WScript.CreateObject("Scripting.FileSystemObject")
    Set Shell= Wscript.CreateObject("WScript.Shell")
    Set args = Wscript.Arguments
    nbargs=args.count
    defmoteur="cscript"
    If nbargs=0 or testarg("?") or testarg("h") Then Syntaxe ""
    ' Test du moteur utilisé
    Call TestHost(true)
     
    If testarg("u") Then
    	user=getarg("u")
    Else
    	user=net.UserName
    	End If
    user=lcase(user)
     
    If not testarg("a") then Syntaxe "Ancien mot de passe absent"
    If not testarg("n") then Syntaxe "Nouveau mot de passe absent"
     
    OldPassword=getarg("a")
    NewPassword=getarg("n")
    If OldPassword=NewPassword Then Syntaxe "Le nouveau mot de passe est égal à l'ancien"
     
    domain=""
    If testarg("d") Then domain=getarg("d")
    If domain="" Then
    	Set ComputerSystem = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("Win32_ComputerSystem")
    	for each ComputerItem in ComputerSystem
    	    domain=ComputerItem.Domain
    		next
    	End If
     
    Wscript.echo "Modification de mot de passe sur les ordinateurs du domaine " & domain
    set oWinnt=GetObject("WinNT://" & domain)
    For each oDomainItem in oWinnt
    	classe=oDomainItem.Class
    	Computer=oDomainItem.Name
    	If classe="Computer" Then chgpwd(Computer) 
    	Next
    '
    Wscript.quit
    '--------------------------------------------------------------------
    Function testarg(param)
    testarg=false
    For i = 0 To nbargs-1
    	curarg=lcase(args(i))
    	If left(curarg,1)="/" or left(curarg,1)="-" Then
    		If mid(curarg,2,len(param))=param Then
    			testarg=true
    			exit function
    			End If
    		End If
    	Next
    End Function
    '--------------------------------------------------------------------
    Function getarg(param)
    getarg=""
    For i = 0 To nbargs-1
    	curarg=lcase(args(i))
    	If left(curarg,1)="/" or left(curarg,1)="-" Then
    		If mid(curarg,2,len(param))=param Then
    			getarg=mid(args(i),2+len(param))
    			exit function
    			End If
    		End If
    	Next
    End Function
    '--------------------------------------------------------------------
    ' Sous programme de test du moteur
    Sub TestHost(force)
    dim rep
    strappli=lcase(Wscript.ScriptFullName)
    strFullName =lcase(WScript.FullName)
    i=InStr(1,strFullName,".exe",1)
    j=InStrRev(strFullName,"\",i,1)
    strCommand=Mid(strFullName,j+1,i-j-1)
    if strCommand<>"cscript" then
    	If force then 
    		Init="Ce script doit être lancé avec CSCRIPT"
    	Else
    		Init="Il est préférable de lancer ce script avec CSCRIPT"
    		End If
    	rep=MsgBox(Init & VBCRLF & _
    	"Cela peut être rendu permanent avec la commande" & VBCRLF & _
    	"cscript //H:CScript //S /Nologo" & VBCRLF & _
    	"Voulez-vous que ce soit fait automatiquement?", _
    	vbYesNo + vbQuestion,strappli)
    	if rep=vbYes  then 
    		nomcmd="setscript.bat"
    		Set ficcmd = fso.CreateTextFile(nomcmd)
    		ficcmd.writeline "@echo off"
    		ficcmd.writeline "cscript //H:CScript //S /Nologo"
    		ficcmd.writeline "pause"
    		params=""
    		For i = 0 To nbargs-1 
    			params=params & " " & args(i)
    			next
    		ficcmd.writeline chr(34) & strappli & chr(34) & params
    		ficcmd.writeline "pause"
    		ficcmd.close
    		shell.Run nomcmd, SW_SHOWNORMAL,true
    		force=true
    		end if
        If force then WScript.Quit
    	end if
    end sub
    ' -------------------------------------
    Sub Syntaxe(info)
    If info="" Then
    	msg=      "Script VBS de modification de mot de passe d'un compte donné" & VBCRLF
    	msg=msg & "sur toutes les machines d'un domaine ou workgroup" & VBCRLF & VBCRLF
    	msg=msg & "JC BELLAMY © 2002" & VBCRLF 
    Else
    	msg="*** " & info & " ***" & VBCRLF
    	End If
    msg=msg & "------------------------------------------" & VBCRLF
    msg=msg & "Syntaxe : " & VBCRLF
    msg=msg & " chgallpwd [/d<domaine>] /u<utilisateur> /a<ancien> /n<nouveau>" & VBCRLF
    msg=msg & " chgallpwd [-d<domaine>] -u<utilisateur> -a<ancien> -n<nouveau>" & VBCRLF 
    msg=msg & "     <domaine>     : nom du domaine ou workgroup concerné" & VBCRLF
    msg=msg & "                     si ce nom est omis, on prend le domaine" & VBCRLF
    msg=msg & "                     de la machine locale" & VBCRLF
    msg=msg & "     <utilisateur> : nom du compte utilisateur" & VBCRLF
    msg=msg & "                     si absent => utilisateur courant" & VBCRLF
    msg=msg & "     <ancien>      : ancien mot de passe" & VBCRLF
    msg=msg & "     <nouveau>     : nouveau mot de passe" & VBCRLF & VBCRLF
    msg=msg & "NB : les mots de passe sont sensibles à la casse (minuscules/majuscules)" & VBCRLF & VBCRLF
    wscript.echo msg
    wscript.quit
    End Sub
    ' -------------------------------------
    Sub chgpwd(computer)
    root="\\" & computer & "\c$"
    If not fso.FolderExists(root)  Then
    	wscript.echo "*** L'ordinateur """ & computer & """ n'a pas été trouvé sur le réseau"
    	exit sub
    	End If
    OKuser=false
    set SAM=GetObject("WinNT://" & computer & ",computer")
    for each Item in SAM
    	Classe=Item.Class
    	If Classe = "User" and lcase(Item.name)=user Then 
    		OKuser=true
    		exit for
    		end if
    	next
    If not OKuser Then
    	wscript.echo "*** """ & user & """ n'est pas un utilisateur de " & computer	
    	exit sub
    	End If
    Set ObjNT = GetObject("WinNT:")
    on error resume next
    Set ObjUser = ObjNT.OpenDSObject("WinNT://" & computer & "/" & User, User, OldPassword, 1)
    If Err.Number<>0 Then Erreur "OpenDSObject"
    ObjUser.ChangePassword OldPassword, NewPassword
    If Err.Number<>0 Then 
    	Erreur "ChangePassword"
    else
    	wscript.echo "Mot de passe de """ & user & """ sur """ & computer & """ correctement modifié!"
    	end if
    End Sub
    '--------------------------------------------------------------------
    Sub erreur(module)
    hexerr=Hex(Err.Number)
    desc=Err.Description
    If InStr(hexerr,"8007")>0 Then
    	hexerr=eval("&H"& Right(hexerr,4))
    	If hexerr=1376 Then desc="Mot de passe initial incorrect"
    	End If
    msg="*** Modification du mot de passe de """ & user & """ sur " & Computer & " non effectuée" & VBCRLF
    msg=msg & "Fonction " & module & " - code " & hexerr & " : " & VBCRLF
    msg=msg & desc 
    wscript.echo msg
    End Sub
    ' -------------------------------------
    Voilà j'ai aussi essayé avec PsTools !

    enfin voilà avec les scripts, ca me change pas les mots de passe c'est tout, pas de message d'erreurs !

    J'ai pas beaucoup essayer d'adapter les scripts (pas trop le temps), je vais me repencher dessus, mais je me disais que quelqu'un aurait peut être un logiciel récent à me proposer ou un script correspondant exactement !

    Et puis je serai pas contre quelques renseignements supplémentaires parce que si je me plante, la ça pardonne pas la modif du mot de passe admin !

    Voilà, en vous remerciant,
    Cordialement

  4. #4
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set objOU = GetObject("LDAP://OU=users, DC=Pedago, DC=local")
    objOU.Filter = Array("Computer")
     
    For Each objItem in objOU
        strComputer = objItem.CN
        Set objUser = GetObject("WinNT://" & strComputer & "/Administrator")
        objUser.SetPassword("mdp")
    Next
    Ce serait pas Administrateur à la place de administrator ton compte utilisateur ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut PsTools
    Bonjour,
    bon j'ai réessayé vite fait ce matin !

    spantemonium >>> sur mon poste de test c'était bien administrator mais de toute façon j'ai testé avec administrateur ça ne changeait rien !

    Enfin à mon avis le plus simple et le plus efficace c'est d'utiliser pspasswd.exe de la suite PsTools, j'ai créé un petit .bat pour lancer l'appli avec les bons paramètres.
    http://technet.microsoft.com/fr-fr/s...43(en-us).aspx
    Alors pour changer le mot de passe de l'administrateur local d'une machine en particulier avec le compte administrateur du domaine pas de problème, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pspasswd \\Poste-37 -u PEDAGO\administrateur -p mdpadmdomaine Administrateur mdpadmlocal
    En revanche lorsque je cherche à changer le mot de passe de l'administrateur local sur toutes les machines du domaine, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pspasswd \\*.* -u PEDAGO\administrateur -p mdpadmdomaine Administrateur mdpadmlocal
    Message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PsPasswd v1.22 - Local and remote password changer
    Copyright (C) 2003-2004 Mark Russinovich
    Sysinternals - www.sysinternals.com
     
    Error changing password:
    Syntaxe du nom de fichier, de rÚpertoire ou de volume incorrecte.
    Voilà donc si quelqu'un a déjà utilisé cet outil pour changer le mot de passe administrateur local de toutes les machines de son domaine avec succès, je suis preneur :-)

    En vous remerciant,
    Cordialement

  6. #6
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Points : 212
    Points
    212
    Par défaut
    essaie avec le nom complet s'il arrive pas en netbios :


    PEDAGO.domaine.com


    et s'il ne résout pas, ajoute le domaine.com dans ta liste de suffixes DNS.


    Il va de soi que domaine.com est un exemple à remplacer par ton nom de domaine complet

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    \\*.*
    Pas sur que l'outil comprenne *.*

    Tu peux faire un script et grâce à WSH tu peux lancer Run qui te permet d'executer une ligne de commande et donc de lancer ton outil.

    Tu mets cela dans une boucle et tu construit ta ligne en spécifiant à chaque fois le nom d'un poste.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je pense que le problème viens de la façon dont je défini à quel poste doit s'appliquer la modification du mot de passe, le fait de mettre *.* pour dire tous les postes du domaine semble ne pas fonctionner ! Mais quand je met simplement le nom d'un poste distant ou local particulier pas de problème :

    C:\Documents and Settings\administrateur.PEDAGOGIQUE\Bureau\PsTools>pspasswd \\Poste7-410 -u PEDAGOGIQUE\administrateur -p mdpadmindomaine Administrateur newmdpadminlocal

    PsPasswd v1.22 - Local and remote password changer
    Copyright (C) 2003-2004 Mark Russinovich
    Sysinternals - www.sysinternals.com

    Password for Poste7-410\Administrateur successfully changed.

    Mon domaine est pedagogique.local !

    Le problème viens donc de ce que je dois mettre à la place de *.* pour désigner tous les postes du domaine !

    @+

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Le problème viens donc de ce que je dois mettre à la place de *.* pour désigner tous les postes du domaine !
    Je ne pense pas que l'outil comprenne un mot clé pour aller directement changer les mots de passes de tous les postes du domaine.

    A mon avis tu dois faire une boucle pour avoir le nom de tous les postes du domain à l'aide d'un script.
    Puis pour chaque nom de poste, dnas la boucle tu appelles la méthode run de WSH pour lancer ton outil de la collection pstool en lui précisant le nom du PC.

    Là normalement avec cette combinaison outil + script tu feras ce que tu souhaites.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Ok ! merki ^^
    Ok ! Merci !
    Effectivement à mon avis en utilisant cette méthode, ça doit fonctionner !

    Mais pour le *.* , je n'inventai pas, sur la page décrivant l'utilisation de l'outil pstools tu a :

    computer Perform the command on the remote computer or computers specified. If you omit the computer name the command runs on the local system, and if you specify a wildcard (\\*), the command runs on all computers in the current domain.

    Et la je m'aperçois en faisant le copier/coller que c'est juste * qu'il faut mettre n'importe quoi !

    Alors en mettant juste * l'outil essaye bien de modifier le mot de passe des postes les uns après les autres (enfin ceux allumés), par contre j'ai toujours une petite erreur !

    Il m'en change bien certains :

    \\POSTE7-407:
    Password for POSTE7-407\Administrateur successfully changed.

    \\BRN_7FY6G4:
    Error changing password:
    Cette demande n'est pas prise en charge.

    (La c'est normal >> imprimante)

    Et là, la fameuse erreur,

    \\PC150:
    Error changing password:
    Le chemin rÚseau n'a pas ÚtÚ trouvÚ.

    Mais bon à mon avis là c'est pas un problème de script, mais plutôt de réseau (parefeu, droits, maj, users, ....) !

    Donc je vais regarder ça de plus prés !

    En tous cas merci pour toutes ces réponses !

    Cordialement

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut End
    Bonjour,
    je ne m'y remet que aujourd'hui, le problème d'accès réseau, si certains venaient à rencontrer le même problème :


    * En Invite de commandes saisissez la commande : net view \\Nom_Ordinateur
    Si vous obtenez une erreur n°53 vous avez un problème au niveau de la résolution des noms.
    Vous devez donc vérifier que NetBIOS sur TCP/IP est activée et que le service Explorateur d'ordinateurs est démarré.

    @+

Discussions similaires

  1. Changer mdp admin local dans un domaine
    Par mims1664 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 23/02/2010, 13h55
  2. Modif mdp admin local d'une liste de serveur
    Par karma_xy dans le forum VBScript
    Réponses: 3
    Dernier message: 12/03/2009, 13h43
  3. Modifer mot de passe admin local
    Par dolsky dans le forum VBScript
    Réponses: 1
    Dernier message: 09/02/2009, 09h47
  4. Pb Erreur changer MDP Admin local via domain
    Par kenji_lol dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 27/06/2008, 17h36
  5. [admin] export via un job
    Par VinceTlse dans le forum Oracle
    Réponses: 7
    Dernier message: 18/07/2006, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo