วันศุกร์ที่ ๑๖ ตุลาคม พ.ศ. ๒๕๕๒

VBScript อ่านค่า User Account เพื่อเปิด Website อัตโนมัติ

ผมได้รับคำสั่งให้ทำอย่างไรก็ได้ เมื่อ user ทำการ log in เข้า Windows แล้วให้ตรวจสอบว่าเป็น user ที่อยู่ในกลุ่มพิเศษหรือไม่ ถ้าใช่ให้เปิด Web Application ขี้นมา เพื่อแสดงสถานะงานคงค้าง (เรื่องสำคัญมากคือการทวงหนี้ลูกค้า)

ไปนั่งคิดนอนคิดก็เลยคิดว่าน่าจะเขียน Log on script ด้วย VBScript มาทำงานนี้ครับ เริ่มแรกผมเก็บข้อมูลรายชื่อ user ไว้ใน database ก่อน แล้วพอ Log on script ทำงานจะไปตรวจสอบว่า User นั้นตรงกับที่อยู่ใน database หรือไม่ ทีนี้เราต้องใช้ Windows Scripting Host (WScript) มาร่วมด้วยครับ


ON ERROR RESUME NEXT

'*******************************************************
'// GET LOGON USER ACCOUNT
'*******************************************************
Dim WSHNetwork
Set WSHNetwork = CreateObject("Wscript.Network")

Dim userAccount
userAccount = WSHNetwork.UserDomain & "\" & WSHNetwork.UserName
Set WSHNetwork = nothing

'*******************************************************
'// VALIDATE USER
'*******************************************************

Set cnn = CreateObject("adodb.connection")
Set rstUser = CreateObject("adodb.recordset")

cnn.connectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=xxxx;Password=yyyy;Initial Catalog=UserList;Data Source=xxSQLServer"

cnn.open

Dim strSQL
strSQL = "select employeeid from dbo.tblUser a where aduser = '" & userAccount "'"
rstUser.open strsql, cnn

If not rstUser.eof Then
'// If valid user, execute IE
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "iexplore.exe -new http://myHost/myApplication"
Set WSHShell = nothing
End If


rstUser.close
cnn.close

Set rstUser = Nothing
Set cnn = Nothing



ทดสอบการทำงานก็ได้ผลโอเคครับ แต่โดน Network Admin ติงมานิดหน่อยว่าไม่อยากให้ไปติดต่อ database เพราะมันช้า และต้องใช้ traffic ของ network เนื่องจาก SQLServer กับ AD อยู่คนละ Server กัน ดังนั้นเลยเปลี่ยนเอา list ของ user มาเก็บเป็น Text file แทนครับ ลองดูโค้ดเฉพาะตรงนี้กัน ส่วนหา user log on ก็เหมือนโค้ดด้านบน


const ForReading = 1, TristateTrue = -1

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("\\myserver\netlogon\UserList.txt", ForReading, false, TristateTrue)

Dim user
Dim isFound
isFound = 0

Do Until objFile.AtEndOfStream
user = trim(objFile.ReadLine)
If lcase(user) = lcase(useraccount) Then
isFound = 1
'msgbox isFound
Exit Do
End If
Loop

objFile.Close
Set objFile = Nothing
Set objFSO = Nothing

If isFound = 1 Then
'// If valid user, execute IE
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "iexplore.exe -new http://myHost/myApplication"
Set WSHShell = nothing
End If

ไม่มีความคิดเห็น: