2012-11-15 40 views
5

Tôi đang cố thêm một vị trí (phạm vi) vào chỉ mục tìm kiếm của Windows 8 theo lập trình. Sau khi một số googling, tôi thấy mã này từ [here]:Làm cách nào để thêm chỉ mục tìm kiếm vào cửa sổ 7/8 bằng hàng loạt hoặc vbscript?

Set objISAdm = CreateObject("Microsoft.ISAdm") 
Set objCatalog = objISAdm. GetCatalogByName("MyCatatlog") 
Set objScope= objCatalog.AddScope("C:\myfiles",False) 
objScope.Alias = "MyCatalogScope" 

Đáng tiếc là một lỗi 800a01ad nhắc nhở cho thấy đối tượng 'Microsoft.ISAdm' không thể được tạo ra. Với một số đào sâu hơn, có vẻ như mã trên không hoạt động với phiên bản Windows Search mới hơn trên Windows 8.

Có ai biết cách làm điều đó bằng cách sử dụng tập lệnh vb hoặc từ dòng lệnh không? Giả sử một cái gì đó hoạt động dưới cửa sổ 7 cũng sẽ hoạt động trên windows 8.

Trả lời

2

Trong mã bạn đã cung cấp, bạn đang cố sử dụng Indexing service interface. Các dịch vụ lập chỉ mục không còn có sẵn trong Windows 8. Từ các tài liệu:

Indexing Service không còn được hỗ trợ như Windows XP và là không có sẵn để sử dụng như của Windows 8. Thay vào đó, sử dụng Windows Search cho khách hàng tìm kiếm bên và Microsoft Search Server Express cho phía máy chủ tìm kiếm.

Khi trạng thái tài liệu, bạn sẽ muốn xem xét Windows Search.

UPDATE:

Tôi đã không làm điều này, nhưng để đạt được những gì bạn đang tìm kiếm sự documentation bang

Trước khi có thể sử dụng bất kỳ thu thập thông tin Phạm vi Manager (CSM) giao diện, bạn phải thực hiện các bước điều kiện tiên quyết sau:

  1. Tạo đối tượng Trình quản lý tìm kiếm thu thập thông tin và nhận giao diện ISManager.
  2. Gọi ISearchManager :: GetCatalog cho "SystemIndex" để có được một thể hiện của giao diện ISearchCatalogManager.
  3. Gọi ISearchCatalogManager :: GetCrawlScopeManager để có được phiên bản giao diện ISearchCrawlScopeManager.

Sau khi thực hiện bất kỳ thay đổi nào đối với Trình quản lý phạm vi thu thập thông tin (CSM), bạn phải gọi ISearchCrawlScopeManager :: SaveAll. Phương thức này không có tham số và trả về S_OK khi thành công.

Dưới đây là một exampleanother để thực hiện việc này. Thật không may, tôi không nghĩ rằng điều này có thể được thực hiện từ VBScript, bởi vì COM interfaces được cung cấp bởi Windows Search API không thực hiện giao diện IDispatch, cho phép các ngôn ngữ kịch bản như VBScript gọi các đối tượng COM qua late binding.

Có phải từ VBScript hoặc bạn có thể làm điều đó trong .NET không? Nếu nó phải là từ VBScript thì một cách tiếp cận sẽ là viết một wrapper trong .NET và expose nó như là một đối tượng COM.

+0

Cảm ơn bạn Garett. Thông tin bạn cung cấp chính xác là những gì tôi tìm thấy từ MSDN. Tôi nghĩ rằng bằng cách sử dụng ISearchCrawlScopeManager :: AddRoot phương pháp là đúng hướng. Nhưng tôi không phải là một lập trình VB/VBS, bạn có thể cho tôi một số mã hoạt động không? – user24442

+0

Có ai có ý tưởng làm thế nào để sử dụng phương pháp ISearchCrawlScopeManager :: AddRoot? – user24442

+0

Cảm ơn bạn Garett lần nữa! Nó sẽ là một chút quá phức tạp Nếu nó phải được thực hiện với nhị phân thực thi. Tôi hỏi vì tôi muốn tự động thêm vị trí vào chỉ mục sau khi thiết lập cửa sổ không giám sát. Câu trả lời của bạn có giá trị. Nó cứu tôi khỏi việc đuổi theo ma. – user24442

4

Garett, bạn là một thiên tài!Đây là mã tôi học được từ các liên kết mà bạn cung cấp:

#Code copied from "Powershell Tackles Windows Desktop Search" http://powertoe.wordpress.com/2010/05/17/powershell-tackles-windows-desktop-search/ 
#Microsoft.Search.Interop.dll is needed, download from http://www.microsoft.com/en-us/download/details.aspx?id=7388 
#Load the dll 
Add-Type -path "D:\Unattend\UserFiles\Tools\Microsoft.Search.Interop.dll" 
#Create an instance of CSearchManagerClass 
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 
#Next we connect to the SystemIndex catalog 
$catalog = $sm.GetCatalog("SystemIndex") 
#Get the interface to the scope rule manager 
$crawlman = $catalog.GetCrawlScopeManager() 
#add scope 
$crawlman.AddUserScopeRule("file:///D:\*",$true,$false,$null) 
$crawlman.SaveAll() 

Lưu mã như AddScope.ps1, và chạy nó từ một cmd console cao:

PowerShell Set-ExecutionPolicy Unrestricted -force 
PowerShell D:\Unattend\UserFiles\AddScope.ps1 

Vậy là xong!