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

时间:2012-11-15 02:01:19

标签: powershell vbscript windows-search

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

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。

2 个答案:

答案 0 :(得分: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()

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

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

就是这样!

答案 1 :(得分:2)

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

  

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

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

更新:

我没有这样做,而是要完成你所寻求的documentation

  

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

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

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

这是一个exampleanother

不幸的是,我不认为这可以通过VBScript完成,因为Windows Search API提供的COM interfaces没有实现IDispatch接口,这允许像VBScript这样的脚本语言通过late binding调用COM对象。

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