Station restée allumée ?

Pourquoi ?

Pendant les vacances, certains collègues, élèves, oublient d'éteindre leur PC. La consommation d'énergie, l'usure du matériel, le risque d'une coupure d'électricité qui provoquerai un arrêt brusque. Ce sont là les petits problème engendrés par ces oublis.

Attention : certains micros ont peut être été laissés allumés pour de bonnes raisons (calcul très long par exemple) !

On peut donc souhaiter éteindre tous ces PCs sans bouger de son ordinateur et puis cela nous permet de tester certaine techniques de script :


Principe :

On va procéder en deux temps :

1 - Recherche des machine restées allumées sur le réseau, résultat dans un fichier texte.
2 - Lecture du fichier généré et proposition d'éteindre le PC.

Pour faire l'inventaire des PCs allumés, on effectue un ping en recherchant la chaîne "octets=" qui confirme la réussite du ping

La liste des micros à tester est obtenue par recherche dans AD ce qui exclu bien sur tous les postes 9X et ceux en workgroup ou novell mais une autre liste peut être obtenue par le dns

Le fichier retourné se nomme : PCS.LST, si un fichier de ce nom existe déjà, il sera renommé en PCS.OLD et si PCS.OLD existe aussi, le script plante !


Améliorations prévues :

- Effacement de PCS.OLD avec confirmation.

- Recherche des infos du domaine automatiquement.


'-----------------------------------------------------------------------
' Recherche des micros allumés sur le réseau
' Liste des micros obtenues par AD
' Crée un fichier de sortie au format csv
' nom_micro;en marche !
' V 0.1 (14/04/06)
' pierre choffardet LPR Voillaume
'------------------------------------------------------------------------
Option Explicit

Const ADS_SCOPE_SUBTREE = 2
Const ForReading = 1, ForWriting = 2, ForAppending = 8
' Nom du domaine (en .local)
Const domain = "voillaume"

DIM objConnection, objCommand, objFSO, objRecordSet, objF
DIM sOrdi

' Fichier de sortie
Const sUnc="c:\PCS.LST"
' Ancien fichier de sortie
Const sUncOld = "C:\PCS.OLD"

Set objFSO = CreateObject("Scripting.FileSystemObject")
if objFSO.FileExists(sUnc) Then
objFSO.MoveFile sUnc, sUncOld
End IF
Set objF=objFSO.CreateTextFile(sUnc)
objF.Close

Set objF=objFSO.openTextFile(sUnc,ForWriting)

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location, Distinguishedname from 'LDAP://DC="&domain&",DC=local' Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
sOrdi = objRecordSet.Fields("Name").Value
IF ping(sOrdi)=0 Then
objF.WriteLine(sordi &"; En marche !")
End If
objRecordSet.MoveNext
Loop
objF.Close

Function ping(computer)
If computer= "" Then
ping = 1
Else
Dim PINGIT,WshShell
set WshShell = CreateObject ("Wscript.shell")
PINGIT="cmd /c ping.exe " & computer & " | find /I " & CHR(34) & "octets=" & CHR(34)
ping = WshShell.Run(PINGIT,1,True)
End If
End Function