FunctionApp/Modules/SessionHostReplacer/internal/functions/Send-SHRDrainNotification.ps1 (26 lines of code) (raw):

function send-SHRDrainNotification { [CmdletBinding()] param ( [Parameter(Mandatory=$true)] [string] $sessionHostName, [Parameter()] [string] $HostPoolName = (Get-FunctionConfig _HostPoolName), [parameter()] [string] $ResourceGroupName = (Get-FunctionConfig _HostPoolResourceGroupName), [Parameter()] [int] $DrainGracePeriodHours = (Get-FunctionConfig _DrainGracePeriodHours), [Parameter()] [string] $messageTitle = "Automatic Session Host Maintenance", [Parameter()] [string] $message = "Your session host {0} is being replaced. Please save your work and log off. You will be disconnected in {1} hours." ) # Get users on the session host $sessions = Get-AzWvdUserSession -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName -SessionHostName $sessionHostName foreach ($session in $sessions){ # Send message to user $sessionId = $session.Name -replace '.+\/.+\/(.+)', '$1' $messageBody = $message -f $sessionHostName, $DrainGracePeriodHours Write-PSFMessage -Level Host -Message 'Sending message to user {0} on session host {1}.' -StringValues $session.UserPrincipalName, $sessionHostName Send-AzWvdUserSessionMessage -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName -SessionHostName $sessionHostName -UserSessionId $sessionId -MessageTitle $messageTitle -MessageBody $messageBody } }