Private/Invoke-IntuneRegMonitor.ps1
<#
.SYNOPSIS Script to monitor registry changes under HKEY_LOCAL_MACHINE for specific sections like PolicyManager. .DESCRIPTION #************************************************************************************************************ # Disclaimer # # This sample script is not supported under any Microsoft standard support program or service. This sample # script is provided AS IS without warranty of any kind. Microsoft further disclaims all implied warranties # including, without limitation, any implied warranties of merchantability or of fitness for a particular # purpose. The entire risk arising out of the use or performance of this sample script and documentation # remains with you. In no event shall Microsoft, its authors, or anyone else involved in the creation, # production, or delivery of this script be liable for any damages whatsoever (including, without limitation, # damages for loss of business profits, business interruption, loss of business information, or other # pecuniary loss) arising out of the use of or inability to use this sample script or documentation, even # if Microsoft has been advised of the possibility of such damages. # #************************************************************************************************************ .PARAMETER MonitorSection Specifies the section of the registry to monitor. Default is "PolicyManager". #> function Invoke-IntuneRegMonitor { [CmdletBinding()] param ( [Parameter(Mandatory = $false)] [ValidateSet("PolicyManager")] [string]$MonitorSection = "PolicyManager" ) # Set the root path based on the MonitorSection parameter switch ($MonitorSection) { "PolicyManager" { $rootPath = "SOFTWARE\\Microsoft\\PolicyManager" } Default {} } # Load required assembly Add-Type -AssemblyName System.Management # Create a WMI query to watch for registry changes $query = "SELECT * FROM RegistryTreeChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND RootPath='{0}'" -f $rootPath # Create the event watcher $watcher = New-Object System.Management.ManagementEventWatcher $watcher.Query = $query $watcher.Scope = New-Object System.Management.ManagementScope("root\default") # Define the action to take when a change is detected $null = Register-ObjectEvent -InputObject $watcher -EventName "EventArrived" -Action { Write-Host "Registry change detected at $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" # Optional: Add logic here to log or handle the change } # Start listening $watcher.Start() Write-Host "Watching for registry changes under HKLM\$($rootPath -replace '\\\\','\')..." # Keep the script running while ($true) { Start-Sleep -Seconds 5 } } |