Иногда бывает необходимость изменить всем (или многим) пользователям свойства учетки. Например, формат номера телефона…
В связи с изменениями в правилах набора телефонных номеров, появилась необходимость в быстром и глобальном редактировании корпоративной адресной книге. LDAP у нас в AD, по этому редактировать будем свойства пользователей. В чем суть? Нужно номера телефонов в виде 8050… изменить на +38050…
Делать будем так:
- выгружаем скриптом свойства ВСЕХ пользователей из AD в файл excel
- редактируем файл (удаляем лишние столбцы, оставляем только пользователей с мобильными, Правка — Заменить изменяем номера телефонов в нужный формат)
- загружаем скриптом номера в свойства пользователей 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 в поле Мобильный. По результатам создает лог.