Monday, September 12, 2011

3 Awesome Things You Can Do With Windows Scripting

3 Awesome Things You Can Do With Windows Scripting:

Whether you work in the IT field, as a web designer, or if you are just a student or regular office worker, Windows Scripting has something to offer you. Of course Applescript does as well, but my focus in this case is on Windows. When I refer to Windows Scripting, I’m referring to text files filled with code that are saved as .wsf files, which Windows is able to compile and run on the fly.

Almost a year ago now, I wrote an introduction to Windows Scripting which showed how much more powerful a .wsf script can be than the older style batch jobs that IT professionals have been scripting and running for years. WSF gives you the power of a structured language like Visual Basic. By default, you can create a VBScript or JScript WSF file on Windows and it will run just fine.

Beyond that introductory article, today I wanted to offer three typical tools that people often use in both a professional IT environment as well as at home. Those three tools include reading input from a text file, pinging various devices on your network, and sending email via script.

The Power Of Scripting

What learning each of these smaller components will do is allow you to combine them into a larger, automated script. I’m going to step through small script samples that you can put together into a very cool automated script. What that script will do is take an input IP list from a text file, ping each of those devices, and then send an alert email if any of those devices are down.

Reading Input Files

The first step in this process is learning how to read and process information from an input text file. In this case, I’ve created a text file called IPlist.ini that resides in the same directory as the script. This file contains a list of all of the IP addresses I want to check. You can read in each line of a text file using the following script.

<job>
<script language="VBScript">
Option Explicit
On Error Resume Next

Dim strHost
Dim strCommand
Dim ReturnCode
Dim strLine
Dim oFSO, sFile, oFile, sText

Set Shell = wscript.createObject("wscript.shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sFile = "c:\users\owner\scripts\IPlist.ini"
If oFSO.FileExists(sFile) Then
Set oFile = oFSO.OpenTextFile(sFile, 1)
Do While Not oFile.AtEndOfStream
sText = oFile.ReadLine
If Trim(sText) <> "" Then
strCommand = sText
wscript.echo "IP Address is: " & sText
End If
Loop
oFile.Close

Else
WScript.Echo "The file was not there."
End If
WScript.Quit
</script>
</job>

What this code does is use the Windows file system object to open a file, and then reads one line of text at a time until it reaches the end of the file.

Pinging A Host

Now that you know how to read each IP address out of the text file, how do you go about performing a Ping withing Windows Scripting?

Pinging is a bit more complicated than reading in a text file, because you have to make use of Windows Management Instrumentation scripting (WMI). Here’s what it looks like.

<job>
<script language="VBScript">
Option Explicit
On Error Resume Next

Dim colPingResults, objPingResult, strQuery
Dim strIPtext
strIPtext = "192.168.1.105"

' WMI query
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & strIPtext & "'"

Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

' Translate query results

For Each objPingResult In colPingResults
If Not IsObject( objPingResult ) Then
Ping = False
wscript.echo strIPtext & " is not pingable"
ElseIf objPingResult.StatusCode = 0 Then
Ping = True
wscript.echo strIPtext & " is pingable"
Else
Ping = False
wscript.echo strIPtext & " is not pingable"
End If
Next
Set colPingResults = Nothing
WScript.Quit
</script>
</job>

See how easy that was? When I run it, it provides a pop-up for whether the IP was pingable or not.

In this script, I’ve only pinged a single IP address, but all you have to do is embed that ping into the previous script after each IP address is read in from the text file, and you can ping each IP address in your list.

Sending An Email

Finally, while it’s nice to have a script that you can run that will check IP addresses and pop-up a window if there are any errors, wouldn’t it be nice to run the script daily, or multiple times a day and have it automatically email with problems?

To do that, you need to know how to send an email within script. If you research online, you’ll discover dozens (or more) ways people accomplish this. By far, the most popular is using the CDO approach.

<job>
<script language="VBScript">
Option Explicit
On Error Resume Next

Const fromEmail = "rdxxxx@gmail.com"
Const password = "xxxxxxxx"

Dim emailObj, emailConfig
Set emailObj = CreateObject("CDO.Message")
emailObj.From = alert@topsecretwriters.com
emailObj.To = "rdxxxxx@gmail.com"
emailObj.Subject = "Test Email"
emailObj.TextBody = "It Works!!"

Set emailConfig = emailObj.Configuration
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = fromEmail
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = password
emailConfig.Fields.Update
emailObj.Send
Set emailobj = nothing
Set emailConfig = nothing
WScript.Quit

</script>
</job>

The above script will let you send any text for the message body as an email to any address using your Gmail credentials. You could modify the parameters to use any other SMTP mail server you like.

Now all you have to do is put those three pieces of code together. When you do so, the script will read in each list of IP addresses, ping each one, and then send that string as the message body to a notification email. Here’s what that email will look like.

As you can imagine, this becomes pretty useful in the IT world, where you have an endless list of devices and servers to keep an eye on, and only 24 hours in the day. Any time you can have automated scripts that can check things for you, do it.

Give these Windows Scripts a try and see if it helps you optimize your work and make things more efficient. Do you know of any other cool things you can do with Windows Scripting? Share your thoughts in the comments section below.

Image credit: Mario Alberto Magallanes Trejo



No comments:

Post a Comment

[Please do not advertise, or post irrelevant links. Thank you for your cooperation.]