지금까지이 질문에는 조회수가 7 회 밖에 없었으나 "Tumbleweed"배지는 없었지만 최종 해결책에 대한 설명을 계속 진행할 것으로 생각했습니다.
CatAdm 개체를 사용하는 것이 실제로 유일한 옵션이었습니다. 이것이 원래의 게시물에 언급 된 별칭과 관련된 인덱싱 서비스의 버그를 해결할 수있는 유일한 방법이기 때문입니다.
ASP.NET에서 비교적 쉽고 ASP Classic에서 동일한 기능의 COM 구성 요소를 사용할 수있는 한 가지 방법은 가장을 사용하는 것입니다. 권한있는 계정을 사용하여 CatAdm 개체를 만든 다음 승인 된 HTTP 요청의 계정을 사용하여 해당 범위에 대한 쿼리를 수행합니다. 결과에는 계정이 액세스 할 수있는 디렉토리 만 포함됩니다.
문제는 관리자 계정에만 CatAdm 개체를 사용할 수있는 권한이 있으며 관리자 계정을 사용하여 HTTP 요청을 처리하는 것은 보안상의 관점에서 좋지 않은 점입니다.
그래서 관리자 부담이 가중되지만 카탈로그를 추가하거나 제거 할 때마다 (HTTP가 아닌 서버 시스템 자체에서) 실행해야하는 별도의 HTA 스크립트를 작성하기로 결정했습니다. 스크립트는 CatAdm 개체에서 범위의 목록을 읽고 구성 파일에 기록합니다 :
Function makeConfig(catalogName)
Set machine = CreateObject("Shell.LocalMachine")
Set adm = CreateObject("Microsoft.ISAdm")
Set cat = adm.GetCatalogByName(catalogName)
Dim config
config = "<%" & vbCrLf
config = config & "' Automatically generated by " & document.location.pathname & " at " & Now & vbCrLf
config = config & "' This file is indended for inclusion by the intranet search script." & vbCrLf
config = config & "catalogMachine = """ & machine.MachineName & """" & vbCrLf
config = config & "catalogName = """ & catalogName & """" & vbCrLf
scopeFound = cat.FindFirstScope()
While scopeFound
Set scope = cat.GetScope()
If Not scope.ExcludeScope Then
' Must be lowercase because query results are returned in lowercase
dir = lcase(scope.Path)
If scope.Alias <> "" Then
alias = scope.Alias
Else
alias = scope.Path
End If
config = config & "dirs(""" & dir & """) = """ & alias & """" & vbCrLf
End If
scopeFound = cat.FindNextScope()
Wend
config = config & "%>" & vbCrLf
makeConfig = config
End Function
그런 다음 검색 스크립트 자체는 구성 파일을 읽고 접근 디렉토리의 목록을 찾으려면이를 사용합니다. 인덱싱 서비스 버그를 해결하려면 실제 디렉터리에서 별칭으로 매핑해야합니다.
Set dirs = CreateObject("Scripting.Dictionary")
%><!--#include file="search_config.asp"--><%
catalogURI = "query://" & catalogMachine & "/" & catalogName
queryString = ""
For Each dir In dirs
If queryString <> "" Then
queryString = queryString & " or "
End If
queryString = queryString & "@Path = """ & dir & """"
Next
' But the @Path attribute is not indexed, and running queryString
' as is will return no results. Solution: limit search to only
' directories, i.e. items with the 0x10 flag set in @Attrib.
queryString = "@Attrib ^a 0x10 and (" & queryString & ")"
' No point asking for sorted query results, because we need
' to map the results from real paths to network aliases and
' sort again ourselves.
Set query = Server.CreateObject("ixsso.Query")
query.Catalog = catalogURI
query.Query = queryString
query.Columns = "path"
query.MaxRecords = dirs.Count
Set rs = query.CreateRecordSet("sequential")
i = 0
Do While Not rs.EOF
ReDim Preserve accessibleAliases(i)
accessibleAliases(i) = dirs(rs("path").Value)
i = i + 1
rs.MoveNext
Loop
rs.Close
BubbleSort accessibleAliases