Como posso obter informações úteis dos contadores de desempenho do Search Indexer?

4

Eu tenho tentado descobrir uma maneira de obter informações sobre o andamento da indexação programaticamente (quantos arquivos para ir ou "indexação completa"). Eu tropecei na classe Win32_PerfFormattedData_WSearchIdxPi_SearchIndexer e fiquei surpreso com o número de zeros que ele me mostrou, especialmente o zero ao lado de "IndexSize".

Asopçõesdeindexaçãomostram5055itensindexadosdemodoque,emminhaopinião,otamanhodoíndicedeveserdiferentedezero.

Qualéainformaçãoqueesseszerosrepresentam?Eunãoestouolhandoparaaaulacerta?Seeusou,devofazeralgoparaobternúmerosdiferentes?

IssoénoWindows8.1,masoscomputadoresnosquaiseurealmentegostariadefazercoisasdessetiposãoossistemasWindows7eWindows10.

EstoutrabalhandoemumamáquinacomWindows10agoraepareceumpoucodiferente.ActiveConnectionsmostra2emvezde0aqui.TambémnoteiqueemambososcomputadoresalgumasdaspropriedadesausentesemFormattedData,Frequency_Sys100NS,sãomostradasemRawData:

RawData:

PSC:\WINDOWS\system32>gwmiWin32_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

FormattedData:

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

E aqui está um exemplo de como os contadores de desempenho do Indexador de Pesquisa se parecem em mmc.exe (isso é novamente no computador Windows 10, mas tem a mesma aparência no computador Windows 8.1). É apenas uma linha vertical se movendo pela tela - o contador é Index Size neste caso.

EumacapturadeteladocontadordeganhosdoPowershellemação:

    
por Michał Masny 04.07.2016 / 22:22

1 resposta

3

Essa classe WMI parece estar quebrada de alguma forma. Felizmente, há uma solução alternativa, embora envolva um pouco mais de trabalho. Você precisará fazer o download do Windows Search 3 SDK . É apenas um ZIP de extração automática e você pode colocar os arquivos onde quiser. Estamos interessados apenas em um, Microsoft.Search.Interop.dll na pasta Gerenciada. Carregue essa DLL no PowerShell:

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

Em seguida, você precisa de um objeto do gerenciador de pesquisa . Se você quiser pegar o da máquina local, é só isso:

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

Se você quiser acessar uma máquina remota, é hora de um desvio.

Vamos precisar do GUID da classe COM, que eu extraí de algum cabeçalho C em algum lugar:

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

E vamos criar o tipo COM de tal forma que o Windows faça o RPC para nós:

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

Instancie o tipo:

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

Transforme esse objeto COM novamente em um objeto .NET normal:

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

Desvio completo. Esse objeto agora se referirá ao gerenciador de pesquisa da máquina de destino.

Em seguida, obtenha o objeto de catálogo para o catálogo principal:

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

A GetCatalogStatus function informa se está sendo indexada no momento, mas essa função usa parâmetros "out", por isso precisamos passar referências:

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

Essas duas variáveis agora contêm um status vagamente legível se você forçá-las a serem strings. Atualmente, [string]$indexStatus produz CATALOG_STATUS_PAUSED para mim. Se o indexador estiver em pausa, essa segunda variável é a razão pela qual ele não está funcionando.

Obter o número de itens indexados é bastante fácil:

$cat.NumberOfItems()

O Windows é presumivelmente feito indexação quando não há mais coisas para indexar, então usaremos o NumberOfItemsToIndex função, novamente com referências:

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

Se todas essas três variáveis forem zero, a indexação estará completa.

Todas essas funções fornecem os resultados esperados / corretos no Windows 8.1, enquanto o WMI faz para mim a mesma coisa que você fez para você.

    
por 07.07.2016 / 00:38