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