Как добавить местоположение в поисковый индекс Windows 7/8, используя пакет или vbscript?
Я пытаюсь добавить местоположение (область) в мой индекс поиска Windows 8 программным путем. После некоторого поиска в Google я нашел этот код из [здесь]:
Set objISAdm = CreateObject("Microsoft.ISAdm")
Set objCatalog = objISAdm. GetCatalogByName("MyCatatlog")
Set objScope= objCatalog.AddScope("C:\myfiles",False)
objScope.Alias = "MyCatalogScope"
К сожалению, ошибка 800A01AD подсказывает, что объект "Microsoft.ISAdm" не может быть создан. При дальнейшем копании кажется, что приведенный выше код не работает с более новой версией Windows Search в Windows 8.
Кто-нибудь знает, как это сделать с помощью скриптов VB или из командной строки? Предположительно что-то работает под Windows 7 будет работать на Windows 8, а также.
2 ответа
Гаретт, ты гений! Вот код, который я узнал по предоставленным вами ссылкам:
#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 и запустите его из консоли с повышенными правами:
PowerShell Set-ExecutionPolicy Unrestricted -force
PowerShell D:\Unattend\UserFiles\AddScope.ps1
Это оно!
В предоставленном вами коде вы пытаетесь использовать интерфейс службы индексирования. Служба индексирования больше не доступна в Windows 8. Из документации:
Служба индексирования больше не поддерживается в Windows XP и недоступна для использования в Windows 8. Вместо этого используйте поиск Windows для поиска на стороне клиента и Microsoft Search Server Express для поиска на стороне сервера.
Как указано в документации, вы захотите заглянуть в Windows Search.
ОБНОВИТЬ:
Я не сделал этого, но для достижения того, что вы ищете, говорится в документации
Прежде чем вы сможете использовать любой из интерфейсов Crawl Scope Manager (CSM), вы должны выполнить следующие обязательные шаги:
- Создайте объект CrawlSearchManager и получите его интерфейс ISearchManager.
- Вызовите ISearchManager::GetCatalog для "SystemIndex", чтобы получить экземпляр интерфейса ISearchCatalogManager.
- Вызовите ISearchCatalogManager::GetCrawlScopeManager, чтобы получить экземпляр интерфейса ISearchCrawlScopeManager.
После внесения любых изменений в Crawl Scope Manager (CSM) вы должны вызвать ISearchCrawlScopeManager::SaveAll. Этот метод не принимает параметров и возвращает S_OK в случае успеха.
Вот один пример и другой для этого.
К сожалению, я не думаю, что это можно сделать из VBScript, потому что интерфейсы COM, предоставляемые API поиска Windows, не реализуют интерфейс IDispatch, который позволяет языкам сценариев, таким как VBScript, вызывать объекты COM с помощью позднего связывания.
Это должно быть из VBScript, или вы можете сделать это в.NET? Если это должно быть из VBScript, то одним из подходов было бы написать обертку в.NET и представить ее как объект COM.