troubleshooting Question

VB SCRIPT ERRORS "Input past end of file" and "Permission Denied"

Avatar of pk24573
pk24573 asked on
VB Script
11 Comments2 Solutions1324 ViewsLast Modified:
Hello all,

Im running this script to monitor logon/logoff activity in my network.
The script runs fine (it documents everything in my log file.

However, i get 2 errors on my clients.

error : Permission denied (800A0046)
line 121

and

error :Input past end of file (800a003e)
line 118

i have given full access to all clients to the log file.

Any help will be much appreciated.
Thanks.

Option Explicit
 
Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns
Dim intConstants, intTimeout, strTitle, intCount, blnLog
Dim strUserName, strComputerName, strIP, strShare, strLogFile
 
strShare = "\\Filesrv\Log_share"
strLogFile = "logon.log"
intTimeout = 20
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")
 
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerName
strIP = Join(GetIPAddresses())
 
' Log date/time, user name, computer name, and IP address.
If (objFSO.FolderExists(strShare) = True) Then
    On Error Resume Next
    Set objLogFile = objFSO.OpenTextFile(strShare & "\" _
        & strLogFile, 8, True, 0)
    If (Err.Number = 0) Then
        ' Make three attempts to write to log file.
        intCount = 1
        blnLog = False
        Do Until intCount = 3
            objLogFile.WriteLine "Logon ; "  & Now & " ; " _
                & strComputerName & " ; " & strUserName & " ; " & strIP
            If (Err.Number = 0) Then
                intCount = 3
                blnLog = True
            Else
                Err.Clear
                intCount = intCount + 1
                If (Wscript.Version > 5) Then
                    Wscript.Sleep 200
                End If
            End If
        Loop
        On Error GoTo 0
        If (blnLog = False) Then
            strTitle = "Logon Error"
            strText = "Log cannot be written."
            strText = strText & vbCrlf _
                & "Another process may have log file open."
            intConstants = vbOKOnly + vbExclamation
            intAns = objShell.Popup(strText, intTimeout, strTitle, _
                intConstants)
        End If
        objLogFile.Close
    Else
        On Error GoTo 0
        strTitle = "Logon Error"
        strText = "Log cannot be written."
        strText = strText & vbCrLf & "User may not have permissions,"
        strText = strText & vbCrLf & "or log folder may not be shared."
        intConstants = vbOKOnly + vbExclamation
        intAns = objShell.Popup(strText, intTimeout, strTitle, intConstants)
    End If
    Set objLogFile = Nothing
End If
 
' Clean up and exit.
Set objFSO = Nothing
Set objNetwork = Nothing
Set objShell = Nothing
 
Wscript.Quit
 
Function GetIPAddresses()
    ' Based on a Michael Harris script, modified by Torgeir Bakken
    '
    ' Returns array of IP Addresses as output
    ' by IPConfig or WinIPCfg...
    '
    ' Win98/WinNT have IPConfig (Win95 doesn't)
    ' Win98/Win95 have WinIPCfg (WinNt doesn't)
    '
    ' Note: The PPP Adapter (Dial Up Adapter) is
    ' excluded if not connected (IP address will be 0.0.0.0)
    ' and included if it is connected.
 
    Dim objShell, objFSO, objEnv, strWorkFile, objFile
    Dim arrData, intIndex, n, arrIPAddresses, arrParts
 
    Set objShell = CreateObject("wscript.shell")
    Set objFSO = CreateObject("scripting.filesystemobject")
    Set objEnv = objShell.Environment("PROCESS")
    If (objEnv("OS") = "Windows_NT") Then
        strWorkFile = objEnv("TEMP") & "\" & objFSO.GetTempName
        objShell.Run "%comspec% /c IPConfig >" & Chr(34) _
            & strWorkFile & Chr(34), 0, True
    Else
        ' WinIPCfg in batch mode sends output to
        ' filename WinIPCfg.out
        strWorkFile = "WinIPCfg.out"
        objShell.Run "WinIPCfg /batch", 0, True
    End If
    Set objShell = Nothing
    Set objFile = objFSO.OpenTextFile(strWorkFile)
    arrData = Split(objFile. ReadAll, vbCrLf)
    objFile.Close
    Set objFile = Nothing
    objFSO.DeleteFile strWorkFile
    Set objFSO = Nothing
    arrIPAddresses = Array()
    intIndex = -1
    For n = 0 To UBound(arrData)
        If (InStr(arrData(n), "IP Address") > 0) Then
            arrParts = Split(arrData(n), ":")
            If (InStr(Trim(arrParts(1)), "0.0.0.0") = 0) Then
                intIndex = intIndex + 1
                ReDim Preserve arrIPAddresses(intIndex)
                arrIPAddresses(intIndex)= Trim(CStr(arrParts(1)))
            End If
        End If
ASKER CERTIFIED SOLUTION
Join our community to see this answer!
Unlock 2 Answers and 11 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 2 Answers and 11 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros