如何使用批处理或vbscript向Windows 7/8搜索索引添加位置?

use*_*442 5 vbscript powershell windows-search

我正在尝试以编程方式向我的Windows 8搜索索引添加位置(范围).经过一些谷歌搜索,我发现[这里]的代码:

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

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

有谁知道如何使用vb脚本或从命令行?据推测,在Windows 7下工作的东西也适用于Windows 8.

use*_*442 5

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

#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()
Run Code Online (Sandbox Code Playgroud)

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

PowerShell Set-ExecutionPolicy Unrestricted -force
PowerShell D:\Unattend\UserFiles\AddScope.ps1
Run Code Online (Sandbox Code Playgroud)

而已!


Gar*_*ett 2

在您提供的代码中,您尝试使用索引服务接口。Windows 8 中不再提供索引服务。来自文档:

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

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

更新:

我没有这样做,但为了完成您正在寻求的文档状态

在使用任何爬网范围管理器 (CSM) 界面之前,必须执行以下先决步骤:

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

对爬网范围管理器 (CSM) 进行任何更改后,必须调用 ISearchCrawlScopeManager::SaveAll。此方法不带任何参数,成功时返回 S_OK。

下面是执行此操作的一个和另一个示例。

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

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