我的代码的目的是在瘦客户端上运行RDP连接(在自定义shell中)。每当取消RDP登录或RDP连接终止时,登录窗口将再次出现。这将始终向用户显示其登录屏幕。
同样因为RD Broker维持15分钟握手超时,我想每15分钟运行一次刷新,当时它们的会话尚未打开。所以我必须找到某种方法来检测用户是否没有登录到RD主机。
脚本运行良好。虽然总是对更聪明的方法感兴趣。
Start-Process C:\Windows\System32\mstsc.exe C:\Connection\Terminal-Server.RDP
$previous_Handles = 0
While(1) {
$process = Get-Process mstsc
$timer = New-Object System.Threading.Timer
$timer.Interval = 900000
$timer.Enabled = $true
$timer.Autoreset = $true
Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier TimerElapsed -Action {Stop-Process -Id $process.Id}
if((($process.Handles -le 700) -and ($previous_Handles -ge 700) -or ($process -eq $null)))
{
Stop-Process -Id $process.Id
$previous_Handles = 0
$Timer.Stop()
Unregister-Event -Force -SourceIdentifier TimerElapsed
Start-Process C:\Windows\System32\mstsc.exe C:\Connection\Terminal-Server.RDP
}
elseif($process.Handles -ge 925) {
$process = Get-Process mstsc
$previous_Handles = $process.Handles
$Timer.Stop()
Start-Sleep -m 500
Unregister-Event -Force -SourceIdentifier TimerElapsed
}
else {
Start-Sleep -m 500
$previous_Handles = $process.Handles
$Timer.Start()
}
}