Home All Groups Group Topic Archive Search About

WOL Laptop clients SMS 2003 VBScript - a script to help manage laptops with WOL for SMS.



Author
15 Mar 2007 6:16 PM
CPL
Original source taken Rob Kuehfus from then mutlitlated a bit to run
on Windows 2003 as a schedueled background task for SMS 2003 to wake
up the Laptop clients.  I've changed the product to wolcmd.exe as
wol.exe was a little buggy.  Sorry about the header btw, if someone is
looking in google groups those are the keywords that I would use.

The original vbs prompted for a csv file to be loaded up.  In this one
the csv file is called servermacs.csv and is located in c:\wol\.
It'll drop a log in there as well called servermacs.log.

The contents of the csv look like this:

====start
Server1,00:08:02:47:47:13,172.31.168.2
Server2,00:08:02:47:47:14,172.31.168.3
Server3,00:08:02:47:47:15,172.31.168.4
Server4,00:08:02:47:47:16,172.31.168.5
====end

The script that send the wol magic packet, then pings 60 seconds later
to make sure it's up, sleeps for ten minutes, send the magic packet
again.  Do it 12 times.  The Success of the WOL and the ping are
created and recorded in the log for post auditing (aka C.Y.A.)

Why?  We had client laptops going to sleep on us during larger patch
and app deployments with SMS and I work for a cheap organization.
Therefore beg, borrow and steal a solution to make it go (Jordy!).

Hopefully this help saves someone some grief with laptops and SMS.

Cheers!

====Start of Script
'==========================================================================
'March 9th, 2007
'
'v0.4
'Added in ping test to check the availability of the server in
question
'the log the results in the servermacs.log
'
'and
'
'Added sleep for 10 minutes before doing the loop again
'
'and
'
'Using wolcmd.exe instead
'
'v0.3
'
'Pulled the user dialogue stuff as XP SP2 is nerfed security wise and
doesn't allow for
'user actions through ActiveX control mechanisms.
'
'v0.2
'Next step put in a ten minute sleeping loop to run magic packets for
2 hours,
'
'
'v0.1
'Prompts for the MAC address *.csv file, imports it and runs it.
'
'  Format of the csv file must follow example:
'
'   eg. Server1,00:08:02:47:47:13,172.31.168.2
'       Server2,00:08:02:47:47:14,172.31.168.3
'      Server3,00:08:02:47:47:15,172.31.168.4
'    Server4,00:08:02:47:47:16,172.31.168.5
'
'
'  All of the source, wol.exe, logs and csv files are contained in
'  c:\wol\wol.exe
'
'  wolcmd.exe can be found at http://www.depicus.com
'
'==========================================================================
Option Explicit
Dim CSVFile, LogFile, objFSO, ObjLog, objCSV, strServerInfo,
arrServerInfo, strWOLMAC
Dim strMac, oShell, objDialog, objPath
DIM engine

'
'  The loop counts backwards from 12
'  and executes the subs
'
For engine = 12 To 1 Step -1
    WOLProcess
    Checkifalive
    Sleeptenminutes
Next



Sub WOLProcess()

Const ForReading = 1
LogFile = "C:\wol\servermacs.log"
CSVFile = "c:\wol\servermacs.csv"
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Create Log file
Set objLog = objFSO.createTextFile(LogFile, ForWriting)
objLog.WriteLine "beginning process " & Now

Set objCSV = objFSO.OpenTextFile(CSVFile, ForReading)
Do Until objCSV.AtEndOfStream
       strServerInfo = objCSV.Readline
    arrServerInfo = Split(strServerInfo,",",-1)
    WScript.Echo "Server Name: " & arrServerInfo(0)
    WScript.Echo "Mac Address: " & arrServerInfo(1)
    WScript.Echo "IP Address: " & arrServerInfo(2)

    strMac = arrServerInfo(1)

    strWOLMAC = Replace(strMac, ":", "")
    WScript.Echo "WOL Mac: " & strWOLMAC

    Set oShell = WScript.CreateObject ("WSCript.shell")
    ReturnCode = oShell.run("c:\wol\wolcmd.exe " & strWOLMAC)
    WScript.Echo ReturnCode
    ' write to log file
    If ReturnCode > 0 Then
        ObjLog.WriteLine "Wake on Lan Failed on Server: " &
arrServerInfo(0) & " at Mac Address " & arrServerInfo(1)
    Else
        ObjLog.WriteLine "Wake on Lan Signal sent to Server: " &
arrServerInfo(0) & " at Mac Address " & arrServerInfo(1)
    End If

Loop

objLog.WriteLine "Process completed at " & Now
objLog.Close
End Sub

'
'    Ping in 60 seconds and write to the log if
'    alive
'
Sub Checkifalive()

wscript.sleep 60000
Const ForReading = 1
LogFile = "C:\wol\servermacs.log"
CSVFile = "c:\wol\servermacs.csv"
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Create Log file
Set objLog = objFSO.createTextFile(LogFile, ForWriting)
objLog.WriteLine "beginning process " & Now

Set objCSV = objFSO.OpenTextFile(CSVFile, ForReading)
Do Until objCSV.AtEndOfStream
       strServerInfo = objCSV.Readline
    arrServerInfo = Split(strServerInfo,",",-1)
    WScript.Echo "Server Name: " & arrServerInfo(0)
    WScript.Echo "Mac Address: " & arrServerInfo(1)
    WScript.Echo "IP Address: " & arrServerInfo(2)

    strPING = arrServerInfo(2)
    WScript.Echo "Ping IP: " & strPING

    Set oShell = WScript.CreateObject ("WSCript.shell")
    ReturnCode = oShell.run("ping.exe " & strPING)
    WScript.Echo ReturnCode
    ' write to log file
    If ReturnCode > 0 Then
        ObjLog.WriteLine "Wake on Lan Failed on Server: " &
arrServerInfo(0) & " at IP Address " & arrServerInfo(2)
    Else
        ObjLog.WriteLine "Wake on Lan Signal sent to Server: " &
arrServerInfo(0) & " at IP Address " & arrServerInfo(2)
    End If

Loop

End Sub

Sub Sleeptenminutes()

wscript.sleep 600000

End Sub
====End Script

AddThis Social Bookmark Button