最近接到了一个客户的需求:出于成本因素考虑,想要每天晚上对Azure Virtual Desktop的会话主机进行自动关机,每天早上在自动开机,从而达到节省成本的目的。客户担心在关机时,还有用户在办公,强制关机会对正在使用的用户造成一定的影响。

经过对需求进行初步的分析以后,我们有了如下的解决方案,首先我们可以在关机前半小时,给主机池内所有的用户发送消息,提醒用户关机时间,让他们及时保存相关的工作,这个可以参考之前的博客:​​https://blog.51cto.com/wuyvzhang/5049080​​ ,提醒用户以后,我们可以在关机前排空用户会话,可以使用如下脚本进行注销主机池内的所有会话。当会话都被注销以后,我们就可以使用Azure Automation等功能对虚拟机进行关机啦

$ResourceGroupName="wuyuzhang"
$HostPoolName="AVD-HP-01"
$HSessionHosts = (Get-AzWvdSessionHost -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName | Where-object -Property AllowNewSession -eq $true).Name
foreach ($HSessionHost in $HSessionHosts) {
$HSessionDetail = $HSessionHost.split("/")
$HSessionIDs = (Get-AzWvdUserSession -ResourceGroupName $ResourceGroupName -HostPoolName $HostPoolName -SessionHostName $HSessionDetail[1]).name
if ($HSessionIDs -ne $null)
{
foreach ($HSessionID in $HSessionIDs)
{
if ($HSessionID -ne $null)
{
$SplitHSessionID = $HSessionID.split("/").split("/")
Remove-AzWvdUserSession -ResourceGroupName $ResourceGroupName -HostPoolName $SplitHSessionID[0] -SessionHostName $SplitHSessionID[1] -Id $SplitHSessionID[2]
}
}
}
}