在几篇在线文章的帮助下,我能够编译一个 powershell 脚本,为我的每个 RD 会话主机注销所有用户。我希望在注销用户并将配置文件写回到他们在存储系统上的漫游配置文件位置时非常温和。但是,这太温和了,大约需要四个小时才能完成我拥有的用户和 RDS 服务器的数量。
此脚本旨在设置每个 RDS 服务器消耗,但如果服务器可用,则允许重定向,因此围绕此的想法是在前 15 分钟内我将准备好前几台服务器供用户登录。
所有这些都有效,但我想看看是否有任何建议可以加快速度。
这是遍历每台服务器并注销用户然后将服务器登录模式设置为启用的循环:
ForEach ($rdsserver in $rdsservers){
try {
query user /server:$rdsserver 2>&1 | select -skip 1 | ? {($_ -split "\s+")[-5]} | % {logoff ($_ -split "\s+")[-6] /server:$rdsserver /V}
Write-Host "Giving the RDS Server time"
Write-Progress "Pausing Script" -status "Giving $rdsserver time to settle" -perc (5/(5/100))
Start-Sleep -Seconds 5
$RDSH=Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace "root\CIMV2\terminalservices" -ComputerName $rdsserver -Authentication PacketPrivacy -Impersonation Impersonate
$RDSH.SessionBrokerDrainMode=0
$RDSH.put() > $null
Write-Host "$rdsserver is set to:"
switch ($RDSH.SessionBrokerDrainMode) {
0 {"Allow all connections."}
1 {"Allow incoming reconnections but until reboot prohibit new connections."}
2 {"Allow incoming reconnections but prohibit new connections."}
default {"The user logon state cannot be determined."}
}
}
catch {}
}