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 :
Code vbs : 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
 
'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 :
Code vbs : 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
 
'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

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.

Merci d'avance.

Kcin