2016-09-16 21 views
1

私たちはこれまでに増え続けるWindows Search DB(マイクロソフトのヘルプでさえも)に何の解決策も見出さなかったので、特定の限界に達するとSCOMによってDBを定期的に再構築することに決めました。これは、Windows Server 2012 R2に関連しています。PowerShellを使用してWindows検索インデックスを再構築する方法?

このため、ISearchCatalogManagerインターフェイスに属するResetまたはReindexメソッドを呼び出すPowerShellスクリプトが必要です。

は、これまでのところ私は、次のを思い付いた:

# Load DLL containing classes & interfaces 
Add-Type -path "C:\Temp\SearchIndex\Microsoft.Search.Interop.dll" 

# Create new ISearchManager object 
$sm = New-Object Microsoft.Search.Interop.ISearchManager 

# should return ISearchCatalogManager object 
$catalog = $sm.GetCatalog("SystemIndex") 

# Call the method 
$catalog.Reindex() 

これは、しかし、次の例外がスローされます:私はここで間違って

New-Object : A constructor was not found. Cannot find an appropriate constructor for type Microsoft.Search.Interop.ISearchManager. 
At C:\Users\myuser\Desktop\test.ps1:8 char:6 
+ $sm = New-Object Microsoft.Search.Interop.ISearchManager 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (:) [New-Object], PSArgumentException 
    + FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand 

何をしているのですか?

+1

インターフェイスをインスタンス化しようとしています。これは、正しいCoClassを透過的にマジックアップするので、C#では "機能"しますが、あなたが求めるものを得るPowerShellではそうではありません。アセンブリに 'SearchManagerClass'が含まれていますか? –

+0

ご清聴ありがとうございます。アセンブリに 'CSearchManagerClass'が含まれていますが、' GetCatalog() 'を呼び出すと' Reindex() 'や' Rebuild() 'メソッドが含まれていません。 – Matze

答えて

0

私はMicrosoft.Search.Interop.dllの古いバージョンを使用していたことが判明しました。

まずダウンロードマイクロソフトからWindows Search 3.x SDK:ここ

は、私はそれを解決する方法です。システム要件に関する部分は無視してください。必要なDLLは2012 R2でも使用できます(8.1の場合もあります)。その後、PowerShellコードを使用して検索インデックスをリセットします。

# Load DLL containing classes & interfaces 
Add-Type -path "C:\Temp\SearchIndexSdk\Microsoft.Search.Interop.dll" 

# Provides methods for controlling the Search service. This 
# interface manages settings and objects that affect the search engine 
# across catalogs. 
# 
# https://msdn.microsoft.com/en-us/library/bb231485(v=vs.85).aspx 
$sm = New-Object Microsoft.Search.Interop.CSearchManagerClass 

# Retrieves a catalog by name and creates a new ISearchCatalogManager 
# object for that catalog. 
$catalog = $sm.GetCatalog("SystemIndex") 

# Resets the underlying catalog by rebuilding the databases 
# and performing a full indexing. 
# 
# https://msdn.microsoft.com/en-us/library/bb266414(v=vs.85).aspx 
$catalog.Reset() 
関連する問題