Скрипт изменения свойств пользователя в AD

Иногда бывает необходимость изменить всем (или многим) пользователям свойства учетки. Например, формат номера телефона…

В связи с изменениями в правилах набора телефонных номеров, появилась необходимость в быстром и глобальном редактировании корпоративной адресной книге. LDAP у нас в AD, по этому редактировать будем свойства пользователей. В чем суть? Нужно номера телефонов в виде 8050… изменить на +38050…

Делать будем так:

  1. выгружаем скриптом свойства ВСЕХ пользователей из AD в файл excel
  2. редактируем файл (удаляем лишние столбцы, оставляем только пользователей с мобильными, Правка — Заменить изменяем номера телефонов в нужный формат)
  3. загружаем скриптом номера в свойства пользователей AD

Скрипт экспорта пользователей с AD:

SET objRootDSE = GETOBJECT("LDAP://RootDSE")
strExportFile = "C:\scripts\111.xls"
strRoot = objRootDSE.GET("DefaultNamingContext")
strfilter = "(&(objectCategory=Person)(objectClass=User))"
strAttributes = "sAMAccountName,userPrincipalName,givenName,sn," & _
                                "initials,displayName,physicalDeliveryOfficeName," & _
                                "telephoneNumber,mail,wWWHomePage,profilePath," & _
                                "scriptPath,homeDirectory,homeDrive,title,department," & _
                                "company,manager,homePhone,pager,mobile," & _
                                "facsimileTelephoneNumber,ipphone,info," & _
                                "streetAddress,postOfficeBox,l,st,postalCode,c"
strScope = "subtree"
SET cn = CREATEOBJECT("ADODB.Connection")
SET cmd = CREATEOBJECT("ADODB.Command")
cn.Provider = "ADsDSOObject"
cn.Open "Active Directory Provider"
cmd.ActiveConnection = cn
cmd.Properties("Page Size") = 1000
cmd.commandtext = "<LDAP://" & strRoot & ">;" & strFilter & ";" & _
                                   strAttributes & ";" & strScope
SET rs = cmd.EXECUTE
SET objExcel = CREATEOBJECT("Excel.Application")
SET objWB = objExcel.Workbooks.Add
SET objSheet = objWB.Worksheets(1)
FOR i = 0 To rs.Fields.Count - 1
                objSheet.Cells(1, i + 1).Value = rs.Fields(i).Name
                objSheet.Cells(1, i + 1).Font.Bold = TRUE
NEXT
objSheet.Range("A2").CopyFromRecordset(rs)
objWB.SaveAs(strExportFile)
rs.close
cn.close
SET objSheet = NOTHING
SET objWB =  NOTHING
objExcel.Quit()
SET objExcel = NOTHING
Wscript.echo "Script Finished..Please See " & strExportFile

 

Скрипт создает в C:\scripts\ файл со свойствами пользователей. В нем удаляем лишнее, делаем столбик sAMAccountName первым (по логину будет проводиться поиск), а столбик Mobile — третьим.


Скрипт загрузки мобильных в AD:

Wscript.Echo "Скрипт запущен"

'Описание переменных
Dim con
Dim rs
Dim com
Dim strCN
Dim exlROW
Dim i
Dim pathtouser
Dim oFso
Dim oMyFile
Dim sLine
Dim usercn
Dim pathcheck
Dim D1
Dim D2
Dim D3
Dim T1
Dim T2
Dim T3
Dim DTNow
Dim FileName


'Конец описания переменных

'Описание констант
Const ADS_PROPERTY_UPDATE = 2
Const ADS_PROPERTY_CLEAR = 1
'Конец описания констант

' Получение текущей даты
D1 = Day(Date)
D2 = Month(Date)
D3 = Year(Date)
T1 = Hour(Now)
T2 = Minute(Now)
T3 = Second(Now)
DateString= D1 & "_" & D2& "_" & D3 & "_" & T1 & "_" & T2& "_" & T3
FileName = "C:\scripts\Phone_in_AD\ScriptAdXl_" & DateString & ".log"
' Конец получения текущей даты

'Установка соединения с AD
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open 'Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
'Конец установки соединения с AD

'Открытие приложения Excel и указание файла для обработки
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\scripts\Phone_in_AD\111.xls")
'Конец открытия Excel

'Создание лог файла

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oMyFile = oFso.CreateTextFile(FileName)

'Конец создания лог файла

On Error Resume Next

'Начало цикла перебора строк в Excel'e
i = 2
Do Until objExcel.Cells(i,1).Value = ""
 
 strCN = objExcel.Cells(i,1).Value

 pathcheck = ""
    'Поиск и получение пути к пользователю в AD
    objCommand.CommandText = "<LDAP://OU=Users,DC=mydomain,DC=ua>;(sAMAccountName=" & strCN & ");AdsPath, cn;subTree"
    Set rs = objCommand.Execute

    Do While rs.EOF = False
     'Wscript.Echo rs.Fields("AdsPath") & vbTab & rs.Fields("cn")
     pathtouser=rs.Fields("AdsPath")
     pathcheck = pathtouser
     usercn=rs.Fields("cn")
     rs.MoveNext
    Loop
     'Конец поиска и получение пути к пользователю в AD
    
        DTNow = Now
    
     'Измeнение свойст пользователя
    
       If pathcheck = "" Then
       sLine = DTNow & "  Не найден!  ИНН пользователя (из Excel): " & strCN & " . Display Name (Из Excel'я): " & objExcel.Cells(i,1).Value & ". - БЫЛ НЕ НАЙДЕН В Active directory"
       Else
       Set objUser = GetObject (pathtouser)
       objUser.Put "Mobile", objExcel.Cells(i,3).Value
       'objUser.Put "physicalDeliveryOfficeName", objExcel.Cells(i,3).Value
       'objUser.Put "title", objExcel.Cells(i,2).Value
       'objUser.PutEx ADS_PROPERTY_UPDATE, "Company", Array(objExcel.Cells(i,4).Value)
       'objUser.PutEx ADS_PROPERTY_CLEAR, "department", 0
       objUser.SetInfo
           If Err.Number=0 Then
           sLine = DTNow & "  ОК!       ИНН пользователя: " & strCN & " . Display Name (Из Excel'я): " & objExcel.Cells(i,1).Value & ". CN (из AD):" & usercn & ". -Информация была успешно изменена"
        Else
               sLine = DTNow & "  ОШИБКА!!! ИНН пользователя: " & strCN & ". Display Name (Из Excel'я): " & objExcel.Cells(i,1).Value & ".  Код ошибки:" & Err.Number & " Причина ошибки: " & Err.Description
        End If
    End If
       'Конец изминение свойст пользователя
Err.Clear               
       oMyFile.WriteLine(sLine)
     
         
i = i + 1
Loop

objExcel.Quit
'Конец цикла перебора строк в Excel'e

Wscript.Echo "Выполнения скрипта завершено"

Скрипт берет с файла последовательно логины с первого столбика и ищет их в AD. В случае совпадения — копирует соответствующий номер с столбика Mobile в поле Мобильный. По результатам создает лог.

Запись опубликована в рубрике Администрирование. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Solve : *
16 ⁄ 4 =