Скрипт для отображения имени пользователя

Windows Script Host (WSH), WMI, vbs скрипты и т.д. Создание и применение скриптов.

Модератор: Модераторы

Новый участник
Сообщения: 2
Зарегистрирован: 04 сен 2006, 16:34

Сообщение Orlangoor » 05 сен 2006, 08:07

Есть такое предположение, что WSH чуствителен к регистру реестра. Гугл обрыл, но ничего дельного не нашел - на MSDN тоже ноль

Koreshok

Сообщение Koreshok » 01 ноя 2006, 17:01

Всем привет, случайно наткнулся на данный топик, и вот, что могу сказать: была у меня в своё время задача, суть которой заключалась в наличие возможности определять по логину пользователя имя рабочей станции на которую он залогинился. Так же д.б. удобный интерфейс для работы с полученными данными и т.д. Выбор стал на vbs скриптах, которые через GPO выполнялись при событииях logon и logoff пользователя на рабочую станцию и заносили необходимые данные в MS SQL, а уж их MS SQl данные можно было выбирать хоть в Exel, хоть в GIU написанный например на Visual Basic и т.д.

Вот код:

Код


on error resume next
dim full_name,ClientIPAdress,ws_name,user_domain,user_name
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set WshShell = WScript.CreateObject("WScript.Shell")
ws_name = WshNetwork.ComputerName
user_domain=UCase(WshNetwork.UserDomain)
user_name=WshNetwork.UserName
GetFullName()
GetClientIPAdress()
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cs="Provider=SQLOLEDB.1;Network Library=dbmssocn;Password=password;User ID=database_name;Initial Catalog=table_name;Data Source=database_server_name;"
cn.Open cs
rs.CursorLocation = adUseClient
sql="SELECT * FROM database_name where ws_name='" + ws_name +"'"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
if rs.EOF then rs.addnew
rs("ws_name")=ws_name
rs("ws_ip")=ClientIPAdress
rs("user_domain")=user_domain
rs("user_name")=user_name
rs("login_status")="LOGIN"
rs("login_date")=date+time
rs("logout_date")=null
rs("full_name")=full_name
rs.update
rs.Close


'Start function Get Full User Name from AD

Function GetFullName()
ldap="LDAP://DC=xxx,DC=xxx,DC=xxx"
Set oConnection1 = CreateObject("ADODB.Connection")
Set oCommand1 = CreateObject("ADODB.Command")
oConnection1.Provider = "ADsDSOObject"
oConnection1.Open "Active Directory Provider"
Set oCommand1.ActiveConnection = oConnection1
oCommand1.CommandText = "select displayname, sAMAccountName " & _
"from '" & ldap & "'" & _
"WHERE objectCategory='Person'" & _
"AND objectClass='user' and sAMAccountName='" & user_name & "'"
Set rs = oCommand1.Execute
If Not rs.EOF then  full_name=rs.Fields("displayname")
oConnection1.close
end Function

'End function Get Full User Name from AD

'Start function Get client IP adress

Function GetClientIPAdress()
Set objWMIService = GetObject("winmgmts:\\" & ws_name & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery ("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig in IPConfigSet
 If Not IsNull(IPConfig.IPAddress) Then
   For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
     ClientIPAdress = IPConfig.IPAddress(i)
   Next
 End If
Next
end Function

'End function Get client IP adress


[/code]
Koreshok

Сообщение Koreshok » 01 ноя 2006, 17:27

Дополнение: первый код выполняется на событие logonn, следующая часть на logoff:

on error resume next
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")
ws_name = WshNetwork.ComputerName
user_domain=WshNetwork.UserDomain
user_name=WshNetwork.UserName
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cs="Provider=SQLOLEDB.1;Network Library=dbmssocn;Password=password;User ID=user_name;Initial Catalog=database_name;Data Source=database_server_name;"
cn.Open cs
rs.CursorLocation = adUseClient
sql="SELECT * FROM table_name where ws_name='" + ws_name +"'"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
if not rs.EOF then
rs("login_status")="LOGOUT"
rs("logout_date")=date+time
rs.update
end if
rs.Close
cn.Close

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9