Friday, June 15, 2007

Windows Scripting: Adding/removing network printers and drives

While I normally make posts related to web development, I may occasionally post something that isn't used in web development, but still has some kind of relationship (normally the underlying technology used) - for example: VBScript - Set Homepage (MSIE) / Add Notepad to Send To.

In this case, it is VB Scripting and is an example of how to perform several common tasks (related to printers and drives) that network/server administrators may want to do, through a simple script (could be via login script, or executed directly on the client) rather than using the Windows GUI. It also demonstrates how to do basic error handling. Just take the following code (tweak as needed) and paste it in a script file (e.g. login.vbs). Only been tested in Windows XP (for Windows 98, you have to also define the driver name as a second parameter for AddWindowsPrinterConnection, it should work as is in Windows 2000).

Option Explicit
Dim WSHNetwork 
Dim WSHShell

On Error Resume Next

Set WSHNetwork = CreateObject("WScript.Network")
Set WSHShell = CreateObject("WScript.Shell")

rem Add a printer
WSHNetwork.AddWindowsPrinterConnection "\\HOSTNAME\PrinterShareName"
HandleError "Could Not Add Printer"

rem Set this as the default printer
WSHNetwork.SetDefaultPrinter "\\HOSTNAME\PrinterShareName"
HandleError "Could Not Set As Default Printer"

rem Remove an existing printer
WSHNetwork.RemovePrinterConnection "\\HOSTNAME\RemovePrinterShareName"
HandleError "Could Not Remove Printer / Printer Already Removed"

rem Map a drive
WSHNetwork.MapNetworkDrive "L:", "\\HOSTNAME\ShareName"
HandleError "Could Not Map Drive"

rem Remove a drive
WSHNetwork.RemoveNetworkDrive "M:"
HandleError "Could Not Remove Mapped Drive"


Function HandleError(Title)
 If Err.Number <> 0 Then
  rem Add to event log. First parameter can be:
  rem 0 (SUCCESS), 1 (ERROR), 2 (WARNING)
  rem 4 (INFORMATION), 8 (AUDIT_SUCCESS), 16 (AUDIT_FAILURE)
  WSHShell.LogEvent 1, "Error: " & Title & Chr(13) & "Error Number: " & Err.Number & Chr(13) _
   & "Description: " & Err.Description
  Err.Clear
 End If
End Function

You can call this from a batch file (e.g. login.cmd)

@echo off
set wsh=no
rem Loop through folders in path and check if cscript.exe exists
for %%p in (%path%) do if exist %%p\cscript.exe set wsh=yes
if %wsh%==no goto wshno
:wshyes
cscript login.vbs
goto finally
:wshno
echo Windows Scripting Not Installed
:finally
rem script has finished

Tuesday, June 05, 2007

Link: HTML Entity Character Lookup

HTML Entity Character Lookup is a useful web based tool for looking up HTML entities codes for characters that you have an idea what they look like (e.g. a 'c'), but not sure what the entity code (e.g &copy; for ©) to use is.