mirror of
https://github.com/freedbygrace/WindowsNotifications.git
synced 2026-07-26 20:18:13 +00:00
69 lines
3.1 KiB
PowerShell
69 lines
3.1 KiB
PowerShell
# Example: Reboot Notification with Deferrals
|
|
# This script demonstrates how to show a reboot notification with deferral options
|
|
|
|
# Load the WindowsNotifications assembly
|
|
$dllPath = Join-Path -Path $PSScriptRoot -ChildPath "..\WindowsNotifications\bin\Release\WindowsNotifications.dll"
|
|
if (Test-Path $dllPath) {
|
|
$bytes = [System.IO.File]::ReadAllBytes($dllPath)
|
|
$assembly = [System.Reflection.Assembly]::Load($bytes)
|
|
}
|
|
else {
|
|
Write-Error "WindowsNotifications.dll not found at $dllPath. Please build the solution first."
|
|
exit
|
|
}
|
|
|
|
# Create a notification manager
|
|
$notificationManager = New-Object WindowsNotifications.NotificationManager
|
|
|
|
# Create custom notification options for a reboot
|
|
$options = New-Object WindowsNotifications.Models.NotificationOptions
|
|
$options.Title = "System Reboot Required"
|
|
$options.Message = "Your system needs to be rebooted to complete important updates. Please save your work."
|
|
$options.PersistState = $true
|
|
|
|
# Add reboot button
|
|
$rebootButton = New-Object WindowsNotifications.Models.NotificationButton("Reboot Now", "reboot")
|
|
$options.Buttons.Add($rebootButton)
|
|
|
|
# Configure deferral options
|
|
$options.DeferralOptions = New-Object WindowsNotifications.Models.DeferralOptions
|
|
$options.DeferralOptions.DeferButtonText = "Defer Reboot"
|
|
$options.DeferralOptions.DeferralPrompt = "Postpone until:"
|
|
$options.DeferralOptions.MaxDeferrals = 3
|
|
|
|
# Clear existing deferral choices and add custom ones
|
|
$options.DeferralOptions.DeferralChoices.Clear()
|
|
$options.DeferralOptions.DeferralChoices.Add((New-Object WindowsNotifications.Models.DeferralOption("1 hour", [TimeSpan]::FromHours(1), "1hour")))
|
|
$options.DeferralOptions.DeferralChoices.Add((New-Object WindowsNotifications.Models.DeferralOption("4 hours", [TimeSpan]::FromHours(4), "4hours")))
|
|
$options.DeferralOptions.DeferralChoices.Add((New-Object WindowsNotifications.Models.DeferralOption("End of day", [TimeSpan]::FromHours(8), "endofday")))
|
|
$options.DeferralOptions.DeferralChoices.Add((New-Object WindowsNotifications.Models.DeferralOption("Tomorrow", [TimeSpan]::FromDays(1), "tomorrow")))
|
|
|
|
# Show the notification
|
|
Write-Host "Showing reboot notification..."
|
|
$result = $notificationManager.ShowNotification($options)
|
|
|
|
# Display the result
|
|
Write-Host "Notification displayed: $($result.Displayed)"
|
|
Write-Host "Notification ID: $($result.NotificationId)"
|
|
|
|
# If the notification was displayed, wait for interaction
|
|
if ($result.Displayed) {
|
|
Write-Host "Waiting for user interaction..."
|
|
$result = $notificationManager.WaitForNotification($result.NotificationId)
|
|
|
|
if ($result -ne $null) {
|
|
Write-Host "Notification was activated: $($result.Activated)"
|
|
Write-Host "Notification was dismissed: $($result.Dismissed)"
|
|
|
|
if ($result.ClickedButtonId -eq "reboot") {
|
|
Write-Host "User chose to reboot now"
|
|
# In a real script, you would initiate a reboot here
|
|
# Restart-Computer -Force
|
|
}
|
|
elseif ($result.Deferred) {
|
|
Write-Host "User deferred the reboot until: $($result.DeferredUntil)"
|
|
Write-Host "Deferral reason: $($result.DeferralReason)"
|
|
}
|
|
}
|
|
}
|