none
Не работает скрипт RRS feed

  • Вопрос

  • У меня есть скрипт, который должен выводить время окончания учетной записи пользователя student1:
    On Error Resume Next
    
    Set objUser = GetObject("LDAP://CN=Student1,OU=Отдел разр.и сопров.прикл.прогр.обесп,OU=Служба информ.технологий,OU=Департамент безопасности мореплавания,OU=Пользователи локальной сети ММП,DC=hq,DC=msco,DC=ru")
     
    WScript.Echo "User accountExpires: " & objUser.accountExpires
    
    Set objDomain = GetObject(LDAP://DC=hq,DC=msco,DC=ru)
    Проблема в том, что этот скрипт неработает, почему?
    Заранее спасибо
    12 августа 2009 г. 6:42

Ответы

  • Необходимо осуществить поиск всех пользователей в Active Directory. А потом для найденых пользователей получать значение атрибута.

    Вообще, посмотри примеры скриптов по поиску пользователей в AD на сайте MS:

    http://www.microsoft.com/technet/scriptcenter/scripts/ad/search/users/default.mspx

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    • Помечено в качестве ответа Ванёк 13 августа 2009 г. 8:26
    12 августа 2009 г. 13:04

Все ответы

  • Скрипт не работает потому, что значение атрибута "accountExpires" - число типа LargeInteger (64 bit)
    В скрипте необходимо предусмотреть перевод значения атрибута в "нормальный" вид (демаршалинг)
    либо получать время окончания УЗ другим способом, например:

    Set objUser = GetObject("LDAP://CN=Student1,OU=Отдел разр.и сопров.прикл.прогр.обесп,OU=Служба информ.технологий,OU=Департамент безопасности мореплавания,OU=Пользователи локальной сети ММП,DC=hq,DC=msco,DC=ru")

    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If Err.Number = -2147467259 OR dtmAccountExpiration = #1/1/1970# Then
        WScript.Echo "This account has no expiration date."
    Else
        WScript.Echo "Account expiration date: " & objUser.AccountExpirationDate
    End If

    http://www.microsoft.com/technet/scriptcenter/resources/qanda/jul05/hey0718.mspx

    -----------------------

    P.S. Значение атрибута accountExpires вы тоже получаете не правильно.
    Правильно так:

    Set objUser = GetObject("LDAP://CN=Student1,OU=Отдел разр.и сопров.прикл.прогр.обесп,OU=Служба информ.технологий,OU=Департамент безопасности мореплавания,OU=Пользователи локальной сети ММП,DC=hq,DC=msco,DC=ru")
    Set objAccExp = objUser.Get("accountExpires")
    ...

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    • Предложено в качестве ответа Vasily GusevModerator 12 августа 2009 г. 14:46
    12 августа 2009 г. 9:04
  • А как вывести время окончания УЗ сразу у всех рользователей?
    12 августа 2009 г. 10:35
  • Необходимо осуществить поиск всех пользователей в Active Directory. А потом для найденых пользователей получать значение атрибута.

    Вообще, посмотри примеры скриптов по поиску пользователей в AD на сайте MS:

    http://www.microsoft.com/technet/scriptcenter/scripts/ad/search/users/default.mspx

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    • Помечено в качестве ответа Ванёк 13 августа 2009 г. 8:26
    12 августа 2009 г. 13:04
  • Есть скрипт, который выводит данные о заблокированных рользователях (логин, имя, фамилия, DISABLE, и комментарий) в файл EXEL и HTML.
    Проблема в том, что поле Discription в EXEL файл записываеться, а в HTML нет, почему?

    On Error Resume Next
    ' Инициализируем переменные, необходимые для работы с AD
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    
    ' Для работы с Exel
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    objExcel.Workbooks.Add
    objRecordSet.MoveFirst
    
    ' Для Работы с файлом
    Dim fsObj, fileObj
    Set fsObj = CreateObject("Scripting.FileSystemObject")
    Set fileObj = fsObj.CreateTextFile("Заблокированные пользователи.htm", True)
    
    ' Выводим в файл стили и начало таблици
    fileObj.WriteLine("<HTML><BODY><TABLE  class=sort align=center>" _
    & "<thead><tr align=center><td>Фамилия</td><td>Имя</td><td>Логин</td><td>Disabled</td><td>Description</td></tr></thead><tbody>")
    objExcel.Cells(1, 1).Value = "Фамилия"
    objExcel.Cells(1, 2).Value = "Имя"
    objExcel.Cells(1, 3).Value = "Login"
    objExcel.Cells(1, 4).Value = "Disabled"
    objExcel.Cells(1, 5).Value = "Description"
    i = 2
    
    objCommand.Properties("Page Size") = 1000
    
    objCommand.CommandText = _
     "<LDAP://dc=hq,dc=*****,dc=**>;" & _
      "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=2));" & _
       "sAMAccountName, sn, givenName, description;Subtree"
    Set objRecordSet = objCommand.Execute
    
    objRecordSet.MoveFirst
    
    ' Выводим данные
    Do Until objRecordSet.EOF
     fam = objRecordSet.Fields("givenName").Value
     name = objRecordSet.Fields("sn").Value
     login = objRecordSet.Fields("sAMAccountName").Value
     description = objRecordSet.Fields("description").Value
     ' Выводим данные в Exel
     objExcel.Cells(i, 1).Value = fam
     objExcel.Cells(i, 2).Value = name
     objExcel.Cells(i, 3).Value = login
     objExcel.Cells(i, 4).Value = "Disabled"
     objExcel.Cells(i, 5).Value = description
     ' Выводим данные в файл
     fileObj.WriteLine("<TR><TD>&nbsp;" & fam & "</TD><TD>&nbsp;" & name & "</TD><TD>&nbsp;" & login & "</TD><TD>Disabled</TD><TD>&nbsp;" & description & "</TD></TR>")
     i = i + 1
     objRecordSet.MoveNext
    Loop
    
    fileObj.WriteLine("</tbody></TABLE></BODY></HTML>")
    
    
    24 августа 2009 г. 11:41
  • Проблема в том, что значение атрибута description - многострочное....
    Нужно изменить вот эту строчку

    fileObj.WriteLine("<TR><TD>&nbsp;" & fam & "</TD><TD>&nbsp;" & name & "</TD><TD>&nbsp;" & login & "</TD><TD>Disabled</TD><TD>&nbsp;" & description & "</TD></TR>")
     i = i + 1

    на

    fileObj.WriteLine("<TR><TD>&nbsp;" & fam & "</TD><TD>&nbsp;" & name & "</TD><TD>&nbsp;" & login & "</TD><TD>Disabled</TD><TD>&nbsp;" & description(0) & "</TD></TR>")
     i = i + 1


    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    24 августа 2009 г. 13:04
  • Чёто не совсем корректно работает, disctiption заменяю на discription(0),
    в EXEL файл все нормально выводиться, а в HTML файле выводятся данные только имеющие поле "Discription"
    25 августа 2009 г. 6:46
  • Чёто не совсем корректно работает, disctiption заменяю на discription(0),
    в EXEL файл все нормально выводиться, а в HTML файле выводятся данные только имеющие поле "Discription"
    Тогда так:

     ' Выводим данные в файл
     desc=""
     desc=desc & description(0)

     fileObj.WriteLine("<TR><TD>&nbsp;" & fam & "</TD><TD>&nbsp;" & name & "</TD><TD>&nbsp;" & login & "</TD><TD>Disabled</TD><TD>&nbsp;" & desc & "</TD></TR>")
     i = i + 1
     objRecordSet.MoveNext
    Loop

    Проверил - в таком варианте - точно работает.

    Если ответ Вам помог, нажмите на изображение зеленой галочки - «пометить как ответ». Если ответ был для Вас полезен, Вы можете пометить это сообщение как «полезное», нажав на ссылку "проголосовать за полезное сообщение" в правом верхнем углу сообщения.
    25 августа 2009 г. 8:22