' ---------------------------------------------------------- ' Script d'arrêt ou démarrage de services ' sur machine locale ou distante ' ' Syntaxe : ' setsvc [-m] [-s] [-e<état>] [-u] [-p : nom NetBIOS (si vide => machine locale) ' : nom du service (entre guillemets) ' <état> : START|STOP (si vide :affiche l'état actuel) ' : compte utilisateur (devant avoir les droits nécessaires) ' : mot de passe du compte ' ' JC BELLAMY © 2003 ' ---------------------------------------------------------- Dim net, shell, user, computer, args, ServiceSet, Service Set net = Wscript.CreateObject("WScript.Network") Set shell = WScript.CreateObject("WScript.Shell") Set args = Wscript.Arguments nbargs=args.count If testarg("?") or testarg("h") Then msg=VBCRLF & "Script d'arrêt ou démarrage de services" & VBCRLF msg=msg & "sur machine locale ou distante" & VBCRLF msg=msg & "JCB © 2002" & VBCRLF msg=msg & "------------------------------" & VBCRLF msg=msg & "Syntaxe :" & VBCRLF msg=msg & " setsvc [-m] [-s] [-e<état>] [-u] [-p]" & VBCRLF msg=msg & " : nom NetBIOS (si vide : machine locale)" & VBCRLF msg=msg & " : nom du service (si vide : liste de tous les services)" & VBCRLF msg=msg & " <état> : START|STOP (si vide : affiche l'état actuel)" & VBCRLF msg=msg & " : compte utilisateur (devant avoir les droits nécessaires)" & VBCRLF msg=msg & " : mot de passe du compte" & VBCRLF msg=msg & "NB: " & VBCRLF msg=msg & " - minuscules/majuscules indifférent" & VBCRLF msg=msg & " - le nom du service doit être entre guillemets s'il comporte des espaces" & VBCRLF msg=msg & " - caractère commutateur ""-"" ou ""/""" & VBCRLF msg=msg & " - un compte utilisateur ne concerne que des connexions distantes" & VBCRLF msg=msg & " S'il est omis, on prend le compte local en cours" & VBCRLF msg=msg & "Exemples :" & VBCRLF msg=msg & " setsvc" & VBCRLF msg=msg & " setsvc -mSPRINGFIELD -sTelnet -eStart" & VBCRLF msg=msg & " setsvc -mKHOROGHO /s""Service SNMP"" -uHOMER -pDohhhh!" & VBCRLF msg=msg & " setsvc /mBINGERVILLE /s""Service d'indexation"" /eStop" & VBCRLF & VBCRLF wscript.echo msg Wscript.quit End If On error resume next computer=net.ComputerName If testarg("m") Then Remote=getarg("m") Else Remote=net.ComputerName End If Remote=ucase(remote) Set objLocator = CreateObject("WbemScripting.SWbemLocator") If Err.Number then Wscript.Echo( "Erreur 0x" & CStr(Hex(Err.Number)) & _ " survenue dans la création de l'objet locator." ) If Err.Description <> "" Then Wscript.Echo( "Description: " & Err.Description & "." ) Err.Clear wscript.quit End If UserName="" Password="" If Remote<>net.ComputerName and testarg("u") Then UserName=getarg("u") If testarg("p") Then Password=getarg("p") End If NameSpace="root\CIMV2" Set ObjService = objLocator.ConnectServer(Remote, NameSpace, UserName, Password) If Err.Number then msg="Erreur 0x" & CStr(Hex(Err.Number)) & " survenue dans la connexion à " & remote If Err.Description <> "" Then msg=msg & " : " & Err.Description wscript.echo msg wscript.quit End If ObjService.Security_.impersonationlevel = 3 Set ServiceSet=ObjService.ExecQuery("SELECT * FROM Win32_service") If testarg("s") Then Svcname=getarg("s") for each Service in ServiceSet If lcase(Service.DisplayName)=Svcname Then oldstate=getstate(Service.started) WScript.Echo "Service """ & Svcname & """ sur " & Remote & " : " & oldstate If testarg("e") Then newstate=getarg("e") Select Case newstate Case "start" coderet=Service.StartService Select Case coderet Case 0 msg="La requête a été acceptée." Case 1 msg="La requête n'est pas prise en charge." Case 2 msg="L'utilisateur n'a pas l'accès nécessaire." Case 3 msg="Le service ne peut pas être arrêté car d'autres services " & VBCRLF & _ "qui sont en cours d'exécution en dépendent." Case 4 msg="Le code de contrôle requis n'est pas valide ou n'est pas " & VBCRLF & _ "acceptable pour le service." Case 5 msg="Le code de contrôle requis ne peut pas être envoyé au service" & VBCRLF & _ "parce que l'état du service (Win32_BaseService:State) est égal à 0, 1 ou 2." Case 6 msg="Le service n'a pas été démarré." Case 7 msg="Le service n'a pas répondu à la demande de démarrage dans" & VBCRLF & _ "les temps impartis." Case 8 msg="Échec inconnu lors du démarrage du service." Case 9 msg="Le chemin d'accès au répertoire à l'exécutable du service" & VBCRLF & _ "n'a pas été trouvé." Case 10 msg="Le service est déjà en cours d'exécution." Case 11 msg="La base de données sur laquelle ajouter un nouveau service est bloquée." Case 12 msg="Une dépendance sur laquelle compte ce service a été supprimée du système." Case 13 msg="Le service n'a pas pu trouver le service nécessaire à partir" & VBCRLF & _ "d'un service dépendant." Case 14 msg="Le service a été désactivé du système." Case 15 msg="Le service n'a pas l'authentification correcte pour " & VBCRLF & _ "fonctionner sur le système." Case 16 msg="Ce service est en cours de suppression du système." Case 17 msg="Il n'y a pas de thread d'exécution pour le service." Case 18 msg="Il y a des dépendances circulaires lors du démarrage du service." Case 19 msg="Il y a un service en cours de fonctionnement sous le même nom." Case 20 msg="Il y a des caractères non valides dans le nom du service." Case 21 msg="Des paramètres non valides ont été passés au service." Case 22 msg="le compte sous lequel ce service doit fonctionner est soit invalide" & VBCRLF & _ "ou n'a pas les permissions pour faire fonctionner le service." Case 23 msg="Le service existe dans la base de données des services disponibles" & VBCRLF & _ "à partir du système." Case 24 msg="Le service est pour l'instant suspendu dans le système." Case else msg="Erreur inconnue" End Select Wscript.echo msg Case "stop" coderet=Service.StopService Select Case coderet Case 0 msg="Le service a été arrêté correctement." Case 1 msg="La requête n'est pas prise en charge." Case else msg="Erreur inconnue" End Select Wscript.echo msg Case else WScript.Echo End Select end if Wscript.quit end if next Wscript.echo "Service """ & Svcname & """ sur " & Remote & " non trouvé" Else Wscript.echo "Liste des services de la machine " & Remote StartedList="" StoppedList="" nStarted=0 nStopped=0 for each Service in ServiceSet If Service.started Then nStarted=nStarted+1 StartedList=StartedList & VBCRLF & FormatStrR(nStarted,3) & " " & Service.DisplayName Else nStopped=nStopped+1 StoppedList=StoppedList & VBCRLF & FormatStrR(nStopped,3) & " " & Service.DisplayName End If Next PrintList nStarted,"démarrés",StartedList PrintList nStopped,"arrêtés ",StoppedList End If Wscript.quit '-------------------------------------------------------------------- Function testarg(param) testarg=false For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then testarg=true exit function End If End If Next End Function '-------------------------------------------------------------------- Function getarg(param) getarg="" For i = 0 To nbargs-1 curarg=lcase(args(i)) If left(curarg,1)="/" or left(curarg,1)="-" Then If mid(curarg,2,len(param))=param Then getarg=mid(curarg,2+len(param)) exit function End If End If Next End Function '-------------------------------------------------------------------- Function getstate(param) If param Then etat="démarré" else etat="arrêté" end if getstate=etat End Function '-------------------------------------------------------------------- Function FormatStrR(ch,lmax) l=len(ch) If l