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

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

PAlkovnic 12-02-2014 08:44 2307661

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

Iska 12-02-2014 09:01 2307670

Цитата:

Цитата PAlkovnic
проверяет OU domain.com/Computers »

Нет такого OU. Может быть «OU=Computers,DC=domain,DC=com».

Цитата:

Цитата PAlkovnic
И так 22 раза »

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

PAlkovnic 12-02-2014 11:29 2307736

Цитата:

Цитата Iska
Нет такого OU. Может быть «OU=Computers,DC=domain,DC=com». »

Каюсь, мне было проще написать canonicalName
Цитата:

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

Не совсем так. Именно 22 потому, что именно 22 филиала с уникальным префиксом по названию города. А перебирать существующие аккаунты можно, но они там появляются регулярно, и регулярно их оттуда руками перемещают по своим местам. К тому же, в этом контейнере есть машины, которые должны оставаться там и только там (некоторые финансовые службы завязаны на DN)

Iska 15-02-2014 17:30 2309530

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».


Время: 18:40.

Время: 18:40.
© OSzone.net 2001-