下一个脚本也是非常简单实用的,和之前的脚本一起配合效果会非常好,上一个脚本可以在变更之前批量给用户发通知,这个脚本就是变更开始时,直接把用户log off,这样再执行变更会好一点,总比直接重启机器要强

这个就不上什么图了,说白了就是踢掉用户,字面意思能理解就行,脚本内容直接分享出来,整体框架和之前那个基本是一样的

#这个没试过如果有用remote app的会是什么样

$AzureContext = (Connect-AzAccount -Identity -Environment AzureChinaCloud).context
# set and store context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext
Select-AzSubscription -SubscriptionId "xxx";


# 定义Hostpool和resource group的对应关系
$VDIPools = [ordered]@{
'xxx' = 'xxx'
'xxxx' = 'xxxx'
'xxx' = 'xxx'
'xxxx' = 'xxxx'
}

foreach ($VDIPool in $VDIPools.GetEnumerator()) {

$Sessions = Get-AzWvdUserSession -ResourceGroupName $VDIPool.value -HostPoolName $VDIPool.key -ErrorAction stop

if ($Sessions.count -ne 0) {
foreach ($Session in $Sessions) {

try {
$Error.clear()
$SessionHostName = $Session.Name.Split("/")[-2]
$SessionID = $Session.Name.Split("/")[-1]
Write-Output "Removing user session $($Session.UserPrincipalName), session host name:$SessionHostName"
Remove-AzWvdUserSession -ResourceGroupName $VDIPool.value -HostPoolName $VDIPool.key -SessionHostName $SessionHostName -Id $SessionID -ErrorAction Stop

}
catch {

Write-Output $Error[0].exception.message

}

}
}
else {

Write-Output "No session found for VDI Pool $($VDIPool.key)"

}


}

这样经过两个脚本,一个发通知,一个logoff,之后VDI的环境应该就比较干净了,可以执行变更或者其他操作了,不过还是那句话,注意实际用之前先测试下,另外因为是顺序执行的,需要花一些时间让脚本运行