|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Заполнение "Описание" для компа в АД именем залогиненного юзера |
|
VBS/WSH/JS - [решено] Заполнение "Описание" для компа в АД именем залогиненного юзера
|
Новый участник Сообщения: 28 |
Профиль | Сайт | Отправить PM | Цитировать Доброго времени суток.
Стоит такая задача: в поле "описание" для компьютеров в домене прописать имя залогиненного на данном компьютере пользователя в виде "Фамилия Имя Отчество". Нашел скрипт, который пишет в виде "domain\username". Есть идеи как писать туда именно ФИО данного пользователя? Взято отсюда |
|
Отправлено: 08:28, 02-12-2010 |
Сообщения: 53444
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:19, 02-12-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 28
|
Профиль | Сайт | Отправить PM | Цитировать Petya V4sechkin, эту (пункт "Описание" в свойствах Моего компьютера на каждой юзерской машине) задачу решил. Мне же надо "Описание" у компьютера в оснастке Active Directory - Пользователи и Компьютеры:
Есть решение на CMD (спасибо smaharbA ), но малогибкое: echo off setlocal ENABLEDELAYEDEXPANSION set exclude=proxy;pavel igor,ws013 for %%i in (%exclude%) do ( set "regexclude=!regexclude! \<%%i\>" ) set domain= set user= for /f "delims=\ " %%i in ('net view ^| find "\\"') do ( set comp=%%~i ping -n 1 -w 10 !comp! > nul 2>&1 && dsquery server -o rdn | find /v /i "!comp!" > nul && echo !comp! | findstr /i /v /r "%regexclude%" > nul && ( for /f "tokens=2,3 delims==\" %%d in ('wmic /failfast:on /output:STDOUT /node:"!comp!" ComputerSystem get username /format:value 2^> nul ^| find "="') do ( set user=%%~e set domain=%%~d set domain=!domain:~0! if /i "%userdomain%"=="!domain!" ( set user=!user:~0,-1! net user "!user!" /domain > nul 2>&1 && ( for /f "delims=" %%u in ('dsquery user -samid "!user!" -scope subtree -o dn ^| dsget user -fn -mi -ln -display -L 2^> nul ^| find ": "') do ( set name=%%~u set name=set !name:: ==! !name! ) set fullname=!fn! !mi! !ln! set fullname=!fullname:"='! set display=!display:"='! dsquery computer domainroot -name "!comp!" -scope subtree -o dn | dsmod computer -desc "!fullname! (!display!)" 2> nul && echo !comp! - !fullname! (!display!^) ) ) ) ) ) |
Отправлено: 08:22, 03-12-2010 | #3 |
Новый участник Сообщения: 28
|
Профиль | Сайт | Отправить PM | Цитировать Собственно, сделал предложенным способом, только немного модифицировал: скрипт не пробегает по всему домену, а запускается от каждого пользователя, причем с проверкой - если в дескрипшине у компьютера в АД уже есть такая же информация, которую он потенциально может записать, то ничего не делает. Если там что-то другое - то пишет.
Да, кстати, информацию по пользователю берет не из АД, а из реестра (правда, получается, что имя прошлого залогиненного пользователя). Собственно, вот скрипт: @echo off setlocal ENABLEDELAYEDEXPANSION FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName') DO SET LastLogonUsername=%%B ECHO Last Logon Username=%LastLogonUsername% set domain= set user= set comp=%computername% for /f "tokens=2,3 delims==\" %%d in ('wmic /failfast:on /output:STDOUT /node:"!comp!" ComputerSystem get username /format:value 2^> nul ^| find "="') do ( set user=%%~e set domain=%%~d set domain=!domain:~0! if /i "%userdomain%"=="!domain!" ( set user=!LastLogonUsername! net user "!user!" /domain > nul 2>&1 && ( for /f "delims=" %%u in ('dsquery user -samid "!user!" -scope subtree -o dn ^| dsget user -fn -mi -ln -display -L 2^> nul ^| find ": "') do ( set name=%%~u set name=set !name:: ==! !name! ) set fullname=!fn! !mi! !ln! set fullname=!fullname:"='! set display=!display:"='! dsquery computer -name "!comp!" | dsget computer -desc > c:\windows\temp\availabilty.txt for /F "eol=d tokens=1,2,3 delims= " %%i in (c:\windows\temp\availabilty.txt) do set availabilty=%%i %%j %%k && echo "!availabilty!" && echo "!display! " if "!availabilty!" NEQ "!display! " ( dsquery computer domainroot -name "!comp!" -scope subtree -o dn | dsmod computer -desc "!display!" 2> nul && echo !comp! - !fullname! (!display!^) ) else ( echo Equal ) ) ) ) |
Отправлено: 07:08, 13-12-2010 | #4 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать HOLY DIVER, а не проще использовать переменную текущего пользователя %username% !?
В реестре всё равно не храниться полная информация о предыдущем пользователе... правильно!? Из ветки реестра (параметр DefaultUserName из HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon) берёться логин пользователя, далее в домене ищёться инфо о пользователе (ФИО пользователя) и записываеться в AD Ещё вопрос, батчик выполняеться на клиентских машинах, а на них нет доменских утилит по работе с доменом (dsquery, dsget, dsmod) - как решал эту проблему!? Утилиты лежали вместо батчиком в одной папке или как!? |
|
Отправлено: 14:11, 25-10-2012 | #5 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать sea707, такая задача несложно решается на клиентах без всяких утилит.
Простой пример на VBS: Dim strUser, objComputer strUser = GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName).FullName Set objComputer = GetObject("LDAP://" & CreateObject("ADSystemInfo").ComputerName) On Error Resume Next objComputer.Put "Description" , strUser objComputer.SetInfo If Err.Number <> 0 Then Err.Clear Set objComputer = Nothing WScript.Quit 0 |
Отправлено: 16:05, 25-10-2012 | #6 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать Цитата DmitriiV:
Снять запрет не предлагать ))) |
|
Отправлено: 04:17, 26-10-2012 | #7 |
Забанен Сообщения: 63
|
Профиль | Сайт | Цитировать ПопробЫвал переконвентировать с помошью программы ExeScript в файл exe, но всё равно пишет запрещено....
|
Отправлено: 06:09, 26-10-2012 | #8 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата sea707:
Впрочем, попробуйте выполнить этот код в составе макроса для какого-нибудь приложения из комплекта MS Office. |
|
Отправлено: 08:41, 26-10-2012 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - копирование папки с целевым именем "название+дата создания" | Zlodeyz | Скриптовые языки администрирования Windows | 5 | 08-02-2011 02:52 | |
Разное - [решено] Не удается создать папку с именем "CON" | IsildoR | Microsoft Windows 2000/XP | 3 | 28-04-2010 12:59 | |
Почему Windows при запуске файла с именем "start.exe" показывает кнопки как "Пуск"? | Котяра | Хочу все знать | 9 | 22-06-2009 13:48 | |
RIS. Внесение изменений в "описание" компьютера на этапе "синих экранов" RIS'а | PIL123 | Автоматическая установка Windows 2000/XP/2003 | 0 | 25-06-2007 14:36 | |
[решено] Ищу ссылку на описание команд в "Пуск" -> "Выполнить" | Volan | Microsoft Windows 2000/XP | 3 | 29-06-2006 15:50 |
|