2012-11-15 9 views
5

Sto provando ad aggiungere una posizione (scope) all'indice di ricerca di Windows 8 a livello di programmazione. Dopo un po 'googling, ho trovato questo codice da [here]:Come aggiungere una posizione all'indice di ricerca di Windows 7/8 usando batch o vbscript?

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

Purtroppo un errore di 800A01AD prompt suggerendo oggetto 'Microsoft.ISAdm' non può essere creato. Con qualche ulteriore ricerca, sembra che il codice sopra non funzioni con la versione più recente di Windows Search su Windows 8.

Qualcuno sa come farlo usando gli script vb o dalla riga di comando? Presumibilmente qualcosa funziona con Windows 7 funzionerà anche su Windows 8.

risposta

2

Nel codice fornito si sta tentando di utilizzare Indexing service interface. Il servizio di indicizzazione non è più disponibile in Windows 8. Dalla documentazione:

servizio di indicizzazione non è più supportato a partire da Windows XP ed è disponibile per l'utilizzo come di Windows 8. Invece, utilizzare Windows Search per cliente ricerca laterale e Microsoft Search Server Express per ricerca server lato .

Come indica la documentazione, è necessario esaminare Windows Search.

UPDATE:

io non ho fatto questo, ma per realizzare ciò che si sta cercando i documentation stati

Prima di utilizzare una qualsiasi delle Crawl Scope Manager (CSM) interfacce, voi deve eseguire i seguenti passaggi prerequisiti:

  1. Creare l'oggetto CrawlSearchManager e ottenere la sua interfaccia ISearchManager.
  2. Chiama ISearchManager :: GetCatalog per "SystemIndex" per ottenere un'istanza di un'interfaccia ISearchCatalogManager.
  3. Chiama ISearchCatalogManager :: GetCrawlScopeManager per ottenere un'istanza dell'interfaccia ISearchCrawlScopeManager.

Dopo aver apportato le modifiche al Crawl Scope Manager (CSM), è necessario chiamare ISearchCrawlScopeManager :: SaveAll. Questo metodo non accetta parametri e restituisce S_OK in caso di successo.

Ecco uno example e another per farlo.

Purtroppo, non credo che questo può essere fatto da VBScript, perché il COM interfaces fornito da Windows Search API non implementa l'interfaccia IDispatch, che consente ai linguaggi di scripting come VBScript per chiamare oggetti COM tramite late binding.

Deve provenire da VBScript o è possibile farlo in .NET? Se deve essere da VBScript, un approccio sarebbe scrivere un wrapper in .NET e expose come un oggetto COM.

+0

Grazie, Garett. Le informazioni che hai fornito sono esattamente ciò che ho trovato da MSDN. Penso che l'uso del metodo ISearchCrawlScopeManager :: AddRoot sia nella giusta direzione. Ma io non sono un programmatore VB/VBS, puoi darmi dei codici di lavoro? – user24442

+0

Qualcuno ha idea di come usare il metodo ISearchCrawlScopeManager :: AddRoot? – user24442

+0

Grazie ancora Garett! Sarà un po 'troppo complicato Se deve essere fatto con binario eseguibile. Sto chiedendo perché voglio aggiungere automaticamente una posizione all'indice dopo un'installazione di Windows incustodita. La tua risposta è preziosa. Mi ha salvato dall'inseguire il fantasma. – user24442

4

Garett, sei un genio!Questo è il codice che ho imparato dai link che hai fornito:

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

Salvare il codice come AddScope.ps1, ed eseguirlo da una console cmd elevata:

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

Questo è tutto!