Войти

Показать полную графическую версию : заполнить "описание компьютера"


Страниц : [1] 2

exo
27-10-2010, 12:49
Добрый день.
Есть доменная сеть на 2003 сервере.
Есть клиенты ХР SP3.
Однако не у всех клиентов в описании компьютера стоят их Ф.И.О.
Что хочу, в GPO положить скрипт, который менял бы описание компьютера согласно "полному имени" в свойствах учётной записи.
Т.е. кто зашёл в систему, тот и отобразился в описании.
К сожалению у простых пользователей нет прав менять описание, поэтому нужно как-то повысить права.
Где-то я встречал подобный скрипт, но где? не помню...
Спасибо.

Iska
27-10-2010, 17:46
Где-то я встречал подобный скрипт, но где? не помню... »
Возможно, здесь: Отображение имени пользователя работающего на компьютере в сетевом окружении.*-*Сборник документов и материалов в помощь IT специалисту (http://www.networkdoc.ru/index.php?option=com_content&task=view&id=102&Itemid=57). Хотя лично мне способ с рестартом таких служб категорически не нравится.

exo
28-10-2010, 10:37
Iska, не, не то. там было проще и без служб.

Iska
28-10-2010, 11:31
exo, если Вы внимательно прочитали ту статью, то должны понимать, что другого подхода нет — в любом случае, за описание компьютера в сетевом окружении отвечает служба LanManServer. Вот Вам ещё:
net config server /srvcomment:"Моё описание"
Работает ли эта команда от имени учётной записи с не административными полномочиями — проверять Вам.

exo
28-10-2010, 22:58
не поленился, без надежды пустился в перебор своих сообщений, я же помню где-то было... и нашёл.

есть вагон скриптов менябщих дескрипшен компа
http://forum.oszone.net/post-1426214-6.html
вот пример: только я не пойму - он закончен?
Dim rootDSE,strDomainDN,objConnection
Dim strSubContainer,objCommand,objRecordSet
Dim strMsg, arrDescription, strAccountProp, objComputer, strLoggedOnUser, strLoggedOnUserFullName
Const SPLITER = ","
Const ADS_SCOPE_SUBTREE = 2
Const ADS_SCOPE_ONELEVEL = 3
Const ADS_UF_ACCOUNTDISABLE = 2
'
strSubContainer="OU=Отделы" 'указываем OU в котором будем искать
Set rootDSE = GetObject("LDAP://SERVER.domain.ru/RootDSE") 'Указываем домен с которым работаем
strDomainDN = rootDSE.Get("defaultNamingContext")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
'Внимательно смотрим и меняем имя домена с DC=domain,DC=ru на нужное
objCommand.CommandText = "Select Name, operatingSystem, operatingSystemServicePack, Description, userAccountControl, distinguishedName from 'LDAP://" + strSubContainer + ",DC=domain,DC=ru' " & "where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_ONELEVEL 'ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
If objRecordSet.RecordCount<1 Then
WScript.Echo "No computer accounts found in "&strContainer&strDomainDN
WScript.Quit
End If
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
' ''Перебираем только те компы, у котрых Account установлен в Enabled
If (objRecordSet.Fields("userAccountControl").Value And ADS_UF_ACCOUNTDISABLE)=0 Then
strMsg = objRecordSet.Fields("Name").Value & _
SPLITER & objRecordSet.Fields("operatingSystem").Value & _
SPLITER & strAccountProp
arrDescription = objRecordSet.Fields("Description").Value
If Not IsNull (arrDescription) Then
strMsg = strMsg & SPLITER & arrDescription(0)
End If
'WScript.Echo strMsg
strLoggedOnUser = fnGetUserName (objRecordSet.Fields("Name").Value)
strLoggedOnUserFullName = fnGetUserFullName (strLoggedOnUser)
If (Not IsEmpty(strLoggedOnUser)) And (Not IsNull (strLoggedOnUser)) Then
Set objComputer = GetObject("LDAP://"&objRecordSet.Fields("distinguishedName").Value)
objComputer.Put "Description" , strLoggedOnUserFullName
objComputer.SetInfo
End If
End If
objRecordSet.MoveNext
Loop
WScript.Echo "Хау! Я кончил!"
'
'Функция, возвращающая имя текущего залогоненого пользователя на заданном компьютере
Function fnGetUserName (strComputer)
On Error Resume Next
Dim objWMIService, colItems, objItem
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems
'Обрезаем нужное кол-во символов с начала имени пользователя дабы привести от DOMAIN\Username к виду Username
fnGetUserName = Mid (objItem.UserName,14,(Len(objItem.UserName)-13))

Next
On Error GoTo 0
End Function

'Опрашиваем AD на предмет ФИО данного юзера
Function fnGetUserFullName (strNNM)
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

'Вместо Server подставьте имя компа к которому будите обрашаться за инфой
Set objWMIService = GetObject("winmgmts:\\" & "Server" & "\root\directory\LDAP")
Set colItems = objWMIService.ExecQuery("SELECT * FROM ads_user WHERE DS_sAMAccountName='" +strNNM+"'", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)

For Each objItem In colItems

' WScript.Echo "DS_sAMAccountName: " & objItem.DS_sAMAccountName
' WScript.Echo "Имя юзера: " & objitem.DS_displayName
fnGetUserFullName = objitem.DS_displayName
Next

End Function

за описание компьютера в сетевом окружении отвечает служба »
Iska, если вы внимательно читали, то я ни слова про "описание в сетевом окружении " не сказал.
Я имел ввиду описание в свойствах "Моего компьютера". Хотя оно и отображается в сетевом окружении. Но это уже совсем другая история.

amel27
29-10-2010, 03:49
Я имел ввиду описание в свойствах "Моего компьютера".»значит это не тот скрипт, так как он меняет описание в свойствах учетной записи компьютера в AD

Iska
29-10-2010, 05:43
Iska, если вы внимательно читали, то я ни слова про "описание в сетевом окружении " не сказал. »
Спасибо, ясно. Значит, мы друг друга не поняли.
Я имел ввиду описание в свойствах "Моего компьютера". Хотя оно и отображается в сетевом окружении. Но это уже совсем другая история. »
Я тоже имел в виду описание в свойствах системы на вкладке «Мой компьютер». Впрочем, не спорю: очевидно, Вам виднее.

exo
29-10-2010, 08:24
так как он меняет описание в свойствах учетной записи компьютера в AD »
только там написано, что типа потом обратно это описание уже в свойствах "моего компьютера" меняет... ладно, буду искать дальше.

Iska
29-10-2010, 09:26
только там написано…»
Где?

Petya V4sechkin
29-10-2010, 11:20
exo, в общем, есть набор заготовок:
Q. How can I convert a user's logon name (sAMAccountName) into their distinguished name (distinguishedName)? (http://www.windowsitpro.com/article/tips/q-how-can-i-convert-a-user-s-logon-name-samaccountname-into-their-distinguished-name-distinguishedname-.aspx)
Q: Как запустить программу от имени другого пользователя (http://oszone.net/3634#10)
net config server /srvcomment:"Моё описание"
Можно слепить из этого нечто.
3-й батник зашифровать с помощью утилит из 2-й ссылки (чтобы юзеры не видели пароль админа). 1-й батник (чуть переделать) определяет полное имя пользователя и передает его 3-му в качестве параметра.

exo
29-10-2010, 15:21
Petya V4sechkin, Iska, прошу прощения. а "слона" я и не заметил.

в продолжении. нужно автоматически заполнять "моё описание".
Но где его брать. Я думаю так же через командную строку:
net ещё в чём-нибудь мне поможет?

exo
03-11-2010, 10:09
вот что нашли с коллегой:

@echo off
rem setFullNameComment version 1.0 writen by rpocc
rem Retrieves current logged user's full canonical name on Windows NT4+ RU systems
rem and uses it as srvcomment. only accepted name format: "word word word"
for /f "skip=3 tokens=3,4,5" %%a in ('net users %username% /domain') do (
if "%%a" neq "" (
if "%%b" neq "" (
if "%%c" neq "" (
net config server /srvcomment:"%%a %%b %%c">nul
)
)
)
rem (exit immediately after very first step)
goto exitproc
)
:exitproc
его в GPO, дать права на изменения описания осталось.

Busla
04-11-2010, 12:59
Я менял (удалённо) через wmi, но стандартный wmic совершенно не переваривал пробелы в описании, в итоге переписал на wsh.

А зачем вообще нужно в описание компьютера проставлять текущего пользователя? - практически весь вменяемый софт для мониторинга и т.п. итак умеет запрашивать залогиненых пользователей.

Iska
04-11-2010, 14:08
Я менял (удалённо) через wmi, но стандартный wmic совершенно не переваривал пробелы в описании »
Как делали, не припомните, коллега?

Busla
05-11-2010, 13:30
Iska, в ПН на работе гляну

Busla
08-11-2010, 14:30
до ужаса просто:
wmic /NODE:компьютер OS SET Description="описание"
при условии, что запускается от учётной записи имеющей необходимый привелегии; иначе нужные данные указываются в команде через /USER и /PASSWORD (см. встроенную справку)

Iska
08-11-2010, 15:21
Спасибо, ясно. У меня с пробелами работает без вопросов. А вот запятую внутри «описание» воспринимает как разделитель свойств, и как-либо экранировать сие у меня не получилось.

HOLY DIVER
03-12-2010, 08:27
Все оказывается куда проще делалось.
Я сделал немного иначе:


On Error Resume Next
strComputer = "."
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
Set WSHShell = wscript.CreateObject("WScript.shell")

const HKEY_LOCAL_MACHINE = &H80000002
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\lanmanserver\parameters"
strValueName = "srvcomment"
oReg.GetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

if strValue = objUser.CN then
Do Nothing
else
'MsgBox("Write name is " & objUser.CN)
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\srvcomment", objUser.CN
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\lanmanserver\parameters\srvcomment", objUser.CN
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\lanmanserver\parameters\srvcomment", objUser.CN
end if

sharkmax
27-05-2015, 10:50
Подниму тему вновь. Все оказывается куда проще делалось.
Я сделал немного иначе: » Пробую запускать ваш скрипт выдаёт ошибку:
Сценарий: C:\Users\sharkmax\Desktop\HoBbm текстовый документ.vbs
Строка: 16
Символ: 5
Ошибка: Предполагается наличие 'While', 'Until' или окончания
инструкции
Код: 800А0404
Источник: Ошибка компиляции Microsoft VBScript
Или он не на vbs написан?
А вот этот батник норм отрабатывает:
вот что нашли с коллегой:
Код:
@echo off
rem setFullNameComment version 1.0 writen by rpocc
rem Retrieves current logged user's full canonical name on Windows NT4+ RU systems
rem and uses it as srvcomment. only accepted name format: "word word word"
for /f "skip=3 tokens=3,4,5" %%a in ('net users %username% /domain') do (
if "%%a" neq "" (
if "%%b" neq "" (
if "%%c" neq "" (
net config server /srvcomment:"%%a %%b %%c">nul
)
)
)
rem (exit immediately after very first step)
goto exitproc
)
:exitproc
его в GPO, дать права на изменения описания осталось. »
только как дать право юзверям править эти параметры реестра через GPO?

Iska
27-05-2015, 13:43
Или он не на vbs написан? »
«Do Nothing» — такой команды не существует. Судя по всему, это банальный комментарий, т.е., должно было быть как-то так:
if strValue = objUser.CN then
'Do Nothing
else




© OSzone.net 2001-2012