source/Scripts/Configuration/Create-DeleteUserProfileTask.ps1 (25 lines of code) (raw):
$TaskName = '(AVD Client) - Delete Stale User Profiles'
# Delete any previously created scheduled task
Get-ScheduledTask | Where-Object {$_.TaskName -eq "$TaskName"} | Unregister-ScheduledTask -Confirm:$False
$EventTriggerClass = Get-CimClass MSFT_TaskEventTrigger root/Microsoft/Windows/TaskScheduler
$EventTrigger = $EventTriggerClass | New-CimInstance -ClientOnly
$EventTrigger.Enabled = $true
# Create a Subscription to the Security Log and look for Event ID 4647 which indicates a logoff event.
$EventTrigger.SubScription = '<QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[EventID=4647]]</Select></Query></QueryList>'
$EventTrigger.Delay = 'PT10S'
$StartupTrigger = New-ScheduledTaskTrigger -AtStartup
$Triggers = @(
$EventTrigger,
$StartupTrigger
)
$Command = 'Get-CimInstance -class Win32_UserProfile | where-object { $_.LocalPath -like ''C:\users\*'' -and $_.LocalPath -inotLike ''*kioskuser*'' -and $_.Loaded -eq $False -and (((Get-Date) - $_.LastUseTime) -gt (New-TimeSpan -Days 14))} | Remove-CimInstance'
$TaskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-command `"$Command`""
$TaskPrincipal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' -LogonType ServiceAccount -RunLevel Highest
$TaskSettings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew
$RegisteredTask = Register-ScheduledTask -TaskName $TaskName -Description 'Delete User Profiles' -Action $TaskAction -Principal $TaskPrincipal -Settings $TaskSettings -Trigger $Triggers
$StartupTrigger = $RegisteredTask.Triggers | Where-Object {$_.Subscription -eq $null}
$StartupTrigger.Delay = 'PT5S'
do {
Start-Sleep -Seconds 1
} until (Get-ScheduledTask | Where-Object {$_.TaskName -eq "$TaskName"})
$RegisteredTask | Set-ScheduledTask