Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » Скрипт для изменения свойств компьютера в AD

Ответить
Настройки темы
Скрипт для изменения свойств компьютера в AD

Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


Добрый.
Я хочу с помощью скрипта изменять поле Location у каждого компа в АД при его загрузке. Нашел на мелкасофте пример скрипта
Цитата:
Set objComputer = GetObject _
("LDAP://CN=comp1, OU=ABC, DC=domain, DC=ru")
objComputer.Put "Location" , "Building 37, Floor 2, Room 2133"
objComputer.SetInfo
Проблема в том, что в скрипте указывается имя компа. А в моем случае имя компа - величина переменная.
Вопрос: можно ли в этот скрипт вписать некое регулярное выражение, чтоб при загрузке компа вместо comp1 было вписано имя текущей машины?
Если да, то пример кода пожалуста набросайте.

-------
Я закончил, все свободны.


Отправлено: 09:50, 16-11-2007

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


ну если контейнер/домен вычислять не надо то можно просто восстановить значение переменной окружения:
Код: Выделить весь код
Set objWSHell = CreateObject("WScript.Shell")
COMP=objWSHell.ExpandEnvironmentStrings("%COMPUTERNAME%")

Set objComputer = GetObject _ 
("LDAP://CN=" & COMP, OU=ABC, DC=domain, DC=ru")
objComputer.Put "Location" , "Building 37, Floor 2, Room 2133"
objComputer.SetInfo

Отправлено: 11:23, 16-11-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


amel27, спасибо, попробую твой скрипт, но я решил проблему по другому.
Итак, день мучений привел меня к такому вот результату
Код: Выделить весь код
Set WshNetwork = CreateObject("WScript.Network")
                 On Error Resume Next
Path = WSHNetwork.ComputerName
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName

Set objComputer = GetObject("LDAP://" & strComputerDN)
objComputer.Put "Location" , "Building 37, Floor 2, Room 2133"
objComputer.SetInfo
п.с. Кстати, тут на радостях то своих не узрел, что у тебя в месте
Цитата amel27:
CN=" & COMP »
скрипт скорее всего не отработает, потому что у меня при передаче в LDAP строковой переменной он выдавал ошибку...
(пробовал всевозможными вариантами, в том числе и с "" и без и по всякому). Но все равно спасибо.

-------
Я закончил, все свободны.


Отправлено: 11:40, 16-11-2007 | #3


Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


В общем я разочаровался немного в своем скрипте, ибо у него много ограничений и минусов....
Решил обозначить задачу с другой стороны: Как мне пробежать по OU и для каждого компа изменить свойство Location?
Я хочу запустить скрипт один раз(либо ооочень редко раз), чтобы он совершил нужные мне действия.
Собственно сама проблема заключается в том как мне получить список объектов компьютеров из OU.

-------
Я закончил, все свободны.


Отправлено: 12:17, 16-11-2007 | #4

HLT HLT вне форума

Ветеран


Сообщения: 788
Благодарности: 130

Профиль | Отправить PM | Цитировать


Например, нужные компютеры находятся в OU test1 домена domain.local
Тогда для установки Location = "Far far away" нам нужна такая команда:

dsquery computer "OU=test1,DC=domain,DC=local" | dsmod computer -loc "Far far away"

Подробнее об этих командах в первоисточнике:
dsquery
dsmod

-------
Сообщение помогло? Нажмите внизу ссылку "Полезное сообщение".


Последний раз редактировалось HLT, 16-11-2007 в 13:12. Причина: ошибся с URLами немного. fixed =)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 16-11-2007 | #5


Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


HLT, спасибо, это то что надо. Работает на ура!

-------
Я закончил, все свободны.


Отправлено: 15:37, 16-11-2007 | #6


Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


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

Итак, список задач, которые я решал:
1. Заполнение свойства Location компьютера в АД
2. Удаление принтеров, подключенных со старого принт-сервера
3. Автоматическое подключение ближайшего принтера с нового принт-сервера при залогинивании пользователя
4. Все это в максимально автоматическом режиме, с помощью скриптов и групповых политик

На сайте http://networkdoc.ru существует вот эта статья, примерно описывающая мою задачу. Но в ней есть некоторые моменты, которые у меня не заработали, поэтому пришлось колхозить самому. В итоге я избавился от старого принт-сервера, а новые принтеры сами появляются у пользователя при залогинивании и дефолтным выставляется ближайший. Че еще добавить не знаю, поэтому просто опишу очередность работы скриптов.

Во-первых нам для географического отделения компьютеров потребуется заполнить поле Location, скрипт, которые это делает ниже
Код: Выделить весь код
dsquery computer OU=XXX,DC=YYY,DC=com | dsmod computer -loc "XXX/Computer"
Он был описан выше, за что автору очередной респект! Фактически мы пробегаем по всему организационному подразделению и у всех компов меняем поле Location.
скрипт запускается один раз с рабочего места админа, я его загнал в батник.
Дальше, я завел на новом принт-сервере принтеры, заполнил и их поле Location(оно потребуется для определения одинаковых принтеров)

Во-вторых, чтобы у пользователя удалились принтеры со старого принт-сервера, я составил следующий скрипт
Код: Выделить весь код
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = WScript.CreateObject("WScript.Network")

'Выполняем выбор всех установленных принтеров
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")

'Строка регулярного выражения для удаления принтера
strRegExp = "\\OLD_PRINT_SERVER"

'В цикле пробегаем по каждому найденому принтеру
For Each objPrinter in colInstalledPrinters
strStringToMatch = objPrinter.Name

Set objRE = New RegExp
objRE.Global     = False
objRE.IgnoreCase = True
objRE.Pattern    = strRegExp

'Если строка рег выражения входит в название принтера, то его удаляем
If objRE.Test(strStringToMatch)=True Then
   objNetwork.RemovePrinterConnection  strStringToMatch
Else

End If
Next
Работает он так: у пользователя производится выборка всех установленных принтеров, а дальше я ищу вхождение строки \\OLD_PRINT_SERVER в каждый принтер. Если она там есть, то принтер грохаю, иначе ничего. OLD_PRINT_SERVER каждый пишет СВОЙ!

В-третьих, из замечательной вышеуказанной статьи я взял скрипт, который автоматически ставит и проверяет установку ближайшего принтера. Еще раз приведу его здесь.
Код: Выделить весь код
'Определяем контекст комьютера

Option Explicit
Dim WSHNetwork, Computer, Path, strComputerDN, objSysInfo, objComputer, sPrintPath, PrintLocation
Dim objWMIService, colInstalledPrinters, objPrinter
Set WSHNetwork = CreateObject("WScript.Network")
On Error Resume Next
Path = WSHNetwork.ComputerName
Set objSysInfo = CreateObject("ADSystemInfo")
strComputerDN = objSysInfo.ComputerName
Set objComputer = GetObject("LDAP://" & strComputerDN)

'Назначаем необходимый для установки сетевой принтер
'в зависимости от значения поля Location
Select Case objComputer.Get("Location")
  Case "Отдел 1"
      sPrintPath = "\\server1\HPLaserJ"
      PrintLocation = "Принтер в Отделе 1"
  Case "Отдел 2"
      sPrintPath = "\\server2\HP1100"
	  PrintLocation = "Принтер HP1100 Отдел 2"
  Case Else
   MsgBox("Для установки принтера обратитесь к системному администратору.") :WScript.Quit
End Select

'Выполняем проверку установленных принтеров
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery _
   ("Select * from Win32_Printer")
   
For Each objPrinter in colInstalledPrinters
 If  PrintLocation = objPrinter.Location  Then
    WScript.Quit
 End If
Next

'Подключаем принтер и делаем его принтером по умолчанию
WSHNetwork.AddWindowsPrinterConnection sPrintPath
WSHNetwork.SetDefaultPrinter sPrintPath
Сохраняем наши скрипт с расширением *.vbs. Подробнее о его работе можно почитать в статье.
В-четвертых, осталось самое простое - все это дело собрать вместе и автоматизировать. Для этого я написал батник простого содержания
Код: Выделить весь код
start /wait delete_old_printer.vbs
start connect_near_printer.vbs
Теперь батник я помещаю в групповую политику на пользователя (в статье даже с картинками это описано), а рядом с батником помещаю 2 vbs файла.
Дальше тесты. У меня все заработало без проблем.

-------
Я закончил, все свободны.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:58, 26-11-2007 | #7


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата madmax24:
Set objComputer = GetObject _
("LDAP://CN=comp1, OU=ABC, DC=domain, DC=ru")
objComputer.Put "Location" , "Building 37, Floor 2, Room 2133"
objComputer.SetInfo »
У меня есть excel-файл, где прописано имена компьютеров и их местонахождения.
Как можно массово выполнить операцию по изменению данных в AD?

Отправлено: 16:38, 14-10-2013 | #8



Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Windows NT/2000/2003 » Скрипт для изменения свойств компьютера в AD

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Какой файл отвечает за окошко Свойств компьютера ProgrammerPC Автоматическая установка Windows 2000/XP/2003 2 24-10-2009 22:20
Доступ - [решено] Запрет для изменения имя компьютера hhh8484 Microsoft Windows 2000/XP 10 26-04-2009 14:44
Интерфейс - Глюки с панелью управления и контекстным меню свойств компьютера Kreng87 Microsoft Windows Vista 1 11-11-2008 09:32
VBS/WHS/JS - Скрипт для настройки свойств обозревателя KillHunter Программирование и базы данных 1 14-07-2008 08:40
JS методы для изменения свойств CSS karlison Вебмастеру 2 20-08-2003 12:11




 
Переход