[R] Demande de creation d'une boucle pour arrêt service

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

[R] Demande de creation d'une boucle pour arrêt service

#1

Message par Sydneysyd »

Bonjour à tous,

Je me creuse la tête mais je suis un peu perdu avec la commande pour démarrer et arrêter un service.

Je voudrais faire une boucle qui dit que si le service untel existe, alors on l'arrete et on sort de la boucle

Je pensais à cela :

Code : Tout sélectionner

While 1
If Not service untel Then ExitLoop
Net stop service untel
WEnd
 
C'est au niveau des commandes que je suis perdu, car j'ai beau chercher sur le forum je ne trouve rien

Merci
Modifié en dernier par Sydneysyd le jeu. 04 sept. 2014 23:07, modifié 1 fois.
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#2

Message par jchd »

A quoi sert la boucle ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#3

Message par Sydneysyd »

C'est pour un patch à appliquer en fait, donc le service peut ne pas exister sur certaines machines, d'où la boucle :)
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#4

Message par jguinch »

En fait, tu veux arrêter un service s'il est en cours d'exécution, c'est ça ?

Code : Tout sélectionner

$sServiceName = "RemoteRegistry"
$oShell=ObjCreate("shell.application")

if $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStop($sServiceName,false)
; if NOT $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStart($sServiceName,false)
ou WMI : http://www.autoitscript.com/forum/topic ... ?p=1127678
ou l'API via un UDF : http://www.autoitscript.com/forum/topic ... toit-code/
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#5

Message par Sydneysyd »

Oui, mais le souci est que ce service peut ne pas exister sur certains postes, donc selon ton code, comment je fais pour le redémarrer automatiquement ?

La boucle me paraissait pas mal...

Il n'y a pas un code en autoit ?
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#6

Message par jguinch »

Sydneysyd a écrit :ce service peut ne pas exister sur certains postes, donc selon ton code, comment je fais pour le redémarrer automatiquement ?
Avoue que c'est un peu flou quand-même :roll: Tu veux démarrer un service qui n'existe pas...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#7

Message par Sydneysyd »

Non c'est pas flou :)

Je veux savoir s'il le service untel existe
Si c'est le cas on l'arrête
Puis on le redemarre une fois que c'est terminé.
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#8

Message par orax »

:?: Et la boucle ? Elle sert à parcourir tous les postes ?
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#9

Message par Sydneysyd »

Non la boucle c'est pour savoir si le service existe et dans ce cas on l'arrete et on sort de la boucle pour continuer le programme
Si le service n'existe pas on sort directement de la boucle
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#10

Message par jchd »

Argh !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#11

Message par orax »

J'ai demandé ça puisque je ne vois pas l'intérêt ta boucle.

Une fois qu'il aura été arrêté et que le patch aura été appliqué, tu peux le redémarrer avec

Code : Tout sélectionner

$oShell.ServiceStart($sServiceName,false)
Ou sinon, en reprenant une partie du code de jguinch (dans le lien), tu devrais pouvoir vérifier si le service existe bien sur le poste (avec _WMIService_Get) :
► Afficher le texte
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#12

Message par jguinch »

Au lieu d'attendre que le service soit créé, pourquoi ne pas attendre simplement la fin de l'installation du patch ?

Les fonctions que j'ai posté sur le forum US ont la particularité d'être très lentes.
Mettre _WMIService_Get() dans une boucle, c'est possible mais un peu lent.
Un truc tout bête qui permet de savoir si un service existe est de regarder directement dans la base de registre (en se basant sur le nom court du service) dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services

Code : Tout sélectionner

$oShell=ObjCreate("shell.application")
$sServiceName = "AdobeFlashPlayerUpdateSvc"

; On arrête le service s'il est lancé (s'il n'existe pas, ça fait rien)
if $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStop($sServiceName,false)

; On lance l'installation du patch....
; ...

; On attend que le service soit créé
While RegRead("HKLM\SYSTEM\CurrentControlSet\services\" & $sServiceName, "DisplayName") <> "" 
    Sleep(100)
WEnd

; Et on lance le service
$oShell.ServiceStart($sServiceName,false)
 
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Sydneysyd
Niveau 5
Niveau 5
Messages : 177
Enregistré le : jeu. 24 nov. 2011 08:58
Status : Hors ligne

Re: [...] Demande de creation d'une boucle pour arrêt servic

#13

Message par Sydneysyd »

C'est parfait !
Merci beaucoup ^^
-Il n'y a qu'en jouant avec les plus forts que l'on progresse-
Répondre