Blog Post

Ask the Directory Services Team
9 MIN READ

Assigning Process Accountability to Group Policy Refreshes

itaysarig's avatar
itaysarig
Icon for Microsoft rankMicrosoft
Mar 09, 2026

Hey All,

Gaurav and Itay here with some updates to the Group Policy Service debug logging.

What if you one day noticed that you had machines excessively reprocessing group policy? For a long time, GPSVC logging told you that a GP Refresh happened… but to many admins it was not clear why, not by whom, and not what process triggered it. Today we're going to talk about an update that addresses exactly that.

We are adding several pieces of attribution data that make the logs dramatically more useful:

  • Full Timestamps (now prints the date as well)
  • Trigger Type (Command Line, API, etc.)
  • Parent Process Path + PID
  • GPUpdate PID (PID of GPUpdate.exe)
  • Session ID
  • User Account Context

This behavior currently applies to Windows 11 versions 24H2 and 25H2, starting with the February 2026 preview updates or later.

Note: When the Server operating system update becomes available, we will update this article accordingly.

 

Next, let's go through some scenarios with examples!  

Scenario 1: Manual Group Policy Refresh 

In this scenario, someone has run gpupdate from command line or Run. 

Current Logging 

GPSVC.LOG: 

GPSVC(3650.36a0) 2026-01-01 07:01:02:493 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 1, dwTimeout = 600000, currentProcessId = 13904, processImageName = C:\Windows\System32\gpupdate.exe 
GPSVC(377c.29f8) 2026-01-01 07:01:02:495 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 1, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(377c.29f8) 2026-01-01 07:01:02:501 CGPApplicationService::RefreshEvent fired. 
GPSVC(377c.29f8) 2026-01-01 07:01:02:501 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(377c.29f8) 2026-01-01 07:01:02:501 CGPApplicationService::RefreshEvent Force Refresh = 1. 
GPSVC(377c.29f8) 2026-01-01 07:01:02:503 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(377c.29f8) 2026-01-01 07:01:02:503 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(377c.29f8) 2026-01-01 07:01:02:503 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

Microsoft-Windows-GroupPolicy/OperationalLog: 

Log Name:      Microsoft-Windows-GroupPolicy/Operational 
Source:        Microsoft-Windows-GroupPolicy 
Date:          1/1/2026 7:01:02 AM 
Event ID:      4004 
Task Category: None 
Level:         Information 
Keywords:      
User:          SYSTEM 
Computer:      CONT-WIN11-1.CONTOSO.local 
Description: 
Starting manual processing of policy for computer CONTOSO\CONT-WIN11-1$. 

New Logging 

GPSVC.LOG: 

GPSVC(1690.820) 2026-01-01 07:02:23:286 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 1, dwTimeout = 600000, currentProcessId = 5776, processImageName = C:\Windows\System32\gpupdate.exe 
GPSVC(214c.2550) 2026-01-01 07:02:23:286 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 1, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 GP Refresh Attribution: Target=Machine ParentProcess="C:\Windows\System32\cmd.exe" ParentPID=2832 GPUpdatePID=5776 SessionID=2 Account="CONTOSO\Admin1" 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 CGPApplicationService::RefreshEvent fired. 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 CGPApplicationService::RefreshEvent Force Refresh = 1. 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(214c.2550) 2026-01-01 07:02:23:296 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

  • We now have a new GP Operational (Microsoft-Windows-GroupPolicy provider) event that logs the caller attribution data regardless of whether the debug logging is enabled or not.  This is logged in combination with the pre-existing Event ID 4004 event: 
Microsoft-Windows-GroupPolicy/OperationalLog: 

Log Name:      Microsoft-Windows-GroupPolicy/Operational 
Source:        Microsoft-Windows-GroupPolicy 
Date:          1/1/2026 7:02:23 AM 
Event ID:      5321 
Task Category: None 
Level:         Information 
Keywords:      
User:          SYSTEM 
Computer:      CONT-WIN11-2.CONTOSO.local 
Description: 
GP Refresh Attribution Parameter: Group Policy refresh. Target=Machine ParentProcess="C:\Windows\System32\cmd.exe" ParentPID=2832 GPUpdatePID=5776 SessionID=2 Account="CONTOSO\Admin1" 

Log Name:      Microsoft-Windows-GroupPolicy/Operational 
Source:        Microsoft-Windows-GroupPolicy 
Date:          1/1/2026 7:02:23 AM 
Event ID:      4004 
Task Category: None 
Level:         Information 
Keywords:      
User:          SYSTEM 
Computer:      CONT-WIN11-2.CONTOSO.local 
Description: 
Starting manual processing of policy for computer CONTOSO\CONT-WIN11-2$ 

Scenario 2: Background (Periodic) Group Policy Refresh 

By default, the Group Policy engine periodically refreshes every 5 minutes on DCs and every 90-120 minutes on everything else.  This is an example of one of those unattended refreshes.  Gpupdate is also the responsible process here.   

Current Logging 

GPSVC.LOG: 

GPSVC(c6c.1f70) 2026-01-01 01:31:10:614 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:614 CGPApplicationService::RefreshEvent fired. 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:614 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:614 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:614 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:618 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(c6c.1f70) 2026-01-01 01:31:10:618 User SID = <S-1-5-20> 

New Logging 

GPSVC.LOG: 

GPSVC(1aa0.1a44) 2026-01-01 00:34:59:855 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:866 GP Refresh Attribution: Target=Machine ParentProcess="C:\Windows\System32\svchost.exe" ParentPID=1904 GPUpdatePID=8616 SessionID=0 Account="NT AUTHORITY\NETWORK SERVICE" 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 CGPApplicationService::RefreshEvent fired. 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(1aa0.1a44) 2026-01-01 00:34:59:867 User SID = <S-1-5-20> 

  • Background GP Refreshes leverage Scheduled Tasks to trigger the gpupdate.exe, so you can follow the steps in Scenario 4  to establish a correlation between the Task Scheduler and the GP refresh activity. 

Scenario 3: Programmatic Group Policy Refresh via the GP API 

This scenario covers applications that use APIs directly to cause refreshes to occur. 

Current Logging 

GPSVC.LOG: 

GPSVC(2068.2348) 2026-01-01 14:39:51:302 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 0, dwTimeout = 0, currentProcessId = 8296, processImageName = C:\Temp\gprefresh.exe 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 0 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 CGPApplicationService::RefreshEvent fired. 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 CGPApplicationService::RefreshEvent Timeout = 0. 
GPSVC(15d0.b30) 2026-01-01 14:39:51:304 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

New Logging 

GPSVC.LOG: 

GPSVC(834.15e0) 2026-01-01 14:39:40:244 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 0, dwTimeout = 0, currentProcessId = 2100, processImageName = C:\Temp\gprefresh.exe 
GPSVC(26ac.874) 2026-01-01 14:39:40:244 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 0 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 RPC Call Attribution: Target=Machine ParentProcess="C:\Windows\System32\cmd.exe" ParentPID=2328 RpcClient="C:\Temp\gprefresh.exe" RpcClientPID=2100 SessionID=2 Account="CONTOSO\Admin1" 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 CGPApplicationService::RefreshEvent fired. 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 CGPApplicationService::RefreshEvent Timeout = 0. 
GPSVC(26ac.874) 2026-01-01 14:39:40:253 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

Scenario 4: Scheduled Task / Remote GP Refresh (GPMC) / PowerShell 'Invoke-GPUpdate' 

Remote GP Update through GPMC and Invoke-GPUpdate, both leverage Scheduled Tasks to trigger a policy refresh on the target machine(s). 

Current Logging 

GPSVC.LOG: 

GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 1, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 CGPApplicationService::RefreshEvent fired. 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 CGPApplicationService::RefreshEvent Force Refresh = 1. 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(2ab0.206c) 2026-01-01 17:16:07:563 User SID = <S-1-5-20> 

New Logging 

GPSVC.LOG: 

GPSVC(51c.10d0) 2026-01-01 17:28:44:566 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 1, bRefreshAllUsers = 0, dwTimeout = 600000 
GPSVC(51c.10d0) 2026-01-01 17:28:44:573 GP Refresh Attribution: Target=Machine ParentProcess="C:\Windows\System32\svchost.exe" ParentPID=1904 GPUpdatePID=204 SessionID=0 Account="NT AUTHORITY\NETWORK SERVICE" 
GPSVC(51c.10d0) 2026-01-01 17:28:44:573 CGPApplicationService::RefreshEvent fired. 
GPSVC(51c.10d0) 2026-01-01 17:28:44:573 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(51c.10d0) 2026-01-01 17:28:44:575 CGPApplicationService::RefreshEvent Force Refresh = 1. 
GPSVC(51c.10d0) 2026-01-01 17:28:44:575 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(51c.10d0) 2026-01-01 17:28:44:575 CGPApplicationService::RefreshEvent Timeout = 600000. 
GPSVC(51c.10d0) 2026-01-01 17:28:44:575 User SID = <S-1-5-20> 

  • The refresh activity can be corroborated by this Task Scheduler event: 
Microsoft-Windows-TaskScheduler/Operational:

Log Name: Microsoft-Windows-TaskScheduler/Operational 
Source: Microsoft-Windows-TaskScheduler 
Date: 1/1/2026 5:28:44 PM 
Event ID: 129 
Task Category: Created Task Process 
Level: Information 
Keywords: 
User: SYSTEM 
Computer: CONT-WIN11-2.CONTOSO.local 
Description: 
Task Scheduler launch task "\Microsoft\Windows\GroupPolicy\GPUpdate" , instance "gpupdate.exe" with process ID 204. 

Scenario 5: Audit Policy modifications via SecPol 

Modifications to the Advanced Audit Policy configuration via the Local Security Policy console (SecPol) also triggers a GP Refresh. 

Current Logging 

GPSVC.LOG: 

GPSVC(360.193c) 2026-01-01 16:09:36:594 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 0, dwTimeout = 0, currentProcessId = 864, processImageName = C:\Windows\System32\mmc.exe 
GPSVC(aa0.904) 2026-01-01 16:09:36:594 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 0 
GPSVC(aa0.904) 2026-01-01 16:09:36:606 CGPApplicationService::RefreshEvent fired. 
GPSVC(aa0.904) 2026-01-01 16:09:36:608 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(aa0.904) 2026-01-01 16:09:36:608 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(aa0.904) 2026-01-01 16:09:36:608 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(aa0.904) 2026-01-01 16:09:36:608 CGPApplicationService::RefreshEvent Timeout = 0. 
GPSVC(aa0.904) 2026-01-01 16:09:36:608 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

New Logging 

GPSVC.LOG: 

GPSVC(1cb4.1d2c) 2026-01-01 16:09:49:240 RefreshPolicyForPrincipal: Entering with bMachine = 1, SID = null, options: 0, dwTimeout = 0, currentProcessId = 7348, processImageName = C:\Windows\System32\mmc.exe 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:240 Server_ProcessRefresh:: bMachine = 1, SID = null, bForceRefresh = 0, bRefreshAllUsers = 0, dwTimeout = 0 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:327 RPC Call Attribution: Target=Machine ParentProcess="C:\Windows\System32\cmd.exe" ParentPID=2328 RpcClient="C:\Windows\System32\mmc.exe [SECPOL.MSC]" RpcClientPID=7348 SessionID=2 Account="CONTOSO\Admin1" 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 CGPApplicationService::RefreshEvent fired. 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 CGPApplicationService::RefreshEvent for Machine. 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 CGPApplicationService::RefreshEvent Force Refresh = 0. 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 CGPApplicationService::RefreshEvent Refresh all users = 0. 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 CGPApplicationService::RefreshEvent Timeout = 0. 
GPSVC(1f94.1fe4) 2026-01-01 16:09:49:334 User SID = <S-1-5-21-869282409-3425305577-2907120315-7716> 

 

 

 
 

If you haven't already, make sure to have a read of A Treatise on Group Policy Troubleshooting – now with GPSVC Log Analysis 
 

Hope these changes will make your troubleshooting just a little easier. As always — let us know what you want to see next and keep the feedback coming. 
 

Happy debugging! 

Signing out. 
Gaurav and Itay. 

Updated Mar 07, 2026
Version 1.0
No CommentsBe the first to comment