6

我正在尝试以编程方式将位置(范围)添加到我的 Windows 8 搜索索引中,经过一番谷歌搜索后,我找到了以下代码:

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

不幸的是,800A01AD错误提示提示Microsoft.ISAdm无法创建对象;经过进一步挖掘,上述代码似乎不适用于 Windows 8 上较新版本的 Windows Search。

有谁知道如何使用 VB 脚本或命令行来做到这一点,大概在 Windows 7 下工作的东西也可以在 Windows 8 上工作?

4

2 回答 2

7

加雷特,你真是个天才!这是我从您提供的链接中学到的代码:

#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()

将代码另存为 AddScope.ps1,然后从提升的 cmd 控制台运行它:

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

而已!

于 2012-11-19T13:14:59.670 回答
2

在您提供的代码中,您正在尝试使用Indexing service interface。Windows 8 中不再提供索引服务。从文档中:

从 Windows XP 开始不再支持索引服务,并且从 Windows 8 开始无法使用。相反,使用 Windows Search 进行客户端搜索,使用 Microsoft Search Server Express 进行服务器端搜索。

正如文档所述,您将需要查看Windows Search

更新:

我没有这样做,但要完成您正在寻找的文档状态

在您可以使用任何 Crawl Scope Manager (CSM) 界面之前,您必须执行以下先决条件步骤:

  1. 创建 CrawlSearchManager 对象并获取其 ISearchManager 接口。
  2. 为“SystemIndex”调用 ISearchManager::GetCatalog 以获取 ISearchCatalogManager 接口的实例。
  3. 调用 ISearchCatalogManager::GetCrawlScopeManager 以获取 ISearchCrawlScopeManager 接口的实例。

对 Crawl Scope Manager (CSM) 进行任何更改后,您必须调用 ISearchCrawlScopeManager::SaveAll。此方法不接受任何参数,并在成功时返回 S_OK。

这是一个例子另一个例子。

不幸的是,我认为这不能通过 VBScript 完成,因为 Windows Search API 提供的 COM接口不实现IDispatch接口,它允许像 VBScript 这样的脚本语言通过后期绑定调用 COM 对象。

它必须来自 VBScript,还是可以在 .NET 中完成?如果它必须来自 VBScript,那么一种方法是在 .NET 中编写一个包装器并将其公开为一个 COM 对象。

于 2012-11-15T03:05:07.923 回答