Mise en route automatique d'un check disk sur une masse de pc xp pro

Contenu du snippet

Ce script permet d'automatiquement faire un check disk sur une masse de pc.
En détail :
1) lis un fichier au format .txt contenant les noms de pc
2) fait un ping afin de vérifier si le pc est online (si pas online, crée un log sur un serveur)
3) inscris dans la registry la fonction permettant un chkdsk /f au reboot
4) vérifie via WMI si un utilisateur est connecté sur le pc
4a) si oui, création d'un log sur la station distante
4b) si non, création d'un log sur la station distante et force un reboot

Source / Exemple :


'****************************************************************************************************************
'**                                                                                                            **
'** Script pour activer à distance le Check Disk. Nécessite des droits administrateur dans le domaine concerné **
'**                                                                                                            **
'**                                         Auteur : OM 24/11/2006                                             **
'****************************************************************************************************************

'Déclaration de variables.

Dim oFSO
Dim TS
Dim strComputer
Dim objShell
Dim oFile
Dim uidShell
Dim objWMIService
Dim objComputer
Dim colComputer
Dim objFileSystem
Dim objOutputFile
Dim strOutputFile
On Error Resume Next
Const ForReading = 1
set uidShell = WScript.CreateObject("WScript.Shell")

'Lecture des noms de pc dans le fichier C:\computerlist.txt. A adapter selon vos besoins

Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set TS = oFSO.OpenTextFile ("C:\computerlist.txt", ForReading) ' mettre le chemin et le nom de fichier içi
Do While Not TS.AtEndOfStream
strComputer = Trim(TS.ReadLine)

'Vérification si le pc distant est connecté au réseau.

blnPing = PingHost
If blnPing = True Then

'Ecriture dans la registry du pc distant afin d'effectuer un chkdsk au prochain redémarrage.

uidShell.run "reg add " & chr(34) & "\\" & strComputer & "\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" & chr(34) & " /v BootExecute /t REG_MULTI_SZ /d " & chr(34) & "autocheck autochk /r \??\C:" & chr(34) & " /f"

'Vérifie si une personne est connectée sur le pc distant.

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colComputer = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer 
If not objComputer.UserName = "" Then 

'Un utilisateur est connecté sur le pc distant.
'Création du fichier chkdsk.log au pc distant sur C:\DGPE\LOG et ne force pas le redémarrage du pc.

strOutputFile = "\\" & strComputer & "\c$\répertoire-ou-créer-un-log\log\chkdsk.log"
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
objOutputFile.WriteLine("Registry updated for doing a CHKDSK. User logged in, no reboot (" & Now & ")")
objOutputFile.Close
Set objFileSystem = Nothing
Else

'Aucun utilisateur connecté sur le pc distant.
'Création du fichier chkdsk.log au pc distant sur C:\LOG et force le redémarrage du pc.
'Nécessite que le fichier shutdown.exe soit présent sur le pc où ce script est effectué.

strOutputFile = "\\" & strComputer & "\c$\répertoire-ou-créer-un-log\log\chkdsk.log"
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
objOutputFile.WriteLine("Registry updated for doing a CHKDSK, PC rebooted (" & Now & ")")
objOutputFile.Close
Set objFileSystem = Nothing
uidShell.run "C:\shutdown \\" & strComputer & " /R /T:01 /C"
End If 
Next

'Information visuelle que ce script a terminé son action

If TS.AtEndOfStream = True Then
     MsgBox "Script finished",vbOk,"Remote CHKDSK"
End if

'Si un ordinateur distant n'est pas joignable,
'création d'un fichier texte indiquant l'impossibilité de faire le travail.
'Ce fichier aura le nom du pc point txt et sera disponible sur \\serveur-distant\public$ répertoire

Else
strOutputFile = "\\presluxstpmri01\public$\" & strComputer & ".txt"
Set objFileSystem = CreateObject("Scripting.fileSystemObject")
Set objOutputFile = objFileSystem.CreateTextFile(strOutputFile, TRUE)
objOutputFile.WriteLine("Computer not connected on the network, nothing done (" & Now & ")")
objOutputFile.Close
Set objFileSystem = Nothing
End If

Loop

'Fonction permettant de faire un PING du pc distant

Function PingHost
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping " & strComputer)
strPingResults = LCase(objExec.StdOut.ReadAll)
If InStr(strPingResults, "reply from") Then
  PingHost = True
Else
  PingHost = False
End If

End Function

Conclusion :


J'ai commenté le code pour qu'il soit clair. Si il ne vous semble pas conpréhensif, contactez moi.

BelgiumWaffel

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.