|
|
|
Экспорт из AD через LDAP на ASP
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Делаю экспорт юзеров из AD, через wsh-скрипт руками запускаю - работает, хочу на asp-страницу перевести на том же сервере - не работает, ошибка всегда одна - 80040e37|Таблица_не_существует. В инете везде пишут, что проблема в синтаксисе обращения к LDAP, но проблема не в этом, т.к. скрипт wsh отрабатывает корректно. Неужели проблема в правах? Руками запускаю от имени доменного пользователя, а IIS (который в итоге и запускает мой asp) от системной учетной записи запущен неконтроллера домена. Что делать в таком случае? И почему ошибка не про доступ, а про ненайденную таблицу? Вот WSH код, который работает: Option Explicit Const ADS_SCOPE_SUBTREE = 2 Const ForAppending = 8 Const ForWriting = 2 Dim objConn Dim objCommand Dim objRS Dim objUser Dim objFso, objF Dim objRootDSE Dim str Dim i Set objConn = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") Set objFso = CreateObject("Scripting.FileSystemObject") Set objRootDSE = GetObject("LDAP://rootDSE") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConn objCommand.CommandText = "Select AdsPath, cn from 'LDAP://" & objRootDSE.Get("defaultNamingContext") & _ "' Where objectCategory = 'person' and objectClass='user'" WScript.Echo CStr(objRootDSE.Get("defaultNamingContext")) objCommand.Properties("Page Size") = 10000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRS = objCommand.Execute objRS.MoveFirst Set objF = objFso.OpenTextFile("users.txt", ForWriting, True) objF.Write "" objF.Close Set objF = objFso.OpenTextFile("users.txt", ForAppending, True) WScript.Echo "Export started" WScript.Echo WScript.Echo "Total users: " & CStr(objRS.RecordCount) WScript.Echo WScript.Echo "Please wait ..." WScript.Echo On Error Resume Next i = 0 Do Until objRS.EOF Set objUser = GetObject(objRS.Fields("AdsPath").Value) i = i + 1 str = "Login=" & objUser.Get("sAMAccountName") & vbCrLf str = str & "Description=" & objUser.Description & vbCrLf str = str & "Phone=" & objUser.TelephoneNumber & vbCrLf str = str & "Email=" & objUser.EmailAddress & vbCrLf str = str & "Department=" & objUser.Department & vbCrLf str = str & "Office=" & objUser.OfficeLocations & vbCrLf str = str & "GUID=" & objUser.Guid & vbCrLf If objUser.AccountDisabled Then str = str & "Account disabled" & vbCrLf End If str = str & "LastName=" & objUser.LastName & vbCrLf str = str & "FirstName=" & objUser.FirstName & vbCrLf str = str & "PasswordLastChanged=" & CStr(objUser.PasswordLastChanged) & vbCrLf str = str & "========================================" & vbCrLf objF.Write str objRS.MoveNext Loop WScript.Echo "Finished" WScript.Echo objF.Close objRS.Close objConn.Close Set objCommand = Nothing Set objRS = Nothing Set objConn = Nothing Set objF = Nothing Set objFso = Nothing Вот asp-код, который валится с той ошибкой: <% Const ADS_SCOPE_SUBTREE = 2 Const ForAppending = 8 Const ForWriting = 2 Dim objConn Dim objCommand Dim objRS Dim objUser Dim objFso, objF Dim objRootDSE Dim str Dim i Set objConn = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") Set objFso = CreateObject("Scripting.FileSystemObject") Set objRootDSE = GetObject("LDAP://rootDSE") objConn.Provider = "ADsDSOObject" objConn.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConn objCommand.CommandText = "Select AdsPath, cn from 'LDAP://" & objRootDSE.Get("defaultNamingContext") & "' Where objectCategory = 'person' and objectClass='user'" objCommand.Properties("Page Size") = 10000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE Set objRS = objCommand.Execute objRS.MoveFirst Set objF = objFso.OpenTextFile("users.txt", ForWriting, True) objF.Write "" objF.Close Set objF = objFso.OpenTextFile("users.txt", ForAppending, True) Response.Write "Export started" Response.Write " " Response.Write "Total users: " & CStr(objRS.RecordCount) Response.Write " " Response.Write "Please wait ..." Response.Write " " On Error Resume Next i = 0 Do Until objRS.EOF Set objUser = GetObject(objRS.Fields("AdsPath").Value) i = i + 1 str = "Login=" & objUser.Get("sAMAccountName") & vbCrLf str = str & "Description=" & objUser.Description & vbCrLf str = str & "Phone=" & objUser.TelephoneNumber & vbCrLf str = str & "Email=" & objUser.EmailAddress & vbCrLf str = str & "Department=" & objUser.Department & vbCrLf str = str & "Office=" & objUser.OfficeLocations & vbCrLf str = str & "GUID=" & objUser.Guid & vbCrLf If objUser.AccountDisabled Then str = str & "Account disabled" & vbCrLf End If str = str & "LastName=" & objUser.LastName & vbCrLf str = str & "FirstName=" & objUser.FirstName & vbCrLf str = str & "PasswordLastChanged=" & CStr(objUser.PasswordLastChanged) & vbCrLf str = str & "========================================" & vbCrLf objF.Write str objRS.MoveNext Loop Response.Write "Finished" Response.Write " " objF.Close objRS.Close objConn.Close Set objCommand = Nothing Set objRS = Nothing Set objConn = Nothing Set objF = Nothing Set objFso = Nothing %> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2007, 16:25 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=211&tid=2163081]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 324ms |

| 0 / 0 |
