下一个脚本也是非常简单实用的,和之前的脚本一起配合效果会非常好,上一个脚本可以在变更之前批量给用户发通知,这个脚本就是变更开始时,直接把用户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的环境应该就比较干净了,可以执行变更或者其他操作了,不过还是那句话,注意实际用之前先测试下,另外因为是顺序执行的,需要花一些时间让脚本运行