Flash info

Maître Yoda utilise PowerShell. Cette source encore non confirmée par Obi-Wan Kenobi aurait pour origine une conférence sur la force obscure de CMD. Que le POWERshell soit avec vous...

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
<< Début < Précédente 1 2 Suivante > Fin >>
nightymen
Utilisateur

PowerShelleur Débutant
Messages: 5
graphgraph
Karma: 0  
Redémarrage automatique d'un service en cas darret - 17/02/11 17:18 Bjr a toutes et a tous

comme amateur en powershell je voudrais avoir quelques infos,je dois creer un script qui verifie un service et le redemarre automatiquement en cas d'arret

je connais la commande start-service mais a part ca c'est le flou!

Message édité par: Arnaud, à: 13/04/11 23:09
  | | L'administrateur a désactivé l'accés public en écriture.
bilbao
Utilisateur

PowerShelleur Platinum
Messages: 226
graphgraph
Karma: 18  
Re:Demarrage automatique d'un service - 17/02/11 18:02 Voici un exemple en Powershell qui vérifie l'état du service "Telnet", et le redémarre si le service est arrêté:

Code:

 if((Get-Service Where $_.DisplayName -match "Telnet" }).Status -match "Stopped"){Start-Service -DisplayName Telnet }



Cependant je ne pense pas que Powershell soit la meilleur solution, à mon avis il est plus sage d'utiliser les tâches planifiées, ou de passer par une autre méthode.

Car si je comprend bien le script doit vérifier en permanence l'état du service ?
  | | L'administrateur a désactivé l'accés public en écriture.
nightymen
Utilisateur

PowerShelleur Débutant
Messages: 5
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 17/02/11 18:15 oui en fait j'ai une application qui est censé etre automatique mais des que j'ai une mise a jour .net qui est faite j'ai le service qui s'arrete et je suis oblige de le relancer manuelement donc j'aurai aime créer un script qui le vérifie en permanence et dans le cas ou il est stoppé le relance automatiquement,dans le script que tu m'as donné comment pourrait on faire pour la verification du service selon un temps precis>chaque 10 minutes par ex.
  | | L'administrateur a désactivé l'accés public en écriture.
bilbao
Utilisateur

PowerShelleur Platinum
Messages: 226
graphgraph
Karma: 18  
Re:Demarrage automatique d'un service - 17/02/11 18:59 Certains vont peut être m'incendier en postant une boucle infinie mais tant pis.

Ce bout de code vérifie l'état d'une service toutes les 5 secondes.

Code:

 while($true) {  Write-Host "Vérification du statut du service Telnet: $(Get-Date -Format ""dd/MM/yy HH:mm:ss"")" -ForegroundColor Green  if((Get-Service Where $_.DisplayName -match "Telnet" }).Status -match "Stopped"){Start-Service -DisplayName Telnet }  Start-Sleep -Seconds 5 }



Sinon moyen, plus propre, invisible et surtout possibilité de le déploiement.

Je ne sais pas si ca marche bien vus que ton application est "maison" je pense.

(J'ai windows en anglais ici du coup je te donne les noms en anglais. )

Il faut d'abord récupérer les informations sur la fermeture de ton programme dans l'event log.
(EventID,Logname,Source)

http://img818.imageshack.us/i/telnet1.jpg/

Ensuite tu crées une tâche planifiée.
Dans "trigger" tu clique "New", tu sélectionne "On an Event", puis tu choisis custom tu remplis les champs de cette façon :

http://img9.imageshack.us/i/telnet2.jpg/

Ensuite tu crées une nouvelle "Action" où tu choisis un script bat (avec net start) qui lance ton service.

http://img593.imageshack.us/i/telnet3.jpg/

HS: Je n'arrive pas à faire marcher les balises "img".

Message édité par: bilbao, à: 17/02/11 19:02

Message édité par: bilbao, à: 17/02/11 19:03
  | | L'administrateur a désactivé l'accés public en écriture.
jojo
Utilisateur

PowerShelleur Platinum
Messages: 187
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 17/02/11 20:39 Hello

bilbao écrit:

Cependant je ne pense pas que Powershell soit la meilleur solution, à mon avis il est plus sage d'utiliser les tâches planifiées, ou de passer par une autre méthode.


Ou plutôt une stratégie d'audit ou bien créer un évenement pour vérifier l'état du service..mais reste à savoir comment ?
  | | L'administrateur a désactivé l'accés public en écriture.
jojo
Utilisateur

PowerShelleur Platinum
Messages: 187
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 17/02/11 20:48 bilbao écrit:

tu sélectionne "On an Event", puis tu choisis custom tu remplis les champs de cette façon :
19:03


dans ma boite de selection je ne trouve pas, une option "On an Event"...le déclenchement par événement n'est pas implémenter ...j'ai un XP
  | | L'administrateur a désactivé l'accés public en écriture.
nightymen
Utilisateur

PowerShelleur Débutant
Messages: 5
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 18/02/11 11:45 Merci

J'ai colle ce script dans powershell et je l'ai execute avec comme test le service windows update que j'ai volontairement arreté dans la liste des services et voila ce que j'obtiens>donc je vois bien qu'il verifie le service chaque 5 sec mais en mettant la fenetre service en parallele le service est toujours a l'arret

PS C:UsersmlaurentDesktop> C:UsersmlaurentDesktopNew Text Document.ps1
Vérification du statut du service Windows update: 18/02/11 11:39:17
Vérification du statut du service Windows update: 18/02/11 11:39:22
Vérification du statut du service Windows update: 18/02/11 11:39:27
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Demarrage automatique d'un service - 18/02/11 13:41 Tu es sûr d'avoir correctement passé le nom du service aux différentes commandes ?

Le code fourni par bilbao utilise le Display Name, ce qui peut être confondu avec le nom du service. Je te propose ce script qui reprend le principe de bilbao en s'appuyant sur la propriété Name du service (son petit nom, généralement sans espace) :

Code:

  # watch-service.ps1 param ([String]$name, [int]$sleep 5) while($true) {  $service get-service $name  "{0} : le service {1} est '{2}'" -$(Get-Date -Format "dd/MM/yy HH:mm:ss"), $service.DisplayName$service.Status  if($service.Status -eq "Stopped") {Start-Service -name $name}  Start-Sleep -Seconds $sleep }



J'ai testé sur l'instance SQL Express qui tourne sur mon poste :

Code:

  PSwatch-service 'mssql$sqlexpress' 18/02/11 13:35:17 le service SQL Server (SQLEXPRESSest 'Running' 18/02/11 13:35:22 le service SQL Server (SQLEXPRESSest 'Running' 18/02/11 13:35:27 le service SQL Server (SQLEXPRESSest 'Stopped' 18/02/11 13:35:33 le service SQL Server (SQLEXPRESSest 'Running' 18/02/11 13:35:38 le service SQL Server (SQLEXPRESSest 'Running'



On peut noter à 13h35mn27s un arrêt du service, aussitôt détecté et réparé.
  | | L'administrateur a désactivé l'accés public en écriture.
bilbao
Utilisateur

PowerShelleur Platinum
Messages: 226
graphgraph
Karma: 18  
Re:Demarrage automatique d'un service - 18/02/11 17:19 J'ai volontairement utilisé DisplayName, cela me semblait plus parlant dans mon exemple que TlntSvr.

@Jojo j'ai proposé cette solution suivant mon intuition, du coup j'ai juste testé le principe sur ma machine Seven.
Je pense qu'il doit y avoir une autre façon de faire sous XP.
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Demarrage automatique d'un service - 21/02/11 13:20 @bilbao: ce que tu as proposé marche également sous XP, c'est l'OS que j'ai sur la machine où j'ai appliqué ta méthode pour écrire le petit script watch-service.
  | | L'administrateur a désactivé l'accés public en écriture.
nightymen
Utilisateur

PowerShelleur Débutant
Messages: 5
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 21/02/11 16:26 Merci pour toutes ces infos je l'ai testé et ca fonctionne a merveille mais maintenant j'ai crée un fichier .bat qui pointe vers mon powershell

powershell watchservice.ps1 mais il ne fonctionne pas
  | | L'administrateur a désactivé l'accés public en écriture.
Matthew BETTON
Utilisateur

PowerShelleur Platinum
Messages: 968
graphgraph
Karma: 60  
Re:Demarrage automatique d'un service - 21/02/11 18:05 Bonjour,

As tu essayé en précisant les chemins ?

Quelque chose du genre :

Code:

 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "[CheminCompletOuSeTrouveTonScript]\watchservice.ps1"



As tu également pensé à contrôler le niveau de sécurité pour l'exécution des scripts PowerShell ? (cf. Cmdlets Get-ExecutionPolicy / Set-ExcutionPolicy)

Sinon, quel est le message d'erreur qui s'affiche lorsque tu exécutes ton batch ?

@+

Matthew
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Demarrage automatique d'un service - 22/02/11 07:51 Il faut taper :

Code:

  powershell -file "c:\le chemin\complet vers\watchservice.ps1"



Cette syntaxe est valable pour lancer le script depuis un .cmd ou en tâche planifiée (dans ce cas-là, pas besoin d'utiliser un .cmd).

Si tu utilises PS 1.0, ce n'est pas -file mais -command il me semble.
  | | L'administrateur a désactivé l'accés public en écriture.
Matthew BETTON
Utilisateur

PowerShelleur Platinum
Messages: 968
graphgraph
Karma: 60  
Re:Demarrage automatique d'un service - 22/02/11 08:51 Cela fonctionne aussi sans le -file, mais il est effectivement préférable de le préciser...
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Demarrage automatique d'un service - 22/02/11 09:14 C'est ma foi vrai.
  | | L'administrateur a désactivé l'accés public en écriture.
nightymen
Utilisateur

PowerShelleur Débutant
Messages: 5
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 23/02/11 13:45 Perfect ca fonctionne mais bien sur plus on avance et plus ca se complique

j'ai cree une tache qui verifie un service mais maintenant je voudrais arreter un service en journee et le relancer en soiree et cela tous les jours

dois je utiliser la commande start-sleep

est ce que je dois creer un script pour le demarrage et un autre pour le lancement et creer 2 taches automatiques ou bien un seul script qui specifie l'heure de demarrage et de la fin.

Message édité par: nightymen, à: 23/02/11 13:46
  | | L'administrateur a désactivé l'accés public en écriture.
Matthew BETTON
Utilisateur

PowerShelleur Platinum
Messages: 968
graphgraph
Karma: 60  
Re:Demarrage automatique d'un service - 23/02/11 15:14 Je pense qu'il faut que tu planifies ces 2 actions via le planificateur de tâches => 2 scripts.... ou 1 seul auquel tu passeras en arguments le nom du service et l'action souhaitée (arrêt / démarrage). Mais de toute façon 2 tâches planifiées.

==============

J'espère être clair. Si ce n'est pas le cas, n'hésite pas à nous relancer. D'autres personnes peuvent répondre : je n'ai pas la science infuse et il existe souvent plusieurs solutions

Message édité par: Matthew BETTON, à: 23/02/11 19:51
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1106
graphgraph
Karma: 37  
Re:Demarrage automatique d'un service - 23/02/11 23:17 Bonsoir,

Je vous propose une autre solution basée sur la surveillance d'évènements WMI. Cette solution a l'avantage de déléguer au système la surveillance; ainsi ça devrait consommer moins de ressource CPU qu'une boucle infinie.

Voici le code :
Code:

  $serviceName 'Audiosrv' $query "Select * From __InstanceOperationEvent           within 3            Where TargetInstance ISA 'Win32_service'           AND TargetInstance.Name='$serviceName'"  $action =  {     if ( (Get-Service $serviceName).Status -ne 'running' )     {         Write-Warning "Démarrage du service $serviceName"         Start-Service $serviceName     } } Register-WMIEvent -query $query -sourceIdentifier "ArretService" –action $action



J'ai fait un test sur mon Windows Server 2008 R2 avec le service AudioSrv et ça fonctionne parfaitement bien.
Lorsque j'arrête le service, celui-ci est détecté dans les 3 secondes par WMI et exécute le bloc de code PowerShell présent dans $action.

Exemple :

Code:

  PS Stop-Service -name audiosrv PS AVERTISSEMENT Démarrage du service Audiosrv PS Get-Service -name audiosrv Status   Name               DisplayName ------   ----               ----------- Running  audiosrv           Windows Audio



Ce script est à exécuter au démarrage de ton serveur une fois pour toutes, et tu es tranquille. L'idéal est de le faire démarrer par une tâche planifiée (qui démarre en même temps que le système).

En espèrant que ça fasse avancer ton business...

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Matthew BETTON
Utilisateur

PowerShelleur Platinum
Messages: 968
graphgraph
Karma: 60  
Re:Demarrage automatique d'un service - 24/02/11 13:04 Super intéressant

Merci !

  | | L'administrateur a désactivé l'accés public en écriture.
Richard Lazaro
Utilisateur

PowerShelleur Platinum
Messages: 530
graphgraph
Karma: 33  
Re:Demarrage automatique d'un service - 24/02/11 13:25 par contre, dans les cas comme ça une fenêtre powershell doit rester ouverte non ? Think-MS : (Get-Life).Days | %{ Learn-More }

"Problems cannot be solved by the same level of thinking that created them." - Albert Einstein
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1106
graphgraph
Karma: 37  
Re:Demarrage automatique d'un service - 25/02/11 13:57 Oui tout à fait. Il faut laisser le processus PowerShell tourner en arrière plan sur le système pour que ça fonctionne.

Si ça démarre en tant que tâche planifiée avec un compte donné; il n'y a pas de retour d'info sur la console mais le processus Powershell reste lancé.

Arnaud

Message édité par: Arnaud, à: 25/02/11 14:12
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
jojo
Utilisateur

PowerShelleur Platinum
Messages: 187
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 26/02/11 09:53 Bonjour

Arnaud
: si tu permets j'ai quelques questions concernant ton script:
*
Code:

 "Select * From __InstanceOperationEvent



pourquoi avoir choisi la classe __InstanceOperationEvent
parmi ceux-ci:

Code:

 PS>gwmi -List _*event*



*
Code:

   within 3 


pourquoi le 3

*
Code:

 Where TargetInstance ISA



es-ce qu'il y a d'autre options comme ISA

*
Code:

 TargetInstance.Name



le paramètre .Name est un argument de TargetInstance ou de la classe Win32_service

*
comment faire tourner PS en tâche de fond ?


merci

Message édité par: jojo, à: 26/02/11 09:58
  | | L'administrateur a désactivé l'accés public en écriture.
Olivier
Utilisateur

PowerShelleur Platinum
Messages: 174
graphgraph
Karma: 6  
Re:Demarrage automatique d'un service - 11/03/11 17:39 Bonjour à tous !

En complément et certainement utile pour d'autres applications ...

Une méthode PowerShell "Simple" pour changer le mode de démarrage d'un service :
Code:

 Get-Service spooler Set-Service -StartupType Automatic



Une méthode "WMI" pour changer le mode de démarrage d'un service :
Code:

 ([wmi]'Win32_Service.Name="Spooler"').ChangeStartMode('Automatic').ReturnValue ([wmi]'Win32_Service.Name="Spooler"').ChangeStartMode('Manual').ReturnValue 



S'informer du mode de démarrage d'un service, méthode "PowerShell":
Code:

 Get-WMIObject Win32_Service Select-Object NameStartMode



S'informer du mode de démarrage d'un service, méthode "WMI" :
Code:

 ([wmi]'Win32_Service.Name="Spooler"').StartMode



Tout de bon et à +

Olivier D.
Virtual Business Card
Profile Linkedin
  | | L'administrateur a désactivé l'accés public en écriture.
boubouche
Utilisateur

PowerShelleur Débutant
Messages: 3
graphgraph
Karma: 0  
Re:Demarrage automatique d'un service - 13/04/11 22:52 Bonjour à tous
J'ai une solution plus simple sans faire de script powershell
Il suffit de modifier les propriétes du service windows recalcitrant.
Dans l'onglet Récupération, il est possible de redémarrer le service après une ou plusiers défaillances.
Il y a même la possibilité d'excécuter un programe ou script sur défaillance, pour l'envoi d'un mail d'alerte cela peut être intéressant.
@+
  | | L'administrateur a désactivé l'accés public en écriture.
Olivier
Utilisateur

PowerShelleur Platinum
Messages: 174
graphgraph
Karma: 6  
Re:Demarrage automatique d'un service - 13/04/11 23:57 Bonjour boubouche

Il est clair que sur un PC seul, il sera plus facile de le faire à la main mais essaie de le faire sur un parc de quelques centaines de PC pour une application tierse ...

C'est tout là l'avantage et la necessité du scripting ... (ou GPO )

Bonne continuation

Olivier D.
Virtual Business Card
Profile Linkedin

Message édité par: Olivier, à: 14/04/11 09:03
  | | L'administrateur a désactivé l'accés public en écriture.
<< Début < Précédente 1 2 Suivante > Fin >>
© 2017 PowerShell-Scripting.com