This seems to work as well.
I bundled this in to a EXE with Wscript and RunAs using GCBundler (Google it) and stuck it in the startup folder.
when run it runs as a hidden process monitering for IP changes to the NIC (such as a NIC being leased an IP by a DHCP server over a VPN/RAS connection) and locates and runs the logon script.
I have added the whole script here, it is rather large, but the guy that did it needs recognition for it
-----------------------
'////////////////////////////////////////////////////////////////////
'/
'/ Name: vpnraslogonhook.vbs
'/ Author: Darwin Sanoy
'/ Updates:
'/ Bug Reports &
' Enhancement Req: Darwin@DesktopEngineer.com
'/
'/ Built/Tested On: Windows XP Beta 2
'/ Windows 2000, SP2
'/ Windows 95 OSR2, WMI 1.5, WSH 5.1
'/ Requires: OS: Any
'/ APIs: WMI
'/
'/ Main Function: Ensures that the logon script can run when computers
'/ connect to the network via VPN, RAS or dynamic IP
'/ configuration (plugging in after bootup - W2K and later)
'/
'/ Syntax: all variables configured in the script
'/
'/ Usage and Notes: See HTML documentation
'/
'/ Assumptions &
'/ Limitations: *) Blindly maps and unmaps drive to be used for logon script
'/
'/ Documentation:
'/
'/ License: GNU General Public License see "license.txt" or
'/
'/
'/ Version: 3.0
'/
'/ Revision History:
'/
'/ 09/18/03 - 3.0 Functionality:
'/ - allow script to check all connection objects upon startup - this should handle
'/ the case where folks authenticate using RAS - must use file/folder pre-emption
'/ check to prevent multiple logon script runs when logging on through a direct
'/ hardwire connection.
'/ - added utility script dumpconnections.vbs to help identify which IP addresses
'/ are changing when connecting with RAS, VPN, etc.
'/ Bug Fixes and Other Changes:
'/ - program would crash on cached DHCP information - ip address may have been an empty string
'/ - new setup program that creates shortcuts and has an uninstall add/remove programs item
'/ - structure changes and sample code segments to ease ability to customize
'/ - documentation enhanced with usage scenarios and dumpconnection.vbs information
'/ 03/21/02 - 2.9 Functionality:
'/ - preemption of logon script run based on file or folder existence
'/ - added some commented sample code to demo usage of multiple subnet lists
'/ Bug Fixes and Other Changes:
'/ - fixed bug with service startup that prevented services from starting
'/ - Additional trace logging for better problem diagnosis.
'/ - Code reorganization - easier to customize
'/ - Performance improvements
'/ 03/14/02 - 2.8 Functionality:
'/ - preemption of logon script run based on running processes - generally for detecting
'/ if a mail agent (such as mapis32.exe) triggered a dial-up session
'/ - addition of variable dump to the VERBOSEMSG tracing mode
'/ Bug Fixes and Other Changes:
'/ - Fix for failure of script upon deletion of a network connection
'/ - Fix for virtual devices that do not have IP addresses or have 0.0.0.0 addresses
'/ - removal of "runonce" support - did not behave as expected in specific situations
'/ 09/26/01 - 2.4 - Support for classless subnet address matching
'/ - Removed Win32_IP4RouteTable support due to classless subnet matching
'/ - Script now monitors __InstanceOperationEvent to capture all connection
'/ types with a single script
'/ - Selective service startup
'/ - Tracing / Error / Logging routine
'/ - Simplified script to use graceful failover of logon script failure
'/ 06/29/01 - 1.5 - Adapted to work with .BAT/.CMD logon scripts
'/ - Validates variable type of address to check
'/ - error reporting possible for not being able to execute the logon script
'/ - consolidated route and VPN/RAS/DYNAMIC script into one
'/ - added wait time for slow connection processes
'/ 06/13/01 - 1.2 - improved matching logic to only match beginning of IP
'/ address - suggested by Michael Niehaus (djs)
'/ 06/09/01 - 1.1 - inital version (djs)
'/
'////////////////////////////////////////////////////////////////////
'////////////////////////////////////////////////////////////////////
' Setup for Subnet Matching
'////////////////////////////////////////////////////////////////////
aSubnetList = Array("192.168.2.0/255.255.255.0")
' This is a list of the subnets that you wish to have the script check for matches.
' Place most frequent matches (including supernets) first in the list.
' The next line shows that the script could be customized to use multiple
' subnet lists. Perhaps you want a different logon script based on whether
' VPN, RAS or hardwire is being accessed. Or perhaps a different logon script
' based on which physical site (list of subnets) is being connected to.
' search for bSubnetMatch to see where this would be used later in the script.
'aSubnetListSecondarySample = Array("192.168.123.0/255.255.255.0")
bAllMatches = False
' If bAllMatches is set to true the SubnetMatch routine will search the entire
' list for every match. If it is set to false, the routine returns after the
' first match.
'//////////////////////////////////////////////////////////////////////
' Setup for Script Run behavior
'//////////////////////////////////////////////////////////////////////
sWaitTime = 1
'wait time in seconds - just in case complete connection takes a while after
'initial ip address detection occurs, do not set to blank.
'//////////////////////////////////////////////////////////////////////
' Setup for calling logon script from a drive letter
'//////////////////////////////////////////////////////////////////////
sLogonScriptShare = "\\Obiwan\netlogon"
sLogonScriptDrive = "Z:" 'no trailing slash!
sLogonScriptPath = "" 'no trailing or leading slash!
sLogonScriptName = "LOGIN.BAT" 'include extension!
' The above values govern connecting to the share to execute the logon script
' If the logon script can be executed exclusively using UNCs, these variables
' and the code that uses them can be simplified - see the documentation for
' details.
'//////////////////////////////////////////////////////////////////////
' Setup for Selective Service Startup
'//////////////////////////////////////////////////////////////////////
bStartServices = False
' This is set to true if the script should attempt to start the services in
' list aServiceStartList
aServiceStartList = Array("scheduler")
' An array holding each service that should be started upon a successful
' network connection
'//////////////////////////////////////////////////////////////////////
' Setup for Pre-empting if Mail Agent Triggered Connection
'//////////////////////////////////////////////////////////////////////
bPreemptIfProcessRunning = False
' This is set to true if the logon script should NOT be processed if
' a mail agent triggered this connection
bAllProcesses = False
' Determines whether all EXEs listed in the array aProcessRunningList
' must be running in order to preempt logon script execution.
aRunningProcessEXEList = Array("svchost.exe")
' An array holding the name of the running EXE to check for to determine
' whether the mail agent is running.
'//////////////////////////////////////////////////////////////////////
' Setup for Pre-empting if a file or folder exists
'//////////////////////////////////////////////////////////////////////
' Used to determine if logon script has already successfully run since
' the last matched connection event. This is primarily used to prevent
' unnecessary running of the logon script when network connections
' renew their configuration without a real configuration event.
' Some VPN adapters make changes to the configuration after the initial
' connection, causing the logon script to run again. IPCONFIG /renew
' will also cause this behavior.
' The paths used here should not be a UNC because a UNC will
' exist regardless of whether the logon script has run.
' if both values are set to "", no file/folder existence checking is performed.
sFilepath = ""
' file to check for existence - should not be a UNC path
' leave blank for no checking
sFolderpath = ""
' folder to check for existence - should not be a UNC path
' leave blank for no checking
bCheckOnFirstRun = True
' check if logon script needs to be run when vpnraslogon hook first starts
' this must be used in conjunction with above pre-empting when a file or
' folder exists or else your logon script will run two ore more times when
' users connect via ethernet. You logon script should also be set to run
' before the useris allowed access to the desktop if you are using the
' Startup group to trigger this script.
'//////////////////////////////////////////////////////////////////////
' Setup for Tracing, Logging and Error Reporting
'//////////////////////////////////////////////////////////////////////
' Constants for tracing routine. Can be used in TraceLevel and individual
' messages
Const VERBOSEMSG = 5
Const INFOMSG = 10
Const ERRORMSG = 30
Const NOMSG = 100
Dim FileSetup, oLogFileObject
' The above variables need to be global
sTraceLevel = INFOMSG
' Trace level can be set to any numeric value. It determines the threshold at
' which a message will be displayed. It can also be set by retrieving an
' environment variable (must customize this script) so that tracing can be
' controled without recompiling.
msgAction = "INTERACTIVE"
' msgAction has the following possible values:
' INTERACTIVE - all error and tracing messages are displayed interactively
' LOG - all error messages are logged to a file
' BOTH - all error messages are displayed and logged
' NONE - do not generate any messages - it is better to set sTraceLevel
' to 100 (or constant NOMSG)
sLogFileName = "vpnraslogonhook.log"
' Log file name to be used. If this is left blank a random log name is choosen.
' all log files are stored in the directory specified by the TMP variable
bLogFileOverwrite = True
' If set to false, the same log file is used repeatedly to give complete logging
' of every time this program runs. This setting only makes sense if you give
' a literal log name in sLogFileName - otherwise a random log file name is
' generated with each execution
Traceandlog VERBOSEMSG, "Trace Messaging Started at: ", Date & " " & Time
If sTraceLevel <= VERBOSEMSG Then
VariableDump
End If
'//////////////////////////////////////////////////////////////////////
' Main script code
'//////////////////////////////////////////////////////////////////////
Dim oShell : Set oShell = createobject("wscript.shell")
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
'If setup, check all existing connections when the script first starts (handle authentication through RAS)
If bCheckOnFirstRun Then
For each Config in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("Win32_NetworkAdapterConfiguration")
If VarType(Config.Ipaddress(0)) = 8 Then
If Config.Ipaddress(0) <> "0.0.0.0" and InStr(1,config.ipaddress(0),".",1) Then
ProcessConnection(Config)
Else
Traceandlog INFOMSG, "Zero IP Address", "Zero's or blank ip address - must have caught a connection in transition between states: " & Config.Caption
End If
Else
Traceandlog INFOMSG, "Invalid IP Address", "The connection does not have a valid ip address: " & Config.Caption
End If
Next
End If
'setup event monitoring
Set Events = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery ("SELECT TargetInstance.Name FROM __InstanceOperationEvent WITHIN 4 WHERE TargetInstance ISA 'Win32_NetworkAdapterConfiguration'")
Do
Set oConnectEvent = Events.nextevent
WScript.Sleep(1000 * sWaitTime)
Set ConnectObject = oConnectEvent.TargetInstance
If VarType(oConnectEvent.TargetInstance.Ipaddress(0)) = 8 Then
' this must be done as two if statements so that checking for "0.0.0.0" does not crash when there is no ipaddress (empty array)
If oConnectEvent.TargetInstance.Ipaddress(0) <> "0.0.0.0" and InStr(1,ConnectObject.Ipaddress(0), ".",1) Then
ProcessConnection(ConnectObject)
Else
Traceandlog INFOMSG, "Zero IP Address", "Zero's or blank ip address - must have caught a connection in transition between states: " & ConnectObject.Caption
End If
Else
Traceandlog INFOMSG, "ConnectionDeleteorNoIPAddress", "The connection event was a deletion or an invalid ip address was returned: " & ConnectObject.Caption
End If
Loop
Sub ProcessConnection(ConnectInstance)
'ConnectInstance is a collection of Win32_NetworkAdapterConfiguration Instances
'//////////////////////////////////////////////////////////////////////
' Check for subnet match
'//////////////////////////////////////////////////////////////////////
'[OVERALLPREEMPTIONLOGIC]
If SubnetMatch(aSubnetList, ConnectInstance.IPAddress(0), bAllMatches, aListofMatches) Then
Traceandlog INFOMSG, "Matching Subnet", "Matches: " & UBound(aListofMatches) + 1 & vbnewline & "First Match (for " _
& ConnectInstance.IPAddress(0) & ") :" & aListofMatches(0)
Else
'No match found
Traceandlog INFOMSG, "Checking Adapter Config", "No Match Found For: " & ConnectInstance.Caption & " with IP Address: " & ConnectInstance.IPAddress(0)
Exit Sub
End If
'//////////////////////////////////////////////////////////////////////
' INSERT Branching logic for logon script actions based on subnet and/or other connection attributes
'//////////////////////////////////////////////////////////////////////
'[BRANCHINGLOGIC]
' Please see the documentation for all the parameters that can be used here.
' Use dumpconnections.vbs (included with this script) to ensure that your criteria are valid.
' This example shows that we can only reliably detect our company logons by also checking the DNS domain of the connection. Maybe employees regularly
' connect to another network with the same private addressing scheme as your network and would need further refinement to be sure. This would likely be
' as the main check up above.
'If SubnetMatch(aSubnetListSecondarySample, ConnectInstance.IPAddress(0), bAllMatches, aListofMatches) and ConnectInstance.DNSDomain = "acme.com" Then
' Traceandlog INFOMSG, "Matching Subnet", "Matches: " & UBound(aListofMatches) + 1 & vbnewline & "First Match (for " _
' & ConnectInstance.IPAddress(0) & ") :" & aListofMatches(0)
'Else
' Exit Sub
'End If
'This example prevents processing of VMWare Virtual Adapters
'If SubnetMatch(aSubnetListSecondarySample, ConnectInstance.IPAddress(0), bAllMatches, aListofMatches) and ConnectInstance.ServiceName <> "VMnetAdapter" Then
' Traceandlog INFOMSG, "Matching Subnet", "Matches: " & UBound(aListofMatches) + 1 & vbnewline & "First Match (for " _
' & ConnectInstance.IPAddress(0) & ") :" & aListofMatches(0)
'Else
' Traceandlog INFOMSG, "Checking Adapter Config", "VMWare Adapter Skipped"
' Exit Sub
'End If
' The following shows that based on a subnet match AND a SPECIFIC DHCP server we can isolate all computers logging on in AsiaPacific
'If SubnetMatch(aSubnetListSecondarySample, ConnectInstance.IPAddress(0), bAllMatches, aListofMatches) and ConnectInstance.DHCPServer = "192.168.71.71" Then
' DO SOME STUFF FOR AsiaPacific Logons
'End If
' The following shows that based on a subnet match AND a DHCP server in a specific list
'If SubnetMatch(aSubnetListSecondarySample, ConnectInstance.IPAddress(0), bAllMatches, aListofMatches) and inStr(ConnectInstance.DHCPServer,"192.168.71.71|192.168.45.32|192.168.65.45" Then
' DO SOME STUFF FOR AsiaPacific Logons
'End If
'//////////////////////////////////////////////////////////////////////
' Check if file or folder exists to preempt (logon script has already run)
'//////////////////////////////////////////////////////////////////////
bPreemptObjectExists = False
If sFilepath <> "" or sFolderpath <> "" Then
bPreemptObjectExists = checkobjectexist(sFilepath, sFolderpath)
End If
If bPreemptObjectExists Then
Exit Sub
End If
'//////////////////////////////////////////////////////////////////////
' Check if process(es) are running to preempt (mail agent or other initiated connection)
'//////////////////////////////////////////////////////////////////////
iNumberProcessesRunning = 0
If bPreemptIfProcessRunning Then
bPreemptDueToRunningProcesses = CheckRunningProcesses(aRunningProcessEXEList, bAllProcesses)
End If
If bPreemptDueToRunningProcesses Then
Traceandlog INFOMSG, "Run Logon Script", "Preempting Due to one or more Identified Processes Running"
Exit Sub
End If
'//////////////////////////////////////////////////////////////////////
' Everything looks good - attempt the logon script
'//////////////////////////////////////////////////////////////////////
Set oNet = CreateObject("Wscript.Network")
Traceandlog INFOMSG, "Main Routine", "Attempting to execute: " & sLogonScriptDrive & "\" & sLogonScriptPath & "\" & sLogonScriptName
On Error Resume Next
oNet.RemoveNetworkDrive sLogonScriptdrive, True, True
Traceandlog INFOMSG, "Unmapping Drive", "Error 0x" & CStr(Hex(Err.Number)) & err.description
Err.clear
oNet.MapNetworkDrive sLogonScriptdrive, sLogonScriptShare
Traceandlog ERRORMSG, "Mapping Drive", "Error 0x" & CStr(Hex(Err.Number)) & err.description
Err.clear
RunCmd = oShell.Run(sLogonScriptDrive & "\" & sLogonScriptPath & "\" & sLogonScriptName, 1, True)
If err.number Then
'Error handling code goes here
'Script was not found, drive was not mapped or no security access
Traceandlog ERRORMSG, "Running Logon script", "Error 0x" & CStr(Hex(Err.Number)) & err.description
End If
Err.clear
oNet.RemoveNetworkDrive sLogonScriptdrive, True, True
Traceandlog INFOMSG, "Unmapping Drive (second time)", "Error 0x" & CStr(Hex(Err.Number)) & err.description
Err.clear
On Error GoTo 0
If bStartServices Then
If UBound(aServiceStartList) >= 0 Then
For each sServiceName in aServiceStartList
startservice sServiceName
Next
End If
End If
End Sub
Private Function SubnetMatch(aSubnetsToMatch, IPAddress, bAllMatches, aMatchList)
For each subnetpair in aSubnetsToMatch
pair = split(subnetpair, "/", 2)
subnetoctets = split(pair(1), ".", 4)
ipaddroctets = split(IPAddress, ".", 4)
If pair(0) = join(Array(ipaddroctets(0) and subnetoctets(0), ipaddroctets(1) and subnetoctets(1), _
ipaddroctets(2) and subnetoctets(2), ipaddroctets(3) and subnetoctets(3)),".") Then
SubnetMatch = True
If MatchList = "" Then
MatchList = MatchList & subnetpair
Else
MatchList = MatchList & ", " & subnetpair
End If
If not bAllMatches Then
aMatchList = Array(subnetpair)
Exit For
End If
End If
Next
If SubnetMatch Then
aMatchList = split(matchlist, ",")
End If
End Function
Private Function CheckObjectExist(sFileToCheck, sFolderToCheck)
Traceandlog INFOMSG, "CheckObjectExists", "Object Existence Checking Requested, check existence"
If (fso.FileExists(sFileToCheck)) Then
CheckObjectExist = True
Traceandlog INFOMSG, "FileExistCheck", sFileToCheck & " File Exists indicating logon script has already run, logon script will not run again"
Else
Traceandlog INFOMSG, "FileExistCheck", sFileToCheck & " File DOES NOT Exist"
End If
If (fso.FolderExists(sFolderToCheck)) Then
CheckObjectExist = True
Traceandlog INFOMSG, "FolderExistCheck", sFolderToCheck & " Folder Exists indicating logon script has already run, logon script will not run again"
Else
Traceandlog INFOMSG, "FolderExistCheck", sFolderToCheck & " DOES NOT Exist"
End If
End Function
Private Function CheckRunningProcesses(aRunningProcessEXEListf, bAllProcessesf)
If UBound(aRunningProcessEXEListf) >= 0 Then
Traceandlog INFOMSG, "Prempt If Process Running", "Preempting if process is running (bPreemptIfProcessRunning=True) is true, checking running process list"
For each sRunningProcessEXE in aRunningProcessEXEListf
Set objInstance = GetObject("winmgmts:\\.\root\cimv2").ExecQuery ("select * from win32_process where name = '" & sRunningProcessEXE & "'")
If objInstance.count > 0 Then
iNumberProcessesRunning = iNumberProcessesRunning + 1
Traceandlog INFOMSG, "Process Running", objInstance.count & " instances of " & sRunningProcessEXE & " Running"
End If
Next
End If
If bAllProcessesf = True Then
If iNumberProcessesRunning = UBound(aRunningProcessEXEListf) + 1 Then
CheckRunningProcesses = True
Traceandlog INFOMSG, "All Processes", "All Processes must be running to preempt (bAllProcesses=True) - ALL processes were running, logon script will preempt"
Else
Traceandlog INFOMSG, "All Processes", "All Processes must be running to preempt (bAllProcesses=True) - NOT ALL processes were running, logon script will run"
End If
Else
Traceandlog INFOMSG, "Any Process", "Any process can be running to preempt (bAllProcesses=False), checking if any were running"
If iNumberProcessesRunning > 0 Then
Traceandlog INFOMSG, "At Least One", "At least one process was running - logon script will preempt"
CheckRunningProcesses = True
Else
Traceandlog INFOMSG, "Any Processes", "At least one process must be running, but none were, logon script will run"
End If
End If
End Function
Sub startservice(strServiceName)
' Can be removed if no services will be started as part of this script
On Error Resume Next
Set objInstance = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_Service='" & strServiceName & "'")
If Err.Number Then
Traceandlog ERRORMSG, "Open Service Object", "Error 0x" & CStr(Hex(Err.Number)) & _
" occurred in getting service " & strServiceName & "."
Err.Clear
Exit Sub
End If
If objInstance is nothing Then
Exit Sub
Else
intStatus = objInstance.StartService()
If intStatus = 0 Then
Traceandlog INFOMSG, "Start Service", StrServiceName & " started service"
ElseIf intStatus = 10 Then
Traceandlog INFOMSG, "Start Service", StrServiceName & " Service Already Started"
ElseIf intStatus = 14 Then
Traceandlog INFOMSG, "Start Service", StrServiceName & " Service Is Set to Disabled"
Else
Traceandlog ERRORMSG, "Start Service", StrServiceName & " Unable to start service"
End If
End If
On Error GoTo 0
End Sub
Sub TraceandLog(nLevel, sCodeLocation, sText)
if sTraceLevel <= nLevel Then
LogLine = Now & " Message Occurred in: " & sCodeLocation & _
vbNewline & " Severity: " & nLevel & _
vbNewline & " Message: " & sText
If msgAction = "INTERACTIVE" or msgAction = "BOTH" Then
wscript.echo LogLine
End If
If msgAction = "LOG" or msgAction = "BOTH" Then
If FileSetup <> True Then
SetupFileLogging sLogFileName
End If
oLogFileObject.writeline LogLine
End If
End If
End Sub
Sub VariableDump
Traceandlog VERBOSEMSG, "Variable Dump", "Dumping all variables:"
Traceandlog VERBOSEMSG, "bAllMatches", "bAllMatches = " & bAllMatches
If UBound(aSubnetList) >= 0 Then
For each sSubnetPair in aSubnetList
Traceandlog VERBOSEMSG, "sSubnetPair", "sSubnetPair = " & sSubnetPair
Next
End If
Traceandlog VERBOSEMSG, "sWaitTime", sWaitTime
Traceandlog VERBOSEMSG, "sLogonScriptShare", "sLogonScriptShare = " & sLogonScriptShare
Traceandlog VERBOSEMSG, "sLogonScriptDrive", "sLogonScriptDrive = " & sLogonScriptDrive
Traceandlog VERBOSEMSG, "sLogonScriptPath", "sLogonScriptPath = " & sLogonScriptPath
Traceandlog VERBOSEMSG, "sLogonScriptName", "sLogonScriptName = " & sLogonScriptName
Traceandlog VERBOSEMSG, "bUseNetworkLogonScript", "bUseNetworkLogonScript = " & bUseNetworkLogonScript
Traceandlog VERBOSEMSG, "bStartServices", "bAllMatches = " & bStartServices
If UBound(aServiceStartList) >= 0 Then
For each sServiceName in aServiceStartList
Traceandlog VERBOSEMSG, "aStartServicesList", "sServiceName = " & sServiceName
Next
End If
Traceandlog VERBOSEMSG, "bPreemptIfProcessRunning", "bPreemptIfProcessRunning = " & bPreemptIfProcessRunning
Traceandlog VERBOSEMSG, "bAllProcesses", "bAllProcesses = " & bAllProcesses
If UBound(aRunningProcessEXEList) >= 0 Then
For each sRunningProcess in aRunningProcessEXEList
Traceandlog VERBOSEMSG, "aStartServicesList", "sRunningProcess = " & sRunningProcess
Next
End If
Traceandlog VERBOSEMSG, "sFolderpath", "sFolderpath = " & sFolderpath
Traceandlog VERBOSEMSG, "sFilepath", "sFilepath = " & sFilepath
Traceandlog VERBOSEMSG, "sTraceLevel", "sTraceLevel = " & sTraceLevel
Traceandlog VERBOSEMSG, "msgAction", "msgAction = " & msgAction
Traceandlog VERBOSEMSG, "sLogFileName", "sLogFileName = " & sLogFileName
Traceandlog VERBOSEMSG, "bLogFileOverwrite", "bLogFileOverwrite = " & bLogFileOverwrite
End Sub
Sub SetupFileLogging(sFilename)
' Could be removed if file logging will never be used
Set oFSO = CreateObject("Scripting.FileSystemObject")
sTempFolder = oFSO.GetSpecialFolder(2)
If sFilename <> "" Then
sTempName = oFSO.GetFileName(sFilename)
sLogFileName = sTempFolder & "\" & sTempName
Else
'Generate random name
sTempName = oFSO.GetFileName(oFSO.GetTempName)
sLogFileName = sTempFolder & "\" & lcase(left(sTempName, InstrRev(sTempName,".")-1)) & ".log"
End If
If oFSO.FileExists(sLogFileName) and not bLogFileOverwrite Then
Set oLogFileObject = oFSO.OpenTextFile(sLogFileName, 8, False)
Else
Set oLogFileObject = oFSO.OpenTextFile(sLogFileName, 2, True)
End If
oLogFileObject.writeline Now & " Logging Started"
FileSetup = True
End Sub
-----------------
Gurner