PDA

Показать полную графическую версию : данные полученые из logon-script на рабочий стол


philippov
10-08-2007, 00:00
При логине пользователей winxp-sp2 в w2k3 домен выполняется скрипт "dobro.pozhalovat.vbs". Ну, в этом скрипте определяется, - кто вошел, с какого компа, мапятся расшареные ресурсы, и при успешном завершении дается поп-ап с текстом "Добро Пожаловать Вася Пупкин в домен нашей организации", через три секунды это окно исчезает.

Вопрос. Хотелось бы (даже видел у одних в конторе), чтобы на Десктопе, где-нибудь в уголке эта информация оставалась. Пользователь такой-то, машина - такая-то, домен, ИП, ОС.
Часто пользователь звонящий в службу поддержки - не может сказать свой ИП или имя своей машины - а так все на столе.

Как это можно реализовать ??
Спасибо.

amel27
10-08-2007, 03:24
philippov

Вариант 1: использовать специальный софт типа Sysinternals BgInfo (http://www.microsoft.com/technet/sysinternals/Miscellaneous/BgInfo.mspx).
Вариант 2: переименовать иконку "Мой компьютер" (http://www.pctools.com/guides/registry/detail/370/) в "Пользователь на Компьютере"

dimich22
10-08-2007, 08:51
Ага, только вот по здравом размышлении я пришел к выводу, что переименовывать иконку "Мой компьютер" совсем не нужно, иначе пользователь ее вообще на найдет, да и вы объяснить уже не сумеете - уже проверено. В общем, одни проблемы. Проще батник всем или на общий ресурс скопировать, который выдает имя компьютера и ip-адрес. Или на каждый компьютер наклеить бумажку с именем и адресом))

Butunin Klim
10-08-2007, 10:08
dimich22, philippov,
Я широко использую для этого SMS очнь удобно достаточно спросить фамилию сотрудника, хотя это он и сам говорит, а вычеслить машину уже не составит труда очень помогает...
пример в файле
amel27, Есть одно "но" Если у пользователя всесь стол забит ярлыками то тогда есть проблемы с пониманием то же под ярлыками.

dimich22
10-08-2007, 10:23
Butunin Klim, ну, об SMS мы не говорили. Это все-таки очень специфично, хотя на предыдущем месте работы у меня он был и также активно использовался. А уж если еще обои пользователям поменять, так они вообще сожрут))

philippov
10-08-2007, 12:46
В общем, одни проблемы. Проще батник всем или на общий ресурс скопировать, который выдает имя компьютера и ip-адрес.

Наверно так и будет. У каждого на столе иконка под названием "КТО Я?", ядовито-оранжевого цвета, кликаешь, а там все твои данные.

Вообще-то хотелось что-то похожее на Sysinternals BgInfo, только чтобы эта информация была поверх всех элементов рабочего стола, ну как есть на ноутбуках при нажатии спец.кнопок, типа "CAPS LOCK: ON"

farlow
13-08-2007, 14:56
Вариант 1: использовать специальный софт типа Sysinternals BgInfo.
классная софтина
токо вопрос, как можно вытащить номер телефона текущего юзера

и номера телефонов+название_групп из определенного контейнера

dim-soft
13-08-2007, 21:31
а можно инфу добавить в то место где винда пишет что она бета или не лицензионная ?

amel27
14-08-2007, 07:14
как можно вытащить номер телефона текущего юзераVBS-скрипт специально для BgInfo:On Error Resume Next
Set objWSH = CreateObject("WScript.Shell")
Echo getTelephone(objWSH.ExpandEnvironmentStrings("%USERNAME%"))

Function getTelephone(userName)
Set oUser = GetObject("LDAP://" & getUserDN(userName))
getTelephone = oUser.TelephoneNumber
End Function

Function getUserDN (userName)
Const ADS_SCOPE_SUBTREE = 10
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName " & _
"FROM 'LDAP://" & getDomainDN & "' " & _
"WHERE objectCategory='user' AND sAMAccountName='" & userName & "'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
ans = objRecordSet.Fields("distinguishedName").Value
objRecordSet.MoveNext
Loop
getUserDN = ans
End Function

Function getDomainDN
DCs = Split(objWSH.ExpandEnvironmentStrings("%USERDNSDOMAIN%"), ".")
For Each DC in DCs
DCString = DCString & "dc=" & DC & ","
Next
getDomainDN=Left(DCString, Len(DCString)-1)
End Function

и номера телефонов+название_групп из определенного контейнеракуда, на рабочий стол?

farlow
14-08-2007, 09:20
куда, на рабочий стол? >>>
да, у мекня такая дурная задумка...
у меня есть группы пользователей,
_Бухгалтерия
_Юристы
и т.д.
там в описание групп я хочу вписать номера внутренних телефонов (группы разбиты по кабинетам, и хранятся в отдельном контейнере)

так вт в идеале хотелось бы вывести из этого контейнера все названия групп и их номера телефонов
это было бы очень удобно, тем более уц нас новая атс и никто не знает как позвонить соседям

monkkey
14-08-2007, 09:47
farlow,
А у Вас Outlook нет, случаем?

farlow
14-08-2007, 12:58
А у Вас Outlook нет, случаем?
пока нету, но через месяц придет новый сервер, бум ставить small business server и скорей всего бум юзать аутглюк, хотя зачем его будем юзать еще не придумал

amel27
14-08-2007, 13:01
там в описание групп я хочу вписать номера внутренних телефонов
BgInfo поддерживает только статический список... Можно конечно сгенерить весь текст целиком (с именами и описаниями) и выдать одной строкой, но тогда весь дизигн проги по боку и форматировать надо будет средствами VBS... тут возможности минимальные, придется выставить непропорциональный шрифт и либо телефоны ставить сначала, либо добивать строки пробелами.

farlow
14-08-2007, 15:05
главное вытащить инфу, а с форматированием как нить разберемся

amel27
15-08-2007, 08:10
farlow
что-нить типа такого:Set objWSH = CreateObject("WScript.Shell")
UserName = objWSH.ExpandEnvironmentStrings("%USERNAME%")
Echo getGroupsTel(getUserOU(UserName), 50)

' Список групп с телефонами
' OrgUnitDN - имя группы в формате LDAP
' NumSpace - количество символов под имя группы

Function getGroupsTel (OrgUnitDN, NumSpace)
Const ADS_SCOPE_SUBTREE = 1
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT Name, ManagedBy " & _
"FROM 'LDAP://" & OrgUnitDN & "' " & _
"WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
nam = objRecordSet.Fields("Name").Value
nam = Mid(nam, 1, NumSpace)
man = objRecordSet.Fields("ManagedBy").Value
If man<>"" Then
ans = ans & vbCrLf & _
nam & Space(NumSpace-Len(nam)) & _
getUserTel(man)
End If
objRecordSet.MoveNext
Loop
getGroupsTel = ans
End Function

' Телефон группы
' userDN - имя пользователя в формате LDAP

Function getUserTel(userDN)
Set oUser = GetObject("LDAP://" & UserDN)
getUserTel = oUser.TelephoneNumber
End Function

' OU пользователя в формате LDAP
' userName - Имя пользователя (LoginName)

Function getUserOU (userName)
Const ADS_SCOPE_SUBTREE = 10
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT distinguishedName " & _
"FROM 'LDAP://" & getDomainDN & "' " & _
"WHERE objectCategory='user' AND sAMAccountName='" & userName & "'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
ans = objRecordSet.Fields("distinguishedName").Value
objRecordSet.MoveNext
Loop
getUserOU = Mid(ans ,InStr(ans,",")+1)
End Function

' Домен текущего пользователя

Function getDomainDN
DCs = Split(objWSH.ExpandEnvironmentStrings("%USERDNSDOMAIN%"), ".")
For Each DC in DCs
DCString = DCString & "dc=" & DC & ","
Next
getDomainDN=Left(DCString, Len(DCString)-1)
End Function




© OSzone.net 2001-2012