Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Save the code below to a file named something like getNodeRunnerProcess.ps1 and then run it using any of the following:
To get all the noderunner processes on the current server:
- getNodeRunnerProcess.ps1
To get all the noderunner processes on a specified server:
- getNodeRunnerProcess.ps1 someServerName
To get the noderunner for a specific component name (assuming you only have one SSA in the farm and the name specified matches at least one of the active components):
- getNodeRunnerProcess.ps1 IndexComponent1
Code Sample:
if ($args[0] -ne $null) { $SSA = Get-SPEnterpriseSearchServiceApplication $firstParam = $args[0] $targetComponent = $SSA.ActiveTopology.GetComponents() | Where {$_.Name -ieq $firstParam} #if the command line arg specifies an existing search component if ($targetComponent -ne $null) { #Set the server name where this component is running $serverName = $targetComponent.ServerName #And set the $targetComponent as this parameter $targetComponentName = $firstParam } else { #assume the command line arg references another server $serverName = $firstParam }} else { #default to all components on this local server $serverName = $ENV:COMPUTERNAME} Write-Host ("Server: " + $serverName)if ($targetComponentName -ne $null) { Write-Host ("Comp: " + $targetComponentName)}Write-Host ("=======================================") $nodeRunnerProcesses = (Get-Process noderunner -ComputerName $serverName -ErrorAction SilentlyContinue)foreach ($noderunner in $nodeRunnerProcesses) { $noderunner | Add-Member -Force -MemberType NoteProperty -Name _ProcessCommandLine -Value $( (Get-WmiObject Win32_Process -ComputerName $serverName | where {$_.processId -eq $noderunner.id}).CommandLine ) if ($targetComponentName -ne $null) { if ($noderunner._ProcessCommandLine -ilike $("*" + $targetComponentName + "*")) { $noderunner } } else { $delimPos = $($noderunner._ProcessCommandLine).IndexOf("Nodes") $stub = $($noderunner._ProcessCommandLine).SubString($delimPos) $delimPos = $stub.IndexOf("`"") $derivedCompName = $stub.SubString(0,$delimPos) $derivedCompName Write-Host ("------------------------") $noderunner Write-Host }}
--------------Example Output--------------****
PS D:\toolbox> .\getNodeRunnerProcess.ps1
Server: SPServer5
=======================================
IndexComponent1
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
1612 157 511112 326368 1781 6,776.89 2488 noderunner
QueryProcessingComponent1
1885 208 365876 372716 -1142 651.38 2564 noderunner
PS D:\toolbox> .\getNodeRunnerProcess.ps1 spserver3
Server: SPServer3
=======================================
AdminComponent1
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
2070 192 543016 552396 1542 2680 noderunner
AnalyticsProcessingComponent1
1930 188 259624 272752 -1285 2912 noderunner
ContentProcessingComponent1
1959 208 847500 904156 47 2920 noderunner
PS D:\toolbox> .\getNodeRunnerProcess.ps1 AdminComponent1
Server: SPServer3
Comp: AdminComponent1
=======================================
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
2136 192 543084 552432 1544 2680 noderunner