Powershell:IF语句和Timer.Elapsed

时间:2015-09-07 12:34:29

标签: powershell-v3.0 rdp

我的代码的目的是在瘦客户端上运行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()
            }
}

0 个答案:

没有答案