J'essaie de scripter le redémarrage d'un service sur des serveurs distants.
Vu que le temps nécessaire à l'arrêt puis au redémarrage du service est
aleatoire suivant le serveur, je ne souhaite pas utiliser l'instruction
WScript.Sleep. Alors j'ai essayé avec une boucle qui vérifie que le service
est dans l'état "STOPPED" avant de le redémarrer. Malheureusement, je ne sors
jamais de la boucle quel que soit l'état du service. Je ne comprends pas
pourquoi, cependant, il doit bien y avoir une erreur dans mon script ! :-) Je
ne suis pas un pro alors si quelqu'un peut me dire quelle erreur j'ai fait,
ça serait cool.
Voilà mon script, merci d'avance:
On Error Resume Next
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("DHCPList.txt", _
ForReading, FailIfNotExist, OpenAsASCII)
Do Until objFile.AtEndOfStream
strComputer = Trim(objFile.ReadLine)
WScript.Echo " Processing " & strComputer & " ..."
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gilles LAURENT
"Vincent" a écrit dans le message de news: | Bonjour,
Bonjour,
[...]
| objService.StopService() | Do Until objService.State = "Stopped" | Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à "Running" car c'est la valeur qui a été lue lors de la construction de la collection via WMI. La modification des propriétés n'est pas dynamique donc le fait d'arrêter le service ne modifie pas les valeurs des propriétés. Pour connaitre l'état du service il est nécessaire de mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService() | Do Until objService.State = "Running" | Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du service. Dans votre code, remplacez : Do ... Loop par 1- WaitForServiceState "DHCPServer", "Stopped" ou 2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié ' soit dans l'état demandé Sub WaitForServiceState (serviceName, reqServiceState) Dim curServiceState Dim colServices
curServiceState = 0 do until curServiceState = 1 Wscript.Sleep (500) Set colServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where " & _ "Name = '" & serviceName & "' And " & _ "State='" & reqServiceState & "'") curServiceState = colServices.count Loop
End Sub
-- Coupez ici --
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"Vincent" <Vincent@discussions.microsoft.com> a écrit dans le message
de news:A26DEEF9-27E1-4985-92FF-B7D42FF6B17A@microsoft.com
| Bonjour,
Bonjour,
[...]
| objService.StopService()
| Do Until objService.State = "Stopped"
| Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à
"Running" car c'est la valeur qui a été lue lors de la construction de
la collection via WMI. La modification des propriétés n'est pas
dynamique donc le fait d'arrêter le service ne modifie pas les valeurs
des propriétés. Pour connaitre l'état du service il est nécessaire de
mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService()
| Do Until objService.State = "Running"
| Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du
service.
Dans votre code, remplacez :
Do ... Loop
par
1- WaitForServiceState "DHCPServer", "Stopped"
ou
2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié
' soit dans l'état demandé
Sub WaitForServiceState (serviceName, reqServiceState)
Dim curServiceState
Dim colServices
curServiceState = 0
do until curServiceState = 1
Wscript.Sleep (500)
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where " & _
"Name = '" & serviceName & "' And " & _
"State='" & reqServiceState & "'")
curServiceState = colServices.count
Loop
End Sub
-- Coupez ici --
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"Vincent" a écrit dans le message de news: | Bonjour,
Bonjour,
[...]
| objService.StopService() | Do Until objService.State = "Stopped" | Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à "Running" car c'est la valeur qui a été lue lors de la construction de la collection via WMI. La modification des propriétés n'est pas dynamique donc le fait d'arrêter le service ne modifie pas les valeurs des propriétés. Pour connaitre l'état du service il est nécessaire de mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService() | Do Until objService.State = "Running" | Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du service. Dans votre code, remplacez : Do ... Loop par 1- WaitForServiceState "DHCPServer", "Stopped" ou 2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié ' soit dans l'état demandé Sub WaitForServiceState (serviceName, reqServiceState) Dim curServiceState Dim colServices
curServiceState = 0 do until curServiceState = 1 Wscript.Sleep (500) Set colServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where " & _ "Name = '" & serviceName & "' And " & _ "State='" & reqServiceState & "'") curServiceState = colServices.count Loop
End Sub
-- Coupez ici --
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Vincent
Merci beaucoup pour votre aide
Bonne journée
"Vincent" a écrit dans le message de news: | Bonjour,
Bonjour,
[...]
| objService.StopService() | Do Until objService.State = "Stopped" | Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à "Running" car c'est la valeur qui a été lue lors de la construction de la collection via WMI. La modification des propriétés n'est pas dynamique donc le fait d'arrêter le service ne modifie pas les valeurs des propriétés. Pour connaitre l'état du service il est nécessaire de mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService() | Do Until objService.State = "Running" | Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du service. Dans votre code, remplacez : Do ... Loop par 1- WaitForServiceState "DHCPServer", "Stopped" ou 2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié ' soit dans l'état demandé Sub WaitForServiceState (serviceName, reqServiceState) Dim curServiceState Dim colServices
curServiceState = 0 do until curServiceState = 1 Wscript.Sleep (500) Set colServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where " & _ "Name = '" & serviceName & "' And " & _ "State='" & reqServiceState & "'") curServiceState = colServices.count Loop
End Sub
-- Coupez ici --
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD
Merci beaucoup pour votre aide
Bonne journée
"Vincent" <Vincent@discussions.microsoft.com> a écrit dans le message
de news:A26DEEF9-27E1-4985-92FF-B7D42FF6B17A@microsoft.com
| Bonjour,
Bonjour,
[...]
| objService.StopService()
| Do Until objService.State = "Stopped"
| Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à
"Running" car c'est la valeur qui a été lue lors de la construction de
la collection via WMI. La modification des propriétés n'est pas
dynamique donc le fait d'arrêter le service ne modifie pas les valeurs
des propriétés. Pour connaitre l'état du service il est nécessaire de
mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService()
| Do Until objService.State = "Running"
| Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du
service.
Dans votre code, remplacez :
Do ... Loop
par
1- WaitForServiceState "DHCPServer", "Stopped"
ou
2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié
' soit dans l'état demandé
Sub WaitForServiceState (serviceName, reqServiceState)
Dim curServiceState
Dim colServices
curServiceState = 0
do until curServiceState = 1
Wscript.Sleep (500)
Set colServices = objWMIService.ExecQuery _
("Select * from Win32_Service Where " & _
"Name = '" & serviceName & "' And " & _
"State='" & reqServiceState & "'")
curServiceState = colServices.count
Loop
End Sub
-- Coupez ici --
--
Gilles LAURENT
Me contacter : http://cerbermail.com/?zoTY7ZkLcD
"Vincent" a écrit dans le message de news: | Bonjour,
Bonjour,
[...]
| objService.StopService() | Do Until objService.State = "Stopped" | Loop
Le problème vient du fait que la propriété 'State' sera toujours égale à "Running" car c'est la valeur qui a été lue lors de la construction de la collection via WMI. La modification des propriétés n'est pas dynamique donc le fait d'arrêter le service ne modifie pas les valeurs des propriétés. Pour connaitre l'état du service il est nécessaire de mettre à jour la collection et donc de relancer une interrogation.
| objService.StartService() | Do Until objService.State = "Running" | Loop
Idem
Ci-dessous la procédure qui peut être utilisée pour attendre l'état du service. Dans votre code, remplacez : Do ... Loop par 1- WaitForServiceState "DHCPServer", "Stopped" ou 2- WaitForServiceState "DHCPServer", "Running"
-- Coupez ici --
' procédure utilisée pour attendre que le service spécifié ' soit dans l'état demandé Sub WaitForServiceState (serviceName, reqServiceState) Dim curServiceState Dim colServices
curServiceState = 0 do until curServiceState = 1 Wscript.Sleep (500) Set colServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where " & _ "Name = '" & serviceName & "' And " & _ "State='" & reqServiceState & "'") curServiceState = colServices.count Loop
End Sub
-- Coupez ici --
-- Gilles LAURENT Me contacter : http://cerbermail.com/?zoTY7ZkLcD