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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Перемещение компьютеров из одного OU в другой, в зависимости от имени

Ответить
Настройки темы
VBS/WSH/JS - Перемещение компьютеров из одного OU в другой, в зависимости от имени

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


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

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


Доброго времени суток! Жизненно необходим vbs скрипт, перемещающий компы из одного OU в другой следующим образом: проверяет OU domain.com/Computers и смотрит, если первые 4 буквы в имени - ABCD (name или CN, не принципиально) то перемещает в domain.com/ABCD, если первые 4 буквы EFGH, то соответственно в domain.com/EFGH. И так 22 раза))) Так нужно будет раскидывать компы по контейнерам филиалов (в каждом филиале уникальное GPO, так что все в одном OU держать - не вариант). Запускаться будет периодически на основном контроллере домена (скажем, раз в час или два). Нужно это для того, что сейчас идет массовое обновление парка машин (а кое где просто переустановка с XP на 7, либо изменение имени на унифицированное) и их необходимо перезаводить в домен, а поскольку система на новые компы ставится в головном офисе, неизвестно, в какой филиал попадет та или иная машина (в домен вводят непосредственно в филиале). Жду помощи!

Отправлено: 08:44, 12-02-2014

 

Ветеран


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

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


Цитата PAlkovnic:
проверяет OU domain.com/Computers »
Нет такого OU. Может быть «OU=Computers,DC=domain,DC=com».

Цитата PAlkovnic:
И так 22 раза »
Почему не 21 или 23? Я полагаю, что достаточно просто перебрать существующие аккаунты компьютеров в «OU=Computers,DC=domain,DC=com», так?

Отправлено: 09:01, 12-02-2014 | #2



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

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


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


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

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


Цитата Iska:
Нет такого OU. Может быть «OU=Computers,DC=domain,DC=com». »
Каюсь, мне было проще написать canonicalName
Цитата Iska:
Почему не 21 или 23? Я полагаю, что достаточно просто перебрать существующие аккаунты компьютеров в «OU=Computers,DC=domain,DC=com», так? »
Не совсем так. Именно 22 потому, что именно 22 филиала с уникальным префиксом по названию города. А перебирать существующие аккаунты можно, но они там появляются регулярно, и регулярно их оттуда руками перемещают по своим местам. К тому же, в этом контейнере есть машины, которые должны оставаться там и только там (некоторые финансовые службы завязаны на DN)

Отправлено: 11:29, 12-02-2014 | #3


Ветеран


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

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


PAlkovnic, примерно так:
читать дальше »
Код: Выделить весь код
Option Explicit

Const ADS_SCOPE_ONELEVEL = 1


Dim objDictionary

Dim strDomain

Dim objConnection
Dim strKey


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
	.Add "ABCD", "OU=ABCD"
	.Add "EFGH", "OU=EFGH"
	' … И так 22 раза)))
End With


strDomain = GetObject("LDAP://RootDSE").Get("DefaultNamingContext")

Set objConnection = WScript.CreateObject("ADODB.Connection")

With objConnection
	.Provider = "ADsDSOObject"
	.Open "Active Directory Provider"
End With

With WScript.CreateObject("ADODB.Command")
	Set .ActiveConnection = objConnection
	
	.CommandText = _
		"SELECT Name, distinguishedName " & _
		"FROM 'LDAP://CN=Computers," & strDomain & "' " & _
		"WHERE objectClass='computer'"
		
	With .Properties
		.Item("Searchscope") = ADS_SCOPE_ONELEVEL
		.Item("Page Size")   = 1000
		.Item("Timeout")     = 60
		.Item("Sort On")     = "Name"
	End With
	
	With .Execute()
		.MoveFirst
		
		Do Until .EOF
			For Each strKey In objDictionary.Keys
				If StrComp(Left(.Fields.Item("Name").Value, 4), strKey, vbTextCompare) = 0 Then
					WScript.Echo .Fields.Item("Name").Value
					
					GetObject("LDAP://" & objDictionary.Item(strKey) & "," & strDomain).MoveHere "LDAP://" & .Fields.Item("distinguishedName").Value, vbNullString
				End If
			Next
			
			.MoveNext
		Loop
		
		.Close
	End With
	
	Set .ActiveConnection = Nothing
End With

objConnection.Close
Set objConnection = Nothing

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0

Кстати, я неглядючи ненароком соврал Вам выше — не «OU=Computers», а «CN=Computers».

Отправлено: 17:30, 15-02-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Перемещение компьютеров из одного OU в другой, в зависимости от имени

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Windows 2012 AD перемещение компьютеров в OU Ask3t Windows Server 2012/2012 R2 2 18-07-2013 13:26
CMD/BAT - [решено] как запустить из одного батника другой от имени администратора под семеркой seriych Скриптовые языки администрирования Windows 12 05-04-2013 11:10
CMD/BAT - [решено] Скрипт для копирования стуктуры AD из одного OU в другой Outlaw_UA Скриптовые языки администрирования Windows 2 21-06-2012 17:59
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла Sarge81 Скриптовые языки администрирования Windows 4 20-09-2011 04:20
компьютеры из одной ou невидят компьютеры из другой ou, возможно ? philippov Microsoft Windows NT/2000/2003 2 11-12-2006 04:16




 
Переход