首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell: IF语句和Timer.Elapsed

Powershell: IF语句和Timer.Elapsed
EN

Stack Overflow用户
提问于 2015-09-07 20:34:29
回答 1查看 252关注 0票数 1

我的代码的目的是在瘦客户机上运行RDP连接(在自定义shell中)。每当取消RDP登录或终止RDP连接时,登录窗口都会再次出现。这将始终向用户显示其登录屏幕。

另外,因为RD代理维护15分钟的握手超时,所以我希望在会话尚未打开时每15分钟运行一次刷新。因此,我必须找到某种方法来检测用户是否没有登录到RD主机。

脚本运行得很好。尽管总是对更聪明的运行方式感兴趣。

代码语言:javascript
复制
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()
            }
}
EN

回答 1

Stack Overflow用户

发布于 2015-09-10 06:55:44

此脚本将在发现进程关闭一秒后打开RDP窗口,并将继续循环,直到PowerShell进程停止。

代码语言:javascript
复制
while($true)
{
    $RDPprocess = Start-Process mstsc -ArgumentList path-to.rdp -PassThru
    do {Start-Sleep -Seconds 1}
    until($RDPprocess.HasExited)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32438907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档