OVH Cloud OVH Cloud

DHCP encore et toujours !

20 réponses
Avatar
Vincent
Bonjour,

Je suis en train de me tuer à essayer de scripter la modification de la
Class DHCP sur les postes de travail. Je pars du code suivant:

On Error Resume Next
strComputer = "."
Set StdOut = WScript.StdOut
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

'****************** definition de la classe ***********************
dim shell
set shell = wscript.createobject("wscript.shell")
r=shell.run ("ipconfig /setclassid " & Chr(34) & "Connexion au réseau local"
& Chr(34) & " NEWCLASS",,true)

'*********** renew de la conf dhcp pour toutes les cartes ****************
For Each objNetCard in colNetCards
objNetCard.RenewDHCPLease()
Next

Mes problèmes sont les suivants:
1) Les cartes réseaux n'ont pas toutes le même nom, de plus pour les
portables il y a aussi la carte sur la station d'accueil à prendre en compte
(toutefois,appliquer la modif sur toutes les cartes est envisageable). y a
t'il un moyen de faire la modif sur toutes les cartes ?

2) Je voulais gérer cette modif via une GPO mais on me demande de faire
différemment :-( à savoir en récupérant le nom des machines via une
connection LDAP (ça je sais faire) ou un fichier (je sais faire aussi), et
d'appliquer la modif à chaque machine.

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, Location from
'LDAP://ou=workstations,ou=SIEGE,dc=mycompany,dc=fr' " _
& "Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Le pb est que je n'arrive pas à intégrer les 2 codes ci-dessus, en clair
pousser une commande Netsh sur des machines distantes !

3) Il faut aussi créer un fichier de résultat contenant les machines ayant
reçu la modif et celles non modifiées. Vu que le nom de la classe n'apparaît
pas dans le registre, cette info n'est pas facile à récuperer, ou alors via
un IPCONFIG /SHOWCLASSID renvoyé dans un fichier et revenir lire l'info dans
ce fichier mais ça ne me paraît pas être la solution la plus simple !

Voilà, si quelqu'un de généreux peux me filer un coup de main, j'accepte
avec grand plaisir :-)

Vincent

10 réponses

1 2
Avatar
Michel Claveau
Bonjour !

Je n'ai pas suivi le truc, mais, as-tu essayé avec NETSH ?
(netsh dump permet de voir comment faire un script ; netsh exec
permet de lancer un script)

--
@-salutations

Michel Claveau
Avatar
Vincent
Bonjour,

Mon pb principal est d'exécuter une commande IPCONFIG /SETCLASSID pour
modifier la classe sur toutes les cartes réseaux des stations de travail (~
3000).
Je souhaite utiliser un VBS pour récupérer le nom des stations (organisées
dans différentes OU suivant le site géographique) et pousser la modif sur
toutes les machines, une par une.
(la partie service DHCP est déjà faite, reste la partie client)

Merci

Vincent BORIE


Bonjour !

Je n'ai pas suivi le truc, mais, as-tu essayé avec NETSH ?
(netsh dump permet de voir comment faire un script ; netsh exec
permet de lancer un script)

--
@-salutations

Michel Claveau





Avatar
Gilles LAURENT
"Vincent" a écrit dans le message
de news:
| Bonjour,

Bonsoir,

| Je suis en train de me tuer à essayer de scripter la modification de
| la Class DHCP sur les postes de travail. Je pars du code suivant:

[...]

| Mes problèmes sont les suivants:
| 1) Les cartes réseaux n'ont pas toutes le même nom, de plus pour les
| portables il y a aussi la carte sur la station d'accueil à prendre en
| compte (toutefois,appliquer la modif sur toutes les cartes est
| envisageable). y a t'il un moyen de faire la modif sur toutes les
| cartes ?

-- Coupez ici : setClassId.vbs --

Option Explicit

' déclaration des variables
Dim oSh, oWMI, oNetAdapter
Dim colNetAdapters
Dim strAdapterName

' initialisation
Set oSh = CreateObject ("WScript.Shell")
Set oWMI = GetObject ("winmgmts:rootcimv2")

' recherche des interfaces réseau installées
Set colNetAdapters = oWMI.ExecQuery _
("select * from Win32_NetworkAdapter",,48)

' énumération des interfaces réseau disponibles
For Each oNetAdapter In colNetAdapters

' lecture du nom de l'interface (compatible ipconfig)
strAdapterName = oNetAdapter.NetConnectionID

' sont traités uniquement les interfaces reconnues et de
' type Ethernet 802.3. Les interfaces firewire sont également
' exclues du traitement
If strAdapterName <> "" And _
oNetAdapter.AdapterTypeID = 0 And _
InStr (strAdapterName, "1394") = 0 Then

' début du traitement
WScript.Echo "Processing [" & strAdapterName & "] ..."

' modification de la classe dhcp
oSh.Run "ipconfig /setclassid " & _
Chr (34) & strAdapterName & Chr (34) & " " & _
"MyClassId", 0, True

' insérer ici la commande de renouvellement du bail
' attention toutefois à la coupure de la connexion réseau

End If
Next

-- Coupez ici : setClassId.vbs --

| 2) Je voulais gérer cette modif via une GPO mais on me demande de
| faire différemment :-( à savoir en récupérant le nom des machines
| via une connection LDAP (ça je sais faire) ou un fichier (je sais
| faire aussi), et d'appliquer la modif à chaque machine.

-- Coupez ici : setClassIdRemotely.vbs --

Option Explicit

' déclaration des variables
Dim oController, oExec

' initialisation
Set oController = WScript.CreateObject ("WSHController")

' copie du script 'setClassId.vbs' sur la machine distante
' le nom de la machine distante est passé comme argument
Set oExec = oController.CreateScript ("setClassId.vbs", _
WScript.Arguments (0))

' exécution du script sur la machine distante
oExec.Execute

' attente de la fin du traitement
Do While oExec.Status <> 2

' temporisation
WScript.Sleep 100
Loop

-- Coupez ici : setClassIdRemotely.vbs --

Note : Remote WSH doit être activé pour que cette technique fonctionne.
Cela peut être activé via un paramètre de stratégie :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/738df52b-b375-4397-a4d4-1a35370fae5b.asp

| 3) Il faut aussi créer un fichier de résultat contenant les machines
| ayant reçu la modif et celles non modifiées. Vu que le nom de la
| classe n'apparaît pas dans le registre, cette info n'est pas facile à
| récuperer, ou alors via un IPCONFIG /SHOWCLASSID renvoyé dans un
| fichier et revenir lire l'info dans ce fichier mais ça ne me paraît
| pas être la solution la plus simple !

Cette information est bien présente dans le registre :
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIn
terfaces{guid}DhcpClassId

Il est donc possible d'écrire un script exécuté dans le script
d'ouverture de session réseau pour rechercher cette information et
consolider le tout dans un fichier log par exemple. Cette information
peut être extraite du registre ou du résultat de la commande ipconfig
/showclassid

Bien entendu, tout cela doit être testé au préalable sur maquette et
tous les scénarii doivent être joués (postes fixes, portables,
multihomed, ...)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Vincent
Bonjour Laurent,

Merci beaucoup pour votre aide.

1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste après le
ipconfig /SetClassId et testé dans un premier temps le script
"SetClassID.vbs" localement sur une machine et j'obtiens des erreurs:

- sur une machine XP -> Cet objet ne gère pas cette propriété ou cette
méthode:'RenewDHCPLease'

- sur une machine W2000 -> Cet objet ne gère pas cette propriété ou cette
méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai sous XP serait
également générée !

2°) D'autre part, dans le script "setclassidremotely.vbs", comment se fait
le lien entre les variables strComputer et WScript.Arguments (0) ?
Voilà ce que donnerait mon script adapté avec votre suggestion:

'+-------------- INITIALISATION ----------------+

On Error Resume Next

Const ADS_SCOPE_SUBTREE = 2
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const ForWriting = 2
Const ForAppending = 8
Const ForReading = 1
Const OpenAsASCII = 0
Const FailIfNotExist = 0
Const OverwriteIfExist = -1
UP="0"
DN="0"
ALL="0"

'+-------------- FICHIER DE SORTIE -------------+

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ObjTextFileCreate=objFSO.CreateTextFile("Result.txt",true)
ToWrite= "date;time;Hostname;Ping Status"
objTextFileCreate.writeline(ToWrite)
objTextFileCreate.close

'+--------- CONNECTION A ACTIVE DIRECTORY -------------------+

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = _
"Select Name, Location from
'LDAP://ou=Workstations,ou=SIEGE,dc=nr-fr,dc=nrveolia-es,dc=group,dc=ve' " _
& "Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

'+--------------- TRAITEMENT DES ORDINATEURS ----------------+

Do Until objRecordSet.EOF
strComputer=objRecordSet.Fields("Name").Value
ALL=ALL + 1
WScript.Echo ALL & ":" & " Processing " & strComputer & " ..."
Set objShell = Wscript.CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile _
("PingLog.txt", OverwriteIfExist, OpenAsASCII)

'+---------------- ORDINATEUR ACCESSIBLE ---------------+

If IsConnectible(strComputer, 1, "") Then
UP=UP + 1

Dim oController, oExec
Set oController = WScript.CreateObject("WSHController")
Set oExec = oController.CreateScript("SetClassID.VBS", _
WScript.Arguments (0))

oExec.Execute

Do While oExec.Status <> 2
WScript.Sleep 100
Loop

'+------------------------- MISE A JOUR FICHIER DE SORTIE
------------------------+

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("Result.txt", ForAppending, True)
objTextFile.WriteLine(date & ";" & time & ";" & strComputer &
";" & "OK")
objTextFile.close
WScript.Echo ALL & ":" & " Done !"

'+-------------------------- ORDINATEUR NON ACCESSIBLE
---------------------------+

else
DN=DN + 1

'+------------------------- MISE A JOUR FICHIER DE SORTIE
------------------------+

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
("Result.txt", ForAppending, True)
objTextFile.WriteLine(date & ";" & time & ";" & strComputer &
";" & "NOK")
objTextFile.close
WScript.Echo ALL & ":" & " Skipped !"


End If

objOutputFile.Close
objRecordSet.MoveNext
Loop


'+------------------------- FONCTION PING -------------------------------+

Function IsConnectible(sHost, iPings, iTO)

Const OpenAsASCII = 0
Const FailIfNotExist = 0
Const ForReading = 1
Dim oShell, oFSO, sTempFile, fFile

If iPings = "" Then iPings = 2
If iTO = "" Then iTO = 750

Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")

sTempFile = oFSO.GetSpecialFolder(2).ShortPath & "" &
oFSO.GetTempName

oShell.Run "%comspec% /c ping.exe -n " & iPings & " -w " & iTO _
& " " & sHost & ">" & sTempFile, 0 , True

Set fFile = oFSO.OpenTextFile(sTempFile, ForReading, _
FailIfNotExist, OpenAsASCII)

sResults = fFile.ReadAll
fFile.Close
oFSO.DeleteFile(sTempFile)
IsConnectible = CBool(InStr(sResults, "TTL="))

End Function

'+------------------------ FIN DU SCRIPT -----------------------------------+




"Vincent" a écrit dans le message
de news:
| Bonjour,

Bonsoir,

| Je suis en train de me tuer à essayer de scripter la modification de
| la Class DHCP sur les postes de travail. Je pars du code suivant:

[...]

| Mes problèmes sont les suivants:
| 1) Les cartes réseaux n'ont pas toutes le même nom, de plus pour les
| portables il y a aussi la carte sur la station d'accueil à prendre en
| compte (toutefois,appliquer la modif sur toutes les cartes est
| envisageable). y a t'il un moyen de faire la modif sur toutes les
| cartes ?

-- Coupez ici : setClassId.vbs --

Option Explicit

' déclaration des variables
Dim oSh, oWMI, oNetAdapter
Dim colNetAdapters
Dim strAdapterName

' initialisation
Set oSh = CreateObject ("WScript.Shell")
Set oWMI = GetObject ("winmgmts:rootcimv2")

' recherche des interfaces réseau installées
Set colNetAdapters = oWMI.ExecQuery _
("select * from Win32_NetworkAdapter",,48)

' énumération des interfaces réseau disponibles
For Each oNetAdapter In colNetAdapters

' lecture du nom de l'interface (compatible ipconfig)
strAdapterName = oNetAdapter.NetConnectionID

' sont traités uniquement les interfaces reconnues et de
' type Ethernet 802.3. Les interfaces firewire sont également
' exclues du traitement
If strAdapterName <> "" And _
oNetAdapter.AdapterTypeID = 0 And _
InStr (strAdapterName, "1394") = 0 Then

' début du traitement
WScript.Echo "Processing [" & strAdapterName & "] ..."

' modification de la classe dhcp
oSh.Run "ipconfig /setclassid " & _
Chr (34) & strAdapterName & Chr (34) & " " & _
"MyClassId", 0, True

' insérer ici la commande de renouvellement du bail
' attention toutefois à la coupure de la connexion réseau

End If
Next

-- Coupez ici : setClassId.vbs --

| 2) Je voulais gérer cette modif via une GPO mais on me demande de
| faire différemment :-( à savoir en récupérant le nom des machines
| via une connection LDAP (ça je sais faire) ou un fichier (je sais
| faire aussi), et d'appliquer la modif à chaque machine.

-- Coupez ici : setClassIdRemotely.vbs --

Option Explicit

' déclaration des variables
Dim oController, oExec

' initialisation
Set oController = WScript.CreateObject ("WSHController")

' copie du script 'setClassId.vbs' sur la machine distante
' le nom de la machine distante est passé comme argument
Set oExec = oController.CreateScript ("setClassId.vbs", _
WScript.Arguments (0))

' exécution du script sur la machine distante
oExec.Execute

' attente de la fin du traitement
Do While oExec.Status <> 2

' temporisation
WScript.Sleep 100
Loop

-- Coupez ici : setClassIdRemotely.vbs --

Note : Remote WSH doit être activé pour que cette technique fonctionne.
Cela peut être activé via un paramètre de stratégie :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/738df52b-b375-4397-a4d4-1a35370fae5b.asp

| 3) Il faut aussi créer un fichier de résultat contenant les machines
| ayant reçu la modif et celles non modifiées. Vu que le nom de la
| classe n'apparaît pas dans le registre, cette info n'est pas facile à
| récuperer, ou alors via un IPCONFIG /SHOWCLASSID renvoyé dans un
| fichier et revenir lire l'info dans ce fichier mais ça ne me paraît
| pas être la solution la plus simple !

Cette information est bien présente dans le registre :
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersIn
terfaces{guid}DhcpClassId

Il est donc possible d'écrire un script exécuté dans le script
d'ouverture de session réseau pour rechercher cette information et
consolider le tout dans un fichier log par exemple. Cette information
peut être extraite du registre ou du résultat de la commande ipconfig
/showclassid

Bien entendu, tout cela doit être testé au préalable sur maquette et
tous les scénarii doivent être joués (postes fixes, portables,
multihomed, ...)

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD





Avatar
Gilles LAURENT
"Vincent" a écrit dans le message
de news:
| Bonjour Laurent,

Bonjour Vincent,
Note : moi, c'est Gilles !

| 1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste après
| le ipconfig /SetClassId et testé dans un premier temps le script
| "SetClassID.vbs" localement sur une machine et j'obtiens des erreurs:
|
| - sur une machine XP -> Cet objet ne gère pas cette propriété ou cette
| méthode:'RenewDHCPLease'

Ba oui c'est normal car la méthode RewewDHCPLease n'existe pas dans la
classe WMI Win32_NetworkAdapter. J'ai opté pour cette méthode dans le
but de disposer de la propriété 'NetConnectionID'
Pour renouveler le bail dhcp, il suffit d'ajouter le bout de code
suivant :

' renouvellement du bail dhcp
oSh.Run "ipconfig /renew " & _
Chr (34) & strAdapterName & Chr (34), 0, True

Ou alors d'utiliser la classe WMI Win32_NetworkAdapterSetting qui
associe les classes Win32_NetworkAdapter et
Win32_NetworkAdapterConfiguration

| - sur une machine W2000 -> Cet objet ne gère pas cette propriété ou
| cette méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai
| sous XP serait également générée !

La propriété NetConnectionID n'est disponible qu'à partir de XP. Cette
erreur est donc normale sur les postes Windows 2000. (voilà pourquoi
c'est important d'être précis). La propriété NetConnectionID expose le
nom de l'interface au format compatible avec la commande 'ipconfig'. Il
faut donc tester la valeur des autres propriétés disponibles sous
Windows 2000 pour essayer d'obtenir le même résultat ou alors trouver
une solution de contournement

| 2°) D'autre part, dans le script "setclassidremotely.vbs", comment se
| fait le lien entre les variables strComputer et WScript.Arguments (0)

Il vous suffit de remplacer 'WScript.Arguments(0)' par 'strComputer'.
Attention toutefois au format de la variable strComputer. Il est
peut-être nécessaire de faire précéder le nom de l'ordinateur distant
par '' (à tester)

Je vous propose dans un premier temps de valider le mécanisme sur une
plateforme XP

Questions :
Sur les 3000 postes, combien sont encore sous Windows 2000 ?
Tous les postes (XP et 2000) ont-ils déjà une classid dhcp de configuré
?

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Vincent
Rebonjour Gilles ! ;-) désolé mais je suis allé un peu vite et confondu vos
nom et prénom ...

Tout d'abord j'ai testé le script SetClassID.VBS localement et il fonctionne !

Ensuite, j'ai testé le script remote en changeant l'argument par la variable
strComputer mais ça ne marche pas. J'ai essayé avec strComputer ,
strComputer, "" & Chr(34) & strComputer, "strComputer", mais aucune ne
fonctionne. En fait le script reste sur 'Processing le 1er ordi ... ' et rien
d'autre ne se passe. J'ai fait un Netstat -a pour voir si une quelconque
connection tentait de s'établir vers la machine distante mais que dalle !

Concernant votre question, j'ai à peu près 50% de XP et 50% de 2000, et
toutes ces machines ont déjà une classe paramétrée.


"Vincent" a écrit dans le message
de news:
| Bonjour Laurent,

Bonjour Vincent,
Note : moi, c'est Gilles !

| 1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste après
| le ipconfig /SetClassId et testé dans un premier temps le script
| "SetClassID.vbs" localement sur une machine et j'obtiens des erreurs:
|
| - sur une machine XP -> Cet objet ne gère pas cette propriété ou cette
| méthode:'RenewDHCPLease'

Ba oui c'est normal car la méthode RewewDHCPLease n'existe pas dans la
classe WMI Win32_NetworkAdapter. J'ai opté pour cette méthode dans le
but de disposer de la propriété 'NetConnectionID'
Pour renouveler le bail dhcp, il suffit d'ajouter le bout de code
suivant :

' renouvellement du bail dhcp
oSh.Run "ipconfig /renew " & _
Chr (34) & strAdapterName & Chr (34), 0, True

Ou alors d'utiliser la classe WMI Win32_NetworkAdapterSetting qui
associe les classes Win32_NetworkAdapter et
Win32_NetworkAdapterConfiguration

| - sur une machine W2000 -> Cet objet ne gère pas cette propriété ou
| cette méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai
| sous XP serait également générée !

La propriété NetConnectionID n'est disponible qu'à partir de XP. Cette
erreur est donc normale sur les postes Windows 2000. (voilà pourquoi
c'est important d'être précis). La propriété NetConnectionID expose le
nom de l'interface au format compatible avec la commande 'ipconfig'. Il
faut donc tester la valeur des autres propriétés disponibles sous
Windows 2000 pour essayer d'obtenir le même résultat ou alors trouver
une solution de contournement

| 2°) D'autre part, dans le script "setclassidremotely.vbs", comment se
| fait le lien entre les variables strComputer et WScript.Arguments (0)

Il vous suffit de remplacer 'WScript.Arguments(0)' par 'strComputer'.
Attention toutefois au format de la variable strComputer. Il est
peut-être nécessaire de faire précéder le nom de l'ordinateur distant
par '' (à tester)

Je vous propose dans un premier temps de valider le mécanisme sur une
plateforme XP

Questions :
Sur les 3000 postes, combien sont encore sous Windows 2000 ?
Tous les postes (XP et 2000) ont-ils déjà une classid dhcp de configuré
?

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD





Avatar
Vincent
Gilles,

Le code suivant fonctionne:
Set oExec = oController.CreateScript("SetClassID.VBS", "" & strComputer)

Enfin presque ... maintenant je retrouve bien une connection établie
(netstat -a)entre ma station d'admin et la station distante sur le port 135 ,
mais le script reste sur "Processing ..."

Ce n'est pas un pb de droit car j'utilise le compte admin du domaine.

Le script SetClassId n'est pas copié sur la machine distante. D'ailleurs,
quel est l'emplacement par défaut ? Est ce modifiable ?

Merci

Vincent



"Vincent" a écrit dans le message
de news:
| Bonjour Laurent,

Bonjour Vincent,
Note : moi, c'est Gilles !

| 1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste après
| le ipconfig /SetClassId et testé dans un premier temps le script
| "SetClassID.vbs" localement sur une machine et j'obtiens des erreurs:
|
| - sur une machine XP -> Cet objet ne gère pas cette propriété ou cette
| méthode:'RenewDHCPLease'

Ba oui c'est normal car la méthode RewewDHCPLease n'existe pas dans la
classe WMI Win32_NetworkAdapter. J'ai opté pour cette méthode dans le
but de disposer de la propriété 'NetConnectionID'
Pour renouveler le bail dhcp, il suffit d'ajouter le bout de code
suivant :

' renouvellement du bail dhcp
oSh.Run "ipconfig /renew " & _
Chr (34) & strAdapterName & Chr (34), 0, True

Ou alors d'utiliser la classe WMI Win32_NetworkAdapterSetting qui
associe les classes Win32_NetworkAdapter et
Win32_NetworkAdapterConfiguration

| - sur une machine W2000 -> Cet objet ne gère pas cette propriété ou
| cette méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai
| sous XP serait également générée !

La propriété NetConnectionID n'est disponible qu'à partir de XP. Cette
erreur est donc normale sur les postes Windows 2000. (voilà pourquoi
c'est important d'être précis). La propriété NetConnectionID expose le
nom de l'interface au format compatible avec la commande 'ipconfig'. Il
faut donc tester la valeur des autres propriétés disponibles sous
Windows 2000 pour essayer d'obtenir le même résultat ou alors trouver
une solution de contournement

| 2°) D'autre part, dans le script "setclassidremotely.vbs", comment se
| fait le lien entre les variables strComputer et WScript.Arguments (0)

Il vous suffit de remplacer 'WScript.Arguments(0)' par 'strComputer'.
Attention toutefois au format de la variable strComputer. Il est
peut-être nécessaire de faire précéder le nom de l'ordinateur distant
par '' (à tester)

Je vous propose dans un premier temps de valider le mécanisme sur une
plateforme XP

Questions :
Sur les 3000 postes, combien sont encore sous Windows 2000 ?
Tous les postes (XP et 2000) ont-ils déjà une classid dhcp de configuré
?

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD





Avatar
Gilles LAURENT
"Vincent" a écrit dans le message
de news:
| Tout d'abord j'ai testé le script SetClassID.VBS localement et il
| fonctionne !

Bonne nouvelle ;-)

| Ensuite, j'ai testé le script remote en changeant l'argument par la
| variable strComputer mais ça ne marche pas. J'ai essayé avec
| strComputer , strComputer, "" & Chr(34) & strComputer,
| "strComputer", mais aucune ne fonctionne. En fait le script reste
| sur 'Processing le 1er ordi ... ' et rien d'autre ne se passe. J'ai
| fait un Netstat -a pour voir si une quelconque connection tentait de
| s'établir vers la machine distante mais que dalle !

+++ Les pre requis
WSH 5.6
WSH Remote activé (Remote=1 REG_SZ)
Administrateur de la machine distante
Le script setClassId.vbs dans le dossier courant
Set oExec = oController.CreateScript ("setClassId.vbs", _
strComputer)

Le script doit quand même rendre la main, non ?
Une erreur particulière à l'éxécution ?
Le contenu de la variable strComputer est correcte ?

| Concernant votre question, j'ai à peu près 50% de XP et 50% de 2000,
| et toutes ces machines ont déjà une classe paramétrée.

Ok

|
|| "Vincent" a écrit dans le message
|| de news:
||| Bonjour Laurent,
||
|| Bonjour Vincent,
|| Note : moi, c'est Gilles !
||
||| 1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste
||| après le ipconfig /SetClassId et testé dans un premier temps le
||| script "SetClassID.vbs" localement sur une machine et j'obtiens des
||| erreurs:
|||
||| - sur une machine XP -> Cet objet ne gère pas cette propriété ou
||| cette méthode:'RenewDHCPLease'
||
|| Ba oui c'est normal car la méthode RewewDHCPLease n'existe pas dans
|| la classe WMI Win32_NetworkAdapter. J'ai opté pour cette méthode
|| dans le but de disposer de la propriété 'NetConnectionID'
|| Pour renouveler le bail dhcp, il suffit d'ajouter le bout de code
|| suivant :
||
|| ' renouvellement du bail dhcp
|| oSh.Run "ipconfig /renew " & _
|| Chr (34) & strAdapterName & Chr (34), 0, True
||
|| Ou alors d'utiliser la classe WMI Win32_NetworkAdapterSetting qui
|| associe les classes Win32_NetworkAdapter et
|| Win32_NetworkAdapterConfiguration
||
||| - sur une machine W2000 -> Cet objet ne gère pas cette propriété ou
||| cette méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai
||| sous XP serait également générée !
||
|| La propriété NetConnectionID n'est disponible qu'à partir de XP.
|| Cette erreur est donc normale sur les postes Windows 2000. (voilà
|| pourquoi c'est important d'être précis). La propriété
|| NetConnectionID expose le nom de l'interface au format compatible
|| avec la commande 'ipconfig'. Il faut donc tester la valeur des
|| autres propriétés disponibles sous Windows 2000 pour essayer
|| d'obtenir le même résultat ou alors trouver une solution de
|| contournement
||
||| 2°) D'autre part, dans le script "setclassidremotely.vbs", comment
||| se fait le lien entre les variables strComputer et
||| WScript.Arguments (0)
||
|| Il vous suffit de remplacer 'WScript.Arguments(0)' par 'strComputer'.
|| Attention toutefois au format de la variable strComputer. Il est
|| peut-être nécessaire de faire précéder le nom de l'ordinateur distant
|| par '' (à tester)
||
|| Je vous propose dans un premier temps de valider le mécanisme sur une
|| plateforme XP
||
|| Questions :
|| Sur les 3000 postes, combien sont encore sous Windows 2000 ?
|| Tous les postes (XP et 2000) ont-ils déjà une classid dhcp de
|| configuré ?
||
|| --
|| Gilles LAURENT
|| Me contacter : http://cerbermail.com/?zoTY7ZkLcD



--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Avatar
Vincent

"Vincent" a écrit dans le message
de news:
| Tout d'abord j'ai testé le script SetClassID.VBS localement et il
| fonctionne !

Bonne nouvelle ;-)


Oui, ça avance !:-)


| Ensuite, j'ai testé le script remote en changeant l'argument par la
| variable strComputer mais ça ne marche pas. J'ai essayé avec
| strComputer , strComputer, "" & Chr(34) & strComputer,
| "strComputer", mais aucune ne fonctionne. En fait le script reste
| sur 'Processing le 1er ordi ... ' et rien d'autre ne se passe. J'ai
| fait un Netstat -a pour voir si une quelconque connection tentait de
| s'établir vers la machine distante mais que dalle !

+++ Les pre requis
WSH 5.6
WSH Remote activé (Remote=1 REG_SZ)
Administrateur de la machine distante
Le script setClassId.vbs dans le dossier courant
Set oExec = oController.CreateScript ("setClassId.vbs", _
strComputer)


Oui tous les pré-requis sont établis !

Le script doit quand même rendre la main, non ?


Non. J'exécute le script via une invite de commande (CSCRIPT monscript.vbs)
et il reste planté sur "Processing Machine1 ... "

Une erreur particulière à l'éxécution ?


Aucune erreur. . J'ai juste à faire un Ctrl C pour interrompre.

Le contenu de la variable strComputer est correcte ?


Oui puisque j'ai bien une connection établie depuis la station admin vers la
station en cours de traitement (sur le port 135). Par contre, un NETSTAT -a
sur la station de travail ne montre pas de connection avec la station d'admin
...


| Concernant votre question, j'ai à peu près 50% de XP et 50% de 2000,
| et toutes ces machines ont déjà une classe paramétrée.

Ok

|
|| "Vincent" a écrit dans le message
|| de news:
||| Bonjour Laurent,
||
|| Bonjour Vincent,
|| Note : moi, c'est Gilles !
||
||| 1°) J'ai ajouté la ligne - oNetAdapter.RenewDHCPLease() - juste
||| après le ipconfig /SetClassId et testé dans un premier temps le
||| script "SetClassID.vbs" localement sur une machine et j'obtiens des
||| erreurs:
|||
||| - sur une machine XP -> Cet objet ne gère pas cette propriété ou
||| cette méthode:'RenewDHCPLease'
||
|| Ba oui c'est normal car la méthode RewewDHCPLease n'existe pas dans
|| la classe WMI Win32_NetworkAdapter. J'ai opté pour cette méthode
|| dans le but de disposer de la propriété 'NetConnectionID'
|| Pour renouveler le bail dhcp, il suffit d'ajouter le bout de code
|| suivant :
||
|| ' renouvellement du bail dhcp
|| oSh.Run "ipconfig /renew " & _
|| Chr (34) & strAdapterName & Chr (34), 0, True
||
|| Ou alors d'utiliser la classe WMI Win32_NetworkAdapterSetting qui
|| associe les classes Win32_NetworkAdapter et
|| Win32_NetworkAdapterConfiguration
||
||| - sur une machine W2000 -> Cet objet ne gère pas cette propriété ou
||| cette méthode:'NetConnectionID' + j'imagine que l'erreur que j'ai
||| sous XP serait également générée !
||
|| La propriété NetConnectionID n'est disponible qu'à partir de XP.
|| Cette erreur est donc normale sur les postes Windows 2000. (voilà
|| pourquoi c'est important d'être précis). La propriété
|| NetConnectionID expose le nom de l'interface au format compatible
|| avec la commande 'ipconfig'. Il faut donc tester la valeur des
|| autres propriétés disponibles sous Windows 2000 pour essayer
|| d'obtenir le même résultat ou alors trouver une solution de
|| contournement
||
||| 2°) D'autre part, dans le script "setclassidremotely.vbs", comment
||| se fait le lien entre les variables strComputer et
||| WScript.Arguments (0)
||
|| Il vous suffit de remplacer 'WScript.Arguments(0)' par 'strComputer'.
|| Attention toutefois au format de la variable strComputer. Il est
|| peut-être nécessaire de faire précéder le nom de l'ordinateur distant
|| par '' (à tester)
||
|| Je vous propose dans un premier temps de valider le mécanisme sur une
|| plateforme XP
||
|| Questions :
|| Sur les 3000 postes, combien sont encore sous Windows 2000 ?
|| Tous les postes (XP et 2000) ont-ils déjà une classid dhcp de
|| configuré ?
||
|| --
|| Gilles LAURENT
|| Me contacter : http://cerbermail.com/?zoTY7ZkLcD



--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD





Avatar
Gilles LAURENT
"Vincent" a écrit dans le message
de news:

[...]

| Non. J'exécute le script via une invite de commande (CSCRIPT
| monscript.vbs) et il reste planté sur "Processing Machine1 ... "

Pouvez-vous mettre en commentaire la ligne suivante de votre script :
On Error Resume Next

--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
1 2