如何从搜索索引器性能计数器获取有用的信息?

如何从搜索索引器性能计数器获取有用的信息?

我一直在尝试找到一种以编程方式获取索引进度信息的方法(还有多少文件需要处理或“索引已完成”)。我偶然发现了 Win32_PerfFormattedData_WSearchIdxPi_SearchIndexer 类,它显示的零的数量让我感到惊讶,尤其是“IndexSize”旁边的零。

在此处输入图片描述

索引选项显示已索引 5055 个项目,因此,以我简单的想法来说,索引的大小应该是非零的。

在此处输入图片描述

这些零代表什么信息?我是不是看错了类别?如果是,我应该做些什么来得到不同的数字吗?

这是在 Windows 8.1 上,但我实际上想在其上执行此类操作的计算机是 Windows 7 和 Windows 10 系统。

我现在正在使用 Windows 10 计算机,它看起来有点不同。ActiveConnections 在这里显示 2 而不是 0。我还注意到,在两台计算机上,FormattedData 中缺少的一些属性 Frequency_Sys100NS 都显示在 RawData 中:

原始数据:

PS C:\WINDOWS\system32> gwmi Win32_PerfRawData_WSearchIdxPi_SearchIndexer


__GENUS                    : 2
__CLASS                    : Win32_PerfRawData_WSearchIdxPi_SearchIndexer
__SUPERCLASS               : Win32_PerfRawData
__DYNASTY                  : CIM_StatisticalInformation
__RELPATH                  : Win32_PerfRawData_WSearchIdxPi_SearchIndexer.Name="SystemIndex"
__PROPERTY_COUNT           : 72
__DERIVATION               : {Win32_PerfRawData, Win32_Perf, CIM_StatisticalInformation}
__SERVER                   : WRW-MXM0121
__NAMESPACE                : root\cimv2
__PATH                     : \\WRW-MXM0121\root\cimv2:Win32_PerfRawData_WSearchIdxPi_SearchIndexer.Name="SystemIndex"
ActiveConnections          : 2
Caption                    : 
CleanWidSets               : 0
Description                : 
DirtyWidSets               : 0
DocumentsFiltered          : 0
Frequency_Object           : 0
Frequency_PerfTime         : 0
Frequency_Sys100NS         : 10000000
IndexSize                  : 0
L0IndexesWordlists         : 1
L0MergeFlushCount          : 0
L0MergeFlushSpeedAverage   : 0
L0MergeFlushSpeedLast      : 0
L0MergesflushesNow         : 0
L1MergeCount               : 0
L1MergesNow                : 0
L1MergeSpeedaverage        : 0
L1MergeSpeedlast           : 0
L2MergeCount               : 0
L2MergesNow                : 0
L2MergeSpeedaverage        : 0
L2MergeSpeedlast           : 0
L3MergeCount               : 0
L3MergesNow                : 0
L3MergeSpeedaverage        : 0
L3MergeSpeedlast           : 0
L4MergeCount               : 0
L4MergesNow                : 0
L4MergeSpeedaverage        : 0
L4MergeSpeedlast           : 0
L5MergeCount               : 0
L5MergesNow                : 0
L5MergeSpeedaverage        : 0
L5MergeSpeedlast           : 0
L6MergeCount               : 0
L6MergesNow                : 0
L6MergeSpeedaverage        : 0
L6MergeSpeedlast           : 0
L7MergeCount               : 0
L7MergesNow                : 0
L7MergeSpeedaverage        : 0
L7MergeSpeedlast           : 0
L8MergeCount               : 0
L8MergesNow                : 0
L8MergeSpeedaverage        : 0
L8MergeSpeedlast           : 0
MasterIndexLevel           : 0
MasterMergeProgress        : 0
MasterMergesNow            : 0
MasterMergestoDate         : 0
Name                       : SystemIndex
PersistentIndexes          : 4
PersistentIndexesL1        : 0
PersistentIndexesL2        : 0
PersistentIndexesL3        : 0
PersistentIndexesL4        : 0
PersistentIndexesL5        : 0
PersistentIndexesL6        : 0
PersistentIndexesL7        : 0
PersistentIndexesL8        : 0
Queries                    : 520
QueriesFailed              : 1
QueriesSucceeded           : 519
ShadowMergeLevels          : 0
ShadowMergeLevelsThreshold : 0
Timestamp_Object           : 0
Timestamp_PerfTime         : 0
Timestamp_Sys100NS         : 131122139817760000
UniqueKeys                 : 0
WorkItemsCreated           : 0
WorkItemsDeleted           : 0
PSComputerName             : WRW-MXM0121

格式化数据:

PS C:\WINDOWS\system32> gwmi Win32_PerfRawData_WSearchIdxPi_SearchIndexer
__GENUS                    : 2
__CLASS                    : Win32_PerfFormattedData_WSearchIdxPi_SearchIndexer
__SUPERCLASS               : Win32_PerfFormattedData
__DYNASTY                  : CIM_StatisticalInformation
__RELPATH                  : Win32_PerfFormattedData_WSearchIdxPi_SearchIndexer.Name="SystemIndex"
__PROPERTY_COUNT           : 72
__DERIVATION               : {Win32_PerfFormattedData, Win32_Perf, CIM_StatisticalInformation}
__SERVER                   : WRW-MXM0121
__NAMESPACE                : root\cimv2
__PATH                     : \\WRW-MXM0121\root\cimv2:Win32_PerfFormattedData_WSearchIdxPi_SearchIndexer.Name="SystemIn
                             dex"
ActiveConnections          : 2
Caption                    : 
CleanWidSets               : 0
Description                : 
DirtyWidSets               : 0
DocumentsFiltered          : 0
Frequency_Object           : 
Frequency_PerfTime         : 
Frequency_Sys100NS         : 
IndexSize                  : 0
L0IndexesWordlists         : 1
L0MergeFlushCount          : 0
L0MergeFlushSpeedAverage   : 0
L0MergeFlushSpeedLast      : 0
L0MergesflushesNow         : 0
L1MergeCount               : 0
L1MergesNow                : 0
L1MergeSpeedaverage        : 0
L1MergeSpeedlast           : 0
L2MergeCount               : 0
L2MergesNow                : 0
L2MergeSpeedaverage        : 0
L2MergeSpeedlast           : 0
L3MergeCount               : 0
L3MergesNow                : 0
L3MergeSpeedaverage        : 0
L3MergeSpeedlast           : 0
L4MergeCount               : 0
L4MergesNow                : 0
L4MergeSpeedaverage        : 0
L4MergeSpeedlast           : 0
L5MergeCount               : 0
L5MergesNow                : 0
L5MergeSpeedaverage        : 0
L5MergeSpeedlast           : 0
L6MergeCount               : 0
L6MergesNow                : 0
L6MergeSpeedaverage        : 0
L6MergeSpeedlast           : 0
L7MergeCount               : 0
L7MergesNow                : 0
L7MergeSpeedaverage        : 0
L7MergeSpeedlast           : 0
L8MergeCount               : 0
L8MergesNow                : 0
L8MergeSpeedaverage        : 0
L8MergeSpeedlast           : 0
MasterIndexLevel           : 0
MasterMergeProgress        : 0
MasterMergesNow            : 0
MasterMergestoDate         : 0
Name                       : SystemIndex
PersistentIndexes          : 4
PersistentIndexesL1        : 0
PersistentIndexesL2        : 0
PersistentIndexesL3        : 0
PersistentIndexesL4        : 0
PersistentIndexesL5        : 0
PersistentIndexesL6        : 0
PersistentIndexesL7        : 0
PersistentIndexesL8        : 0
Queries                    : 523
QueriesFailed              : 1
QueriesSucceeded           : 522
ShadowMergeLevels          : 0
ShadowMergeLevelsThreshold : 0
Timestamp_Object           : 
Timestamp_PerfTime         : 
Timestamp_Sys100NS         : 
UniqueKeys                 : 0
WorkItemsCreated           : 0
WorkItemsDeleted           : 0
PSComputerName             : WRW-MXM0121

下面是 mmc.exe 中搜索索引器性能计数器的示例(这也是在 Windows 10 计算机上,但在 Windows 8.1 计算机上看起来相同)。它只是一条在屏幕上移动的垂直线 - 在这种情况下,计数器是索引大小。

在此处输入图片描述

Powershell 的 get-counter 运行截图:

在此处输入图片描述

答案1

该 WMI 类似乎在某种程度上被破坏了。幸运的是,有一个解决方法,尽管它确实需要更多的工作。您需要下载Windows 搜索 3 SDK。这只是一个自解压的 ZIP 文件,您可以将文件放在任何您喜欢的位置。我们只对Microsoft.Search.Interop.dllManaged 文件夹下的一个文件感兴趣。将该 DLL 加载到 PowerShell 中:

Add-Type -Path "Microsoft.Search.Interop.dll"

那么你需要一个搜索管理器对象。如果你想获取本地机器的,只需这样:

$manager = New-Object Microsoft.Search.Interop.CSearchManagerClass

如果您想访问远程机器,那么是时候绕道了。


我们需要 COM 类的 GUID,它是我从某个 C 头文件中提取出来的:

$guid = New-Object guid "{7D096C5F-AC08-4F1F-BEB7-5C22C517CE39}"

我们将以这样一种方式创建 COM 类型,以便 Windows 为我们执行 RPC:

$managerType = [Type]::GetTypeFromCLSID($guid, $targetMachine, $true)

实例化类型:

$comManager = [Activator]::CreateInstance($managerType)

将该 COM 对象重新转换为普通 .NET 对象:

$manager = [System.Runtime.InteropServices.Marshal]::CreateWrapperOfType($comManager, [Microsoft.Search.Interop.CSearchManagerClass])

绕行完成。该对象现在将引用目标机器的搜索管理器。


然后得到目录对象对于主目录:

$cat = $manager.GetCatalog("SystemIndex")

GetCatalogStatus功能告诉您它当前是否正在进行索引,但该函数使用“out”参数,因此我们需要传递引用:

$indexStatus = 0
$indexPauseReason = 0
$cat.GetCatalogStatus([ref]$indexStatus, [ref]$indexPauseReason)

如果您强制将这两个变量设置为字符串,它们现在将包含一个模糊的人类可读状态。[string]$indexStatus目前为我生成CATALOG_STATUS_PAUSED。如果索引器暂停,则第二个变量就是它不工作的原因。

获取索引项目的数量非常容易:

$cat.NumberOfItems()

当没有更多内容需要索引时,Windows 可能已完成索引,因此我们将使用NumberOfItemsToIndex函数,再次引用:

$incrementalCount = 0
$notificationQueue = 0
$highPriQueue = 0
$cat.NumberOfItemsToIndex([ref]$incrementalCount, [ref]$notificationQueue, [ref]$highPriQueue)

如果这三个变量都为零,则索引完成。

所有这些功能在 Windows 8.1 上都给出了预期/正确的结果,而 WMI 对我的作用与对您的作用相同。

答案2

相关内容