home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 May / W2KPRK.iso / apps / cconnect / CConnect.VBS < prev   
Text File  |  1999-11-18  |  6KB  |  169 lines

  1. '********************************************************************
  2. '*
  3. '* File:           CConnect.vbs
  4. '* Created:        August 1999
  5. '* Version:        1.0
  6. '* Written By:     Amir Littman
  7. '*
  8. '*  Main Function:  Track Con-Current Connections
  9. '*
  10. '* Copyright (C) 1999 Microsoft Corporation
  11. '*
  12. '********************************************************************
  13.  
  14. Set objNet = WScript.CreateObject("WScript.Network")
  15. Set WshShell = WScript.CreateObject("WScript.Shell")
  16. Set WshSysEnv = WshShell.Environment("PROCESS")
  17. Set locator = CreateObject("WbemScripting.SWbemLocator")
  18. CONST CONST_FORCE_LOGOFF = 4
  19.  
  20.  
  21. ' Gather ConCurrent Connection Information
  22.  On error resume next
  23.     ConConnection = WshShell.RegRead("HKCU\Software\Microsoft\CConnect\CConnection")
  24.         if err then
  25.               ConConnection = 99999
  26.          End if
  27.  
  28. ' Gather EventServer Name
  29.  On error resume next
  30.    evntserver = WshShell.RegRead("HKCU\Software\Microsoft\CConnect\EvntServer")
  31.         if err then
  32.               evntServer = ""
  33.        End if
  34.  
  35. ' Gather SQL Credentials from the reginstry
  36.  On error resume next
  37.   strSQLServerName = WshShell.RegRead("HKCU\Software\Microsoft\CConnect\SQLSERVER") 'If this fails, they will be prompted for the SQL connection info
  38.   strUserName = WshShell.RegRead("HKCU\Software\Microsoft\CConnect\SQLUSER")
  39.   strPassword = WshShell.RegRead("HKCU\Software\Microsoft\CConnect\SQLPASSWORD")
  40.         if err then
  41.               WshShell.LogEvent 1, "CConnect Failed to Start for user " & objNet.UserName & " due to " & Err.Description, EvntServer
  42.           wscript.quit
  43.        End if
  44.  
  45. 'Start SQL Connection
  46. On error resume next
  47.  Set objDBConnection = WScript.CreateObject("ADODB.Connection")
  48.   Set RS = WScript.CreateObject("ADODB.Recordset")
  49.   objDBConnection.open "DRIVER=SQL Server;UID=" + strUserName + ";Password=" + strPassword + ";SERVER=" +strSQLServerName
  50.  
  51.        if err then
  52.               WshShell.LogEvent 1, "CConnect Failed to Start for user " & objNet.UserName & " due to " & Err.Description, EvntServer
  53.           wscript.quit
  54.        End if
  55.  
  56. ' Get Current User Count
  57.  NumberOfConnections = GetUserCount()
  58.  
  59. ' Determine if the current Computer is matches the one currently in the database
  60.   If CurrentComputer() = True Then
  61.        WshShell.LogEvent 2, "User " & objNet.UserName & " has logged into a computer whose previous information existed in the SQL Server. This can only happen if the UserName and ComputerName matched the objects in the SQL Server", EvntServer
  62.  
  63.   End If
  64.  
  65. ' Check if the User Should be logged off
  66.       If NumberOfConnections >= ConConnection Then
  67.            WshShell.LogEvent 0, "User " & objNet.UserName & " has reached thier concurrent connection limitation. The ConCurrent Connection number is set to " & NumberOfConnections, EvntServer
  68.            WshShell.LogEvent 0, "User " & objNet.UserName & " has been successfully logged off.", evntserver
  69.  
  70. ' Log the User Off
  71.        For Each os In GetObject("winmgmts:{impersonationLevel=impersonate,(shutdown,remoteshutdown)}!//" + objNet.ComputerName).InstancesOf("Win32_OperatingSystem")
  72.         retCode = os.Win32Shutdown(4, 0)
  73.        Next
  74.         Wscript.quit
  75.      End If
  76.  
  77.  
  78.     call AddUsers()
  79.  
  80.    WshShell.LogEvent 0, "CConnect.vbs successfully ran for user " & objNet.UserName & " on computer " & objNet.computername, EvntServer
  81.  
  82. '******************************************************************
  83. '
  84. ' This is The Function to Add The User information to the Database
  85. '
  86. '*******************************************************************
  87.  
  88. Public Function AddUsers()
  89. on error Resume Next
  90.    SQLQuery1 = ""
  91.    SQLQuery1 = " if not exists (select * from SYSIAD where"
  92.    SQLQuery1 = SQLQuery1 + " username='" & objNet.UserName & "' and computername='" & objNet.Computername & "')"
  93.    SQLQuery1 = SQLQuery1 + " Insert SYSIAD values('" & objNet.UserName & "',"
  94.    SQLQuery1 = SQLQuery1 + " '" & objNet.Computername & "', '" & WshSysEnv("LOGONSERVER") & "')"
  95.        Set RSSYSIAD = objDBConnection.Execute(SQLQuery1)
  96.  
  97.              if err then
  98.                   WshShell.LogEvent 1, "CConnect Failed to Start for user " & objNet.UserName & " due to " & Err.Description, EvntServer
  99.              wscript.quit
  100.               End if
  101. End Function
  102.  
  103.  
  104. '*****************************************************************************************
  105. '
  106. ' This is The Function to Get the Current Number of Computers that the user is logged into
  107. '
  108. '*******************************************************************************************
  109.  
  110.  Public Function GetUserCount()
  111. On error Resume Next
  112.       SQLQuery1 = ""
  113.       SQLQuery1 = SQLQuery1 + " select * from SYSIAD"
  114.       SQLQuery1 = SQLQuery1 + " where username='" & objNet.UserName & "'"
  115.  
  116.        Set RSSYSIAD = objDBConnection.Execute(SQLQuery1)
  117.              if err then
  118.                   WshShell.LogEvent 1, "CConnect Failed to Start for user " & objNet.UserName & " due to " & Err.Description, EvntServer
  119.             wscript.quit
  120.              End if
  121.  
  122.         recAffected = 0
  123.         Do While Not RSSYSIAD.EOF
  124.              RSSYSIAD.MoveNext
  125.             recAffected = recAffected + 1
  126.         Loop
  127.       GetUserCount = recAffected
  128.  
  129.  End Function
  130.  
  131. '*****************************************************************************************
  132. '
  133. ' This is The Function to Get the Current Computer of the user and see if it matches
  134. '        The one in the database
  135. '
  136. '*******************************************************************************************
  137.  
  138.  Public Function CurrentComputer()
  139. On Error Resume Next
  140.       SQLQuery1 = ""
  141.       SQLQuery1 = SQLQuery1 & " select * from SYSIAD"
  142.       SQLQuery1 = SQLQuery1 & " where ComputerName='" & objNet.ComputerName & "'"
  143.        Set RSSYSIAD = objDBConnection.Execute(SQLQuery1)
  144.              if err then
  145.                   WshShell.LogEvent 1, "CConnect Failed to Start for user " & objNet.UserName & " due to " & Err.Description, EvntServer
  146.             wscript.quit
  147.              End if
  148.  
  149.        Do While Not RSSYSIAD.EOF
  150.         CComp = RSSYSIAD.Fields(1).Value
  151.          RSSYSIAD.MoveNext
  152.          Loop
  153.         
  154.     If CComp = "" Then
  155.        CurrentComputer = False
  156.        Exit Function
  157.     End If
  158.  
  159.    If objNet.ComputerName = Trim(CComp) Then
  160.  
  161.        CurrentComputer = True
  162.  
  163.      Else
  164.  
  165.        CurrentComputer = False
  166.  
  167.    End If
  168.  End Function
  169.