Get-UserDeviceRegistrationEvents.ps1


<#PSScriptInfo
 
.VERSION 1.2
 
.GUID 28a1b634-1267-415c-891d-4afb3a72e217
 
.AUTHOR Iain Borghoff
 
.COMPANYNAME
 
.COPYRIGHT
 
.TAGS Windows Autopilot
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Version 1.0: Initial publish.
Version 1.1: Fixed script exiting after installing required module.
Version 1.2: Fixed previous fix in 1.1.
 
#>


<#
.DESCRIPTION
 Retrieves the User Device Registration events from the device and either save them as a log file to C:\ProgramData\Microsoft\IntuneManagementExtension\Logs (which will be included with the logs files collected with Collect Diagnostics from Endpoint), or specify a file name and path. Be sure to set/update the file extension to xlsx before opening the resulting file.
 
 .PARAMETER outputfile
The name and path of the log file
 
.EXAMPLE
.\Get-UserDeviceRegistrationEvents.ps1 -logfile C:\temp\udre.xlsx
#>


[CmdletBinding()]
param (
    $logfile
)

# Install the ImportExcel module if not installed
if (!(Get-InstalledModule | Where-Object { $_.Name -like 'ImportExcel' })) {
    try {
        Write-Host 'Installing ImportExcel module' -ForegroundColor Cyan
        Install-Module -Name ImportExcel -Force -ErrorAction SilentlyContinue
        Write-Host 'Module installed' -ForegroundColor Cyan
        Import-Module -Name ImportExcel
    }
    catch {
        Write-Warning -message 'Module failed to install'
        Exit 1
    }
}

# Get device serial number
$serialnumber = (Get-WmiObject Win32_BIOS | Select-Object SerialNumber).Serialnumber
# Check if serial number is blank and if it is, get the baseboard serial number
if ($serialnumber.Trim() -eq "") {
    $serialnumber = (Get-WmiObject Win32_BaseBoard).SerialNumber
}

# Generate report of events
Write-Host 'Getting events and generating report...' -ForegroundColor Cyan

$events = Get-WinEvent -LogName 'Microsoft-Windows-User Device Registration/Admin' -Oldest | Where-Object { $_.ID -like '4096' -or $_.ID -like '304' -or $_.ID -like '306' -or $_.ID -like '334' -or $_.ID -like '335' } | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message

if ($logfile) {
    $events | Export-Excel -path "$logfile"
}
else {
    $events | Export-Excel -path "C:\ProgramData\Microsoft\IntuneManagementExtension\Logs\$($serialnumber)_udre.log"
}

Write-Host 'Report generated' -ForegroundColor Green