Скрипт изменения свойств пользователя в AD
Иногда бывает необходимость изменить всем (или многим) пользователям свойства учетки. Например, формат номера телефона...
В связи с изменениями в правилах набора телефонных номеров, появилась необходимость в быстром и глобальном редактировании корпоративной адресной книге. 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 в поле Мобильный. По результатам создает лог.
Post new comment