Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   заполнить "описание компьютера" (http://forum.oszone.net/showthread.php?t=189534)

exo 27-10-2010 12:49 1528548

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

Iska 27-10-2010 17:46 1528812

Цитата:

Цитата exo
Где-то я встречал подобный скрипт, но где? не помню... »

Возможно, здесь: Отображение имени пользователя работающего на компьютере в сетевом окружении.*-*Сборник документов и материалов в помощь IT специалисту. Хотя лично мне способ с рестартом таких служб категорически не нравится.

exo 28-10-2010 10:37 1529235

Iska, не, не то. там было проще и без служб.

Iska 28-10-2010 11:31 1529281

exo, если Вы внимательно прочитали ту статью, то должны понимать, что другого подхода нет — в любом случае, за описание компьютера в сетевом окружении отвечает служба LanManServer. Вот Вам ещё:
Код:

net config server /srvcomment:"Моё описание"
Работает ли эта команда от имени учётной записи с не административными полномочиями — проверять Вам.

exo 28-10-2010 22:58 1529801

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

Цитата:

Цитата cameron
есть вагон скриптов менябщих дескрипшен компа

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
за описание компьютера в сетевом окружении отвечает служба »

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

amel27 29-10-2010 03:49 1529890

Цитата:

Цитата exo
Я имел ввиду описание в свойствах "Моего компьютера".»

значит это не тот скрипт, так как он меняет описание в свойствах учетной записи компьютера в AD

Iska 29-10-2010 05:43 1529899

Цитата:

Цитата exo
Iska, если вы внимательно читали, то я ни слова про "описание в сетевом окружении " не сказал. »

Спасибо, ясно. Значит, мы друг друга не поняли.
Цитата:

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

Я тоже имел в виду описание в свойствах системы на вкладке «Мой компьютер». Впрочем, не спорю: очевидно, Вам виднее.

exo 29-10-2010 08:24 1529929

Цитата:

Цитата amel27
так как он меняет описание в свойствах учетной записи компьютера в AD »

только там написано, что типа потом обратно это описание уже в свойствах "моего компьютера" меняет... ладно, буду искать дальше.

Iska 29-10-2010 09:26 1529955

Цитата:

Цитата exo
только там написано…»

Где?

Petya V4sechkin 29-10-2010 11:20 1530016

exo, в общем, есть набор заготовок:
  1. Q. How can I convert a user's logon name (sAMAccountName) into their distinguished name (distinguishedName)?
  2. Q: Как запустить программу от имени другого пользователя
  3. Цитата:

    Цитата Iska
    net config server /srvcomment:"Моё описание"

Можно слепить из этого нечто.
3-й батник зашифровать с помощью утилит из 2-й ссылки (чтобы юзеры не видели пароль админа). 1-й батник (чуть переделать) определяет полное имя пользователя и передает его 3-му в качестве параметра.

exo 29-10-2010 15:21 1530208

Petya V4sechkin, Iska, прошу прощения. а "слона" я и не заметил.

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

exo 03-11-2010 10:09 1533688

вот что нашли с коллегой:

Код:

@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 1534565

Я менял (удалённо) через wmi, но стандартный wmic совершенно не переваривал пробелы в описании, в итоге переписал на wsh.

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

Iska 04-11-2010 14:08 1534612

Цитата:

Цитата Busla
Я менял (удалённо) через wmi, но стандартный wmic совершенно не переваривал пробелы в описании »

Как делали, не припомните, коллега?

Busla 05-11-2010 13:30 1535310

Iska, в ПН на работе гляну

Busla 08-11-2010 14:30 1537626

до ужаса просто:
Код:

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

Iska 08-11-2010 15:21 1537671

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

HOLY DIVER 03-12-2010 08:27 1557243

Все оказывается куда проще делалось.
Я сделал немного иначе:

Код:

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 2511900

Подниму тему вновь.
Цитата:

Цитата HOLY DIVER
Все оказывается куда проще делалось.
Я сделал немного иначе: »

Пробую запускать ваш скрипт выдаёт ошибку:
Сценарий: C:\Users\sharkmax\Desktop\HoBbm текстовый документ.vbs
Строка: 16
Символ: 5
Ошибка: Предполагается наличие 'While', 'Until' или окончания
инструкции
Код: 800А0404
Источник: Ошибка компиляции Microsoft VBScript
Или он не на vbs написан?
А вот этот батник норм отрабатывает:
Цитата:

Цитата exo
вот что нашли с коллегой:
Код:
@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 2511962

Цитата:

Цитата sharkmax
Или он не на vbs написан? »

«Do Nothing» — такой команды не существует. Судя по всему, это банальный комментарий, т.е., должно было быть как-то так:
Код:

if strValue = objUser.CN then
        'Do Nothing
else


sharkmax 27-05-2015 14:32 2511977

О да! все супер, так отлично работает! Спасибо огромное!

Опиум 27-05-2015 18:16 2512060

Цитата:

Цитата exo
Т.е. кто зашёл в систему, тот и отобразился в описании. »

смысл какой? видеть залогиневшегося по net view?

я использую вариации logon скрипта на тему
Код:

echo %date% %time% %username% %computername% >>\\server\share\login.txt

sharkmax 27-05-2015 20:41 2512104

Смысл в том, что в Dame Ware Remote Support ФИО пользователя отображается рядом с именем машины за которой он сидит, для меня это очень удобно.

sharkmax 28-05-2015 11:25 2512242

Хотя я поторопился, все же права на изменения данных параметров в реестре все равно нужны.


Время: 15:58.

Время: 15:58.
© OSzone.net 2001-