Иногда необходимо узнать какой пользователь домена работает за компьютером, а иногда и наоборот необходимо узнать за какими компьютерами в домене работает пользователь (или просто получить список пользователей работающих на Пк в домене). Для этого дела у меня есть два небольших скрипта: Скрипт № 1: получение имени пользователя работающего на компьютере в домене strComputer = «computername» Set objWMIService = GetObject(«winmgmts:\\» & strComputer & «\root\CIMV2») Set colItems = objWMIService.ExecQuery( _ «SELECT * FROM Win32_ComputerSystem»,,48) For Each objItem in colItems Wscript.Echo «UserName: » & objItem.UserName Next Этот скрипт выдаст логин с которым работает пользователь на указанном компьютере. Если нужен не только логин, но и DN , то можно скомбинировать его с примером из предыдущего поста: Список пользователей в группе AD.
Понадобилось сегодня срочно сделать отчет по пользователям которые включены в одну специфическую группу OU в домене AD. Готового под рукой ничего не было, поэтому я раздербанил несколько старых скриптов и соорудил один рабочий: On Error Resume Next Set objGroup = GetObject («LDAP://cn=X_Users,ou=Security — Groups,dc=blabla,dc=bla,dc=ru») objGroup.GetInfo arrMemberOf = objGroup.GetEx(«member») For Each strMember in arrMemberOf Set objUser = GetObject(«LDAP://» & strMember) WScript.echo objUser.samaccountname & «;» & objUser.userPrincipalName &»;»& objUser.distinguishedName Next Принцип работы очень простой. Копируете в текстовый файл, сохраняете с разрешением VBS, указываете функции GetObject необходимый DN до нужной группы. Затем запускаете из командной строки: cscript //nologo вашскрипт.vbs > users.csv Ключ //nologo подавляет вывод в результаты команды служебных заголовков, а модификатор > переправляет результаты в текстовый файл. Его потом можно открыть Excel как структурированные данные с разделителем точка с запятой, и использовать как необходимо.
Не так давно я писал о том что мне необходимо мигрировать сервер печати на новый сервер. Сегодня эта работа была закончена я и могу поделиться своим опытом с окружающими. Итак по порядку что было сделано: Настроен новый сервер в доменном окружении Используя программу Printer migrator были перенесены все принтеры с старого принтсервера После того как было проверено что оба сервера функционируют нормально и печать на принтеры есть была осуществлена подмена имен серверов.
Пожалуй каждый администратор домена сталкивается с так называемыми «мертвыми душами». Никакой мистики тут нет. Люди устраиваются на работу, увольняются, а отдел кадров обычно не спешит сообщать об этом системному администратору. Также бывает и с неактивными компьютерами. И со временем накапливается куча пользователей, давным давно не не работающих. Мне понадобилось таких пользователей почистить и я накатал небольшой скрипт:
Поймал очередной глюк терминального сервера, а точнее клиента. Необходимо предоставить доступ человеку удаленному на пару тысяч километров. Учетку создали, права дали, проверяю локально все ништяк работает. Отправляю человеку логин-пароль, у него возникает проблема при подключении Чтобы подключиться к этому сеансу удаленной консоли, нужно иметь права администратора на этом компьютере Полчаса ушло на локализацию проблемы. Ведь все работет и на моем и на соседнем компьюетре, никаких проблем, в логах сервера вижу успешный вход. Служба winlogon успешно аутентифицирует и дает доступ а потом раз и все… Проблема крылась в мелочах. Человек использовал клиента из серверной поставки, и всегда администрировал свой сервер, а на этот у него самые ообычные права. Именно поэтому и обнаружилось что у него в свойстве ярлыка стоял mstsc.exe /admin, еще бывает вариант mstsc /console. Оба варианта принуждают клиента терминала подключаться не к сессии RDP а к консоли, эмулируя физический доступ. Это разумеется требует администраторских прав. Убираем все лишнее, запускаем только mstsc.exe и все нормально работает!
Этот пост содержит азбучную истину, которую обычно использует каждый администратор , однако при этом не знает каждый новичок. Речь пойдет о монтировании сетевых папок пользователям домена при запуске РМ.
В результате неизвестного глюка с моего компьютера не получается подключиться к серверу терминалов Remote Desktop и я получаю вот такое вот сообщение: Удаленный сеанс отключен из-за отсутствия доступных лицензий клиента сервера терминалов для этого компьютера. Нужно вылечить, для этого, на компьютере с которого подключаемся, запускаем regedit.exe (Пуск -> Выполнить -> Regedit). В реестре находим ветку HKEY_LOCAL_MACHINE -> Software -> Microsoft -> MSLicensing На это ветке нажимаем правой кнопкой и экспортируем в файл на всякий случай. После того как у нас есть бекап удаляем всю эту ветку, для этого нажимаем на MSLicensing правой кнопкой мыши выбираем в контекстном меню Удалить. После этого ваш клиент терминала должен подключиться без всяких проблем.
Появилась у меня необходимость получить из домена список компьютеров которые были неактивны месяц и более. В общем те что давно не эксплуатируются, а из домена выведены не были. Порывшись в своих запасниках скриптов нашел старый VBS который выполняет нужную функцию: On Error Resume Next DomainString=Inputbox(«Введите имя домена»,»Проверка активных компьютеров»,»Имя домена») if DomainString=»» then wscript.echo «Имя домена не введено или сценарий отменен.» wscript.quit end if numDays=InputBox(«Введите число дней, определяющее порог неактивности» & «учетных записей»,»Проверка активных компьютеров»,»XX») if numDays=»» then wscript.echo «Число дней не задано или сценарий отменен.» wscript.quit end if Set fs=WScript.CreateObject(«Scripting.FileSystemObject») Set f=fs.OpenTextFile(«donefs.txt»,2,True) Set DomainObj = GetObject(«WinNT://»&DomainString) if err.number<>0 then wscript.echo «Ошибка соединения с » & DomainString wscript.quit end if DomainObj.Filter = Array(«computer») rem Wscript.echo «Учетные записи домена » & DomainString & » старше » & numDays & » дней.» For each Computer in DomainObj Set Account = GetObject(«WinNT://» & DomainString & «/» & Computer.Name & «$») RefreshTime = FormatNumber((Account.get(«PasswordAge»))/86400,0) If CInt(RefreshTime) >= CInt(numDays) Then f.WriteLine Computer.Name & » ; » & RefreshTime & » дней.» End If Next set DomainObj=Nothing set Shell=Nothing Собственно скрипт очень простой, берет из AD выборку компьютеров и проверяет когда последний раз изменялся PasswordAge. Если больше указанного количества дней то выводит в текстовый файлик. Разумеется введенный параметр…
Мне часто попадается вопрос Как выгнать компьютер из домена? Очень просто! Есть два пути, один для любителей командной строки и скриптов : выполняем команду NETDOM.EXE REMOVE machinename /Domain:domain Для работы необходимо иметь права Администраора домена ли оператора домена, команда работает с любого компьютера в домене, пациент должен быть в сети. Ну а для обыденных случаев вполне пойдет и обычный старый добрый рецепт: Клик правой кнопкой мыши на значке Мой компьютер — > Свойства — > Имя компьютера заполняем рабочую группу и нажимаем ОК. Также необходимо быть администратором. Напомню что если вы хотите перименовать компьютер то после вывода из домена и переименовыванием вам необходима будет перезагрузка. Без нее если вы попытаетесь опять загнать компьютер в домен, он зайдет под старым именем. А вообще вам сюда если нужно переименовать компьютер в домене.
Иногда необходимо переименовать компьютер в домене AD. Как это сделать? Можно конечно вручную выгнать его из домена, изменив имя и установив рабочую группу, а затем обратно подключить его к домену под новым именем. Однако это требует личного участия и в случае «хорошо настроенных» параметров безопасности получить компьютер без административных прав. По крайней мере в моем домене так. Все локальные администраторы заблокированы и административный доступ есть только у некоторых доменных учетных записей. Самый правильный и удобный способ переименовать компьтер в домене, это использовать возможности предоставленные нам самим доменом. Итак переименовываем компьютер: