Powershell 3.0 Powershell:IF语句和计时器。已过

Powershell 3.0 Powershell:IF语句和计时器。已过,powershell-3.0,rdp,Powershell 3.0,Rdp,我的代码的目的是在thinclients上运行RDP连接(在自定义shell中)。无论何时取消RDP登录,或RDP连接终止,登录窗口都会再次出现。这将始终向用户显示其登录屏幕 另外,因为RD代理维护15分钟握手超时,所以我希望在会话尚未打开时,每15分钟运行一次刷新。因此,我必须找到某种方法来检测用户是否没有登录到RD主机 脚本运行得很好。尽管如此,我始终对更聪明的方法感兴趣 Start-Process C:\Windows\System32\mstsc.exe C:\Connection\Te

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

另外,因为RD代理维护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()
            }
}

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

while($true)
{
    $RDPprocess = Start-Process mstsc -ArgumentList path-to.rdp -PassThru
    do {Start-Sleep -Seconds 1}
    until($RDPprocess.HasExited)
}

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

while($true)
{
    $RDPprocess = Start-Process mstsc -ArgumentList path-to.rdp -PassThru
    do {Start-Sleep -Seconds 1}
    until($RDPprocess.HasExited)
}

谢谢您的评论,Pesistent13:-)我将看看是否可以使用start proces变量清理代码。尽管这样也行。我现在就开始运行代码了。但我总是对更聪明的方法感兴趣,因为我是powershell的新手。谢谢你的评论,Pesistent13:-)我会看看是否可以使用start proces变量清理代码。尽管这样也行。我现在就开始运行代码了。但我总是对更聪明的方法感兴趣,因为我对powershell是新手。