Script vbs : Accès à une machine distante pour changer les DNS clients.

cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012 - 6 juin 2012 à 10:38
cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012 - 6 juin 2012 à 10:46
Bonjour à tous,

J'essaye d'avoir accès à une machine distante pour modifier les DNS clients.

Le parc informatique de ma société contient environ +50 postes, répartis dans toute la France, je vais donc pas m'amuser à faire les trajets avec ma voiture ;p Et aucun moyen de configurer le serveur DHCP pour le faire.
Bref.

J'avais trouvé des scripts vbs qui permettaient l'accès à distance :

1er script :
'On Error Resume Next
Computers = array( "A38WS-LYINF9" )
NewDNS = array( "10.0.0.10" )

For Each Computer In Computers

  Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\" & Computer & "\root\cimv2")

  Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 
 
  For Each objNicConfig In colNicConfigs
    strDNSServerSO = ""
    If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
      For Each strDNSServer In objNicConfig.DNSServerSearchOrder         
        strDNSServerSO = strDNSServerSO & strDNSServer & ","
      Next
    End If

    If strDNSServerSO<> "" Then
      'si strDNSServerSO n'est pas vide nous sommes dans la bonne carte réseau (dans le cas où une seule carte réseau est configurée)
      'set les nouvelles valeurs
      
      objNicConfig.SetDNSServerSearchOrder( NewDNS )
    End If
  Next

Next


2ième script :
'On Error Resume Next
Computers = array( "A38WS-LYINF9" )
NewDNS = array( "10.0.0.10" )
strDomain = "monDomaine"

strUser = InputBox("Entrez votre login utilisateur :")
strPassword = InputBox("Saisissez votre mot de passe :")

For Each Computer In Computers

  Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
  Set objWMIService = objSWbemLocator.ConnectServer(Computer, "root\cimv2", strUser, strPassword, "MS_409", "ntlmdomain:" + strDomain)
objWMIService.Security_.ImpersonationLevel = 3

  Set colNicConfigs = objWMIService.ExecQuery _
  ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 
 
  For Each objNicConfig In colNicConfigs
    strDNSServerSO = ""
    If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
      For Each strDNSServer In objNicConfig.DNSServerSearchOrder         
        strDNSServerSO = strDNSServerSO & strDNSServer & ","
      Next
    End If

    If strDNSServerSO<> "" Then
      'si strDNSServerSO n'est pas vide nous sommes dans la bonne carte réseau (dans le cas où une seule carte réseau est configurée)
      'set les nouvelles valeurs
      
      objNicConfig.SetDNSServerSearchOrder( NewDNS )
    End If
  Next

Next


Concernant le premier script, quand je remplace le contenu de Computers par array( "." ), l’exécution se fait sans soucis sur mon poste et les DNS sont changées.

Mais dès que je met le nom ou l'ip d'un PC distant ( en l'occurence ma VM ), j'obtiens une erreur :

Error : Permission refusée : 'GetObject'
Code : 800A0046


Pour le second script, local ou distant, j'ai une erreur.

Pour le poste local, avec un ".", son ip ou son nom :

Error : Les références utilisateurs ne peuvent être utilisées pour des connexions locales
Code : 80041064

Bon, là çà peut se comprendre...

Mais pour le poste distant :

Error : Accès refusé
Code : 80070005


Le PC distant étant ma VM, j'ai quand même tester sur une vrai machine, mais les erreurs sont les même...

Quelqu'un aurait la gentillesse de m'expliquer ce qui bloque ? Ou si quelqu'un a un autre code fonctionnel, je suis preneur ;p

Merci d'avance.

Kcin

1 réponse

cs_kcin Messages postés 63 Date d'inscription vendredi 5 novembre 2004 Statut Membre Dernière intervention 26 novembre 2012
6 juin 2012 à 10:46
J'ai oublié de préciser :

Et en passant par les GPO, mon responsable n'apprécie pas. Sa raison, car la GPO modifie une entrée de la base de registre et non pas les données saisies dans les propriétés de la carte réseau.


Kcin
0
Rejoignez-nous