ื“ืขืœืึทื’ื™ื™ื˜ื™ื ื’ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ RDP ืกืขืฉืึทื ื–

ื“ืขืœืึทื’ื™ื™ื˜ื™ื ื’ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ RDP ืกืขืฉืึทื ื–
ืื™ืŸ ื“ืขืจ ืึธืจื’ืึทื ื™ื–ืึทืฆื™ืข ื•ื•ื• ืื™ืš ืึทืจื‘ืขื˜, ื•ื•ื™ื™ึทื˜ ืึทืจื‘ืขื˜ ืื™ื– ืคึผืจืึธื•ื›ื™ื‘ืึทื˜ืึทื“ ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ. ืื™ื– ื’ืขื•ื•ืขืŸ. ื‘ื™ื– ืœืขืฆื˜ืข ื•ื•ืึธืš. ืื™ืฆื˜ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ืขืจื“ื–ืฉืึทื ื˜ืœื™ ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ืœื™ื™ื–ื•ื ื’. ืคึฟื•ืŸ ื’ืขืฉืขืคื˜ - ืึทื“ืึทืคึผื˜ื™ื ื’ ืคึผืจืึทืกืขืกืึทื– ืฆื• ืึท ื ื™ื™ึทืข ืึทืจื‘ืขื˜ ืคึฟืึธืจืžืึทื˜, ืคึฟื•ืŸ ืื•ื ื“ื– - PKI ืžื™ื˜ PIN ืงืึธื•ื“ื– ืื•ืŸ ื˜ืึธืงืขื ืก, VPN, ื“ื™ื˜ื™ื™ืœื“ ืœืึธื’ื™ื ื’ ืื•ืŸ ืคื™ืœ ืžืขืจ.
ืฆื•ื•ื™ืฉืŸ ืื ื“ืขืจืข ื–ืื›ืŸ, ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืึทืจื•ื™ืฃ ืจื™ืžืึธื•ื˜ ื“ืขืกืงื˜ืึธืคึผ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืึทืงืึท ื˜ืขืจืžื™ื ืึทืœ ื‘ืึทื“ื™ื ื•ื ื’ืก. ืžื™ืจ ื”ืึธื‘ืŸ ืขื˜ืœืขื›ืข RDS ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ื“ืึทื˜ืŸ ืกืขื ื˜ืขืจืก. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื’ืึธื•ืœื– ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ื’ืขื‘ืŸ ืงืึธืœืขื’ืขืก ืคื•ืŸ ืคึฟืึทืจื‘ื•ื ื“ืขื ืข IT ื“ื™ืคึผืึทืจื˜ืžืึทื ืฅ ืฆื• ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื•ืœื™ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื‘ืึทื ื™ืฆืขืจ ืกืขืฉืึทื ื–. ื•ื•ื™ ืื™ืจ ื•ื•ื™ืกืŸ, ืขืก ืื™ื– ืึท ื ืึธืจืžืึทืœ RDS Shadow ืžืขืงืึทื ื™ื–ืึทื ืคึฟืึทืจ ื“ืขื, ืื•ืŸ ื“ื™ ื™ื–ื™ืึทืกื˜ ื•ื•ืขื’ ืฆื• ื“ืขืœืึทื’ื™ื™ื˜ ืขืก ืื™ื– ืฆื• ื’ืขื‘ืŸ ื”ื™ื’ืข ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืจืขื›ื˜ ืื•ื™ืฃ RDS ืกืขืจื•ื•ืขืจืก.
ืื™ืš ืจืขืกืคึผืขืงื˜ ืื•ืŸ ื•ื•ืขืจื˜ ืžื™ื™ืŸ ื—ื‘ืจื™ื, ืึธื‘ืขืจ ืื™ืš ื‘ื™ืŸ ื–ื™ื™ืขืจ ื–ืฉืขื“ื ืข ื•ื•ืขืŸ ืขืก ืงื•ืžื˜ ืฆื• ื•ื™ืกื˜ื™ื™ืœืŸ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืจืขื›ื˜. ๐Ÿ™‚ ืคึฟืึทืจ ื“ื™ ื•ื•ืืก ืฉื˜ื™ืžืขืŸ ืžื™ื˜ ืžื™ืจ, ื‘ื™ื˜ืข ื ืึธื›ืคืึธืœื’ืŸ ื“ื™ ืฉื ื™ื™ึทื“ืŸ.

ื ื•, ื“ื™ ืึทืจื‘ืขื˜ ืื™ื– ืงืœืึธืจ, ืื™ืฆื˜ ืœืึธื–ืŸ ืก ื‘ืึทืงื•ืžืขืŸ ืึทืจืึธืคึผ ืฆื• ื’ืขืฉืขืคื˜.

ืฉืจื™ื˜ ืงืกื ื•ืžืงืก

ืœืึธืžื™ืจ ืฉืึทืคึฟืŸ ืึท ื–ื™ื›ืขืจื”ื™ื™ื˜ ื’ืจื•ืคึผืข ืื™ืŸ ืึทืงื˜ื™ื•ื• Directory RDP_Operators ืื•ืŸ ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืื™ืŸ ืขืก ื“ื™ ืึทืงืึทื•ื ืฅ ืคื•ืŸ ื™ืขื ืข ื ื™ืฆืขืจืก ืฆื• ื•ื•ืขืžืขืŸ ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื“ืขืœืึทื’ื™ื™ื˜ ืจืขื›ื˜:

$Users = @(
    "UserLogin1",
    "UserLogin2",
    "UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users

ืื•ื™ื‘ ืื™ืจ ื”ืึธื‘ืŸ ืงื™ื™ืคืœ ืึทื“ ื–ื™ื™ื˜ืœืขืš, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ื‘ื™ื– ืขืก ืื™ื– ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ืฆื• ืึทืœืข ืคืขืœื“ ืงืึทื ื˜ืจืึธื•ืœืขืจื– ืื™ื™ื“ืขืจ ืื™ืจ ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉืจื™ื˜. ื“ืขื ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื ืขืžื˜ ื ื™ื˜ ืžืขืจ ื•ื•ื™ 15 ืžื™ื ื•ื˜.

ืฉืจื™ื˜ ืงืกื ื•ืžืงืก

ืœืึธืžื™ืจ ื’ืขื‘ืŸ ื“ื™ ื’ืจื•ืคึผืข ืจืขื›ื˜ ืฆื• ืคื™ืจืŸ ื•ื•ืึธืงื–ืึทืœ ืกืขืฉืึทื ื– ืื•ื™ืฃ ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ RDSH ืกืขืจื•ื•ืขืจืก:

ืฉื˜ืขืœืŸ-RDSPermissions.ps1

$Group = "RDP_Operators"
$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)
ForEach ($Server in $Servers) {
    #ะ”ะตะปะตะณะธั€ัƒะตะผ ะฟั€ะฐะฒะพ ะฝะฐ ั‚ะตะฝะตะฒั‹ะต ัะตััะธะธ
    $WMIHandles = Get-WmiObject `
        -Class "Win32_TSPermissionsSetting" `
        -Namespace "rootCIMV2terminalservices" `
        -ComputerName $Server `
        -Authentication PacketPrivacy `
        -Impersonation Impersonate
    ForEach($WMIHandle in $WMIHandles)
    {
        If ($WMIHandle.TerminalName -eq "RDP-Tcp")
        {
        $retVal = $WMIHandle.AddAccount($Group, 2)
        $opstatus = "ัƒัะฟะตัˆะฝะพ"
        If ($retVal.ReturnValue -ne 0) {
            $opstatus = "ะพัˆะธะฑะบะฐ"
        }
        Write-Host ("ะ”ะตะปะตะณะธั€ะพะฒะฐะฝะธะต ะฟั€ะฐะฒ ะฝะฐ ั‚ะตะฝะตะฒะพะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะณั€ัƒะฟะฟะต " +
            $Group + " ะฝะฐ ัะตั€ะฒะตั€ะต " + $Server + ": " + $opstatus + "`r`n")
        }
    }
}

ืฉืจื™ื˜ ืงืกื ื•ืžืงืก

ืœื™ื™ื’ ื“ื™ ื’ืจื•ืคึผืข ืฆื• ื“ื™ ื”ื™ื’ืข ื’ืจื•ืคึผืข ืจื™ืžืึธื•ื˜ ื“ืขืกืงื˜ืึธืคึผ ื™ื•ื–ืขืจื– ืื•ื™ืฃ ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ RDSH ืกืขืจื•ื•ืขืจืก. ืื•ื™ื‘ ื“ื™ื™ืŸ ืกืขืจื•ื•ืขืจืก ื–ืขื ืขืŸ ืงืึทืžื‘ื™ื™ื ื“ ืื™ืŸ ืกืขืกื™ืข ื–ืึทืžืœื•ื ื’ืขืŸ, ืžื™ืจ ื˜ืึธืŸ ื“ืึธืก ืื•ื™ืฃ ื“ื™ ื–ืึทืžืœื•ื ื’ ืžื“ืจื’ื”:

$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)

ืคึฟืึทืจ ืื™ื™ืŸ ืกืขืจื•ื•ืขืจืก ืžื™ืจ ื ื•ืฆืŸ ื’ืจื•ืคึผืข ืคึผืึธืœื™ื˜ื™ืง, ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ืขืก ืฆื• ื–ื™ื™ืŸ ื’ืขื•ื•ืขื ื“ื˜ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจืก. ื™ืขื ืข ื•ื•ืืก ื–ืขื ืขืŸ ืฆื• ืคื•ื™ืœ ืฆื• ื•ื•ืึทืจื˜ืŸ ืงืขื ืขืŸ ืคืึทืจื’ื™ื›ืขืจืŸ ื“ืขื ืคึผืจืึธืฆืขืก ืžื™ื˜ ื“ื™ ื’ื•ื˜ ืึทืœื˜ ื’ืคึผื•ืคึผื“ืึทื˜ืข, ืคึผืจืขืคืขืจืึทื‘ืœื™ ืกืขื ื˜ืจืึทืœื™.

ืฉืจื™ื˜ ืงืกื ื•ืžืงืก

ืœืึธืžื™ืจ ืฆื•ื’ืจื™ื™ื˜ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืก ืฉืจื™ืคื˜ ืคึฟืึทืจ "ืžืึทื ืึทื“ื–ืฉืขืจื–":

RDSManagement.ps1

$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)

function Invoke-RDPSessionLogoff {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    logoff $SessionID /server:$ComputerName /v 2>&1
}

function Invoke-RDPShadowSession {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    mstsc /shadow:$SessionID /v:$ComputerName /control 2>&1
}

Function Get-LoggedOnUser {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName="localhost"
    )
    $ErrorActionPreference = "Stop"
    Test-Connection $ComputerName -Count 1 | Out-Null
    quser /server:$ComputerName 2>&1 | Select-Object -Skip 1 | ForEach-Object {
        $CurrentLine = $_.Trim() -Replace "s+"," " -Split "s"
        $HashProps = @{
            UserName = $CurrentLine[0]
            ComputerName = $ComputerName
        }
        If ($CurrentLine[2] -eq "Disc") {
            $HashProps.SessionName = $null
            $HashProps.Id = $CurrentLine[1]
            $HashProps.State = $CurrentLine[2]
            $HashProps.IdleTime = $CurrentLine[3]
            $HashProps.LogonTime = $CurrentLine[4..6] -join " "
            $HashProps.LogonTime = $CurrentLine[4..($CurrentLine.GetUpperBound(0))] -join " "
        }
        else {
            $HashProps.SessionName = $CurrentLine[1]
            $HashProps.Id = $CurrentLine[2]
            $HashProps.State = $CurrentLine[3]
            $HashProps.IdleTime = $CurrentLine[4]
            $HashProps.LogonTime = $CurrentLine[5..($CurrentLine.GetUpperBound(0))] -join " "
        }
        New-Object -TypeName PSCustomObject -Property $HashProps |
        Select-Object -Property UserName, ComputerName, SessionName, Id, State, IdleTime, LogonTime
    }
}

$UserLogin = Read-Host -Prompt "ะ’ะฒะตะดะธั‚ะต ะปะพะณะธะฝ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั"
Write-Host "ะŸะพะธัะบ RDP-ัะตััะธะน ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะฝะฐ ัะตั€ะฒะตั€ะฐั…..."
$SessionList = @()
ForEach ($Server in $Servers) {
    $TargetSession = $null
    Write-Host "  ะžะฟั€ะพั ัะตั€ะฒะตั€ะฐ $Server"
    Try {
        $TargetSession = Get-LoggedOnUser -ComputerName $Server | Where-Object {$_.UserName -eq $UserLogin}
    }
    Catch {
        Write-Host "ะžัˆะธะฑะบะฐ: " $Error[0].Exception.Message -ForegroundColor Red
        Continue
    }
    If ($TargetSession) {
        Write-Host "    ะะฐะนะดะตะฝะฐ ัะตััะธั ั ID $($TargetSession.ID) ะฝะฐ ัะตั€ะฒะตั€ะต $Server" -ForegroundColor Yellow
        Write-Host "    ะงั‚ะพ ะฑัƒะดะตะผ ะดะตะปะฐั‚ัŒ?"
        Write-Host "      1 - ะฟะพะดะบะปัŽั‡ะธั‚ัŒัั ะบ ัะตััะธะธ"
        Write-Host "      2 - ะทะฐะฒะตั€ัˆะธั‚ัŒ ัะตััะธัŽ"
        Write-Host "      0 - ะฝะธั‡ะตะณะพ"
        $Action = Read-Host -Prompt "ะ’ะฒะตะดะธั‚ะต ะดะตะนัั‚ะฒะธะต"
        If ($Action -eq "1") {
            Invoke-RDPShadowSession -ComputerName $Server -SessionID $TargetSession.ID
        }
        ElseIf ($Action -eq "2") {
            Invoke-RDPSessionLogoff -ComputerName $Server -SessionID $TargetSession.ID
        }
        Break
    }
    Else {
        Write-Host "    ัะตััะธะน ะฝะต ะฝะฐะนะดะตะฝะพ"
    }
}

ืฆื• ืžืึทื›ืŸ ื“ื™ PS ืฉืจื™ืคื˜ ื‘ืึทืงื•ื•ืขื ืฆื• ืœื•ื™ืคืŸ, ืžื™ืจ ืžืึทื›ืŸ ืึท ืฉืึธืœ ืคึฟืึทืจ ืขืก ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ืงืžื“ ื˜ืขืงืข ืžื™ื˜ ื“ื™ ื–ืขืœื‘ืข ื ืึธืžืขืŸ ื•ื•ื™ ื“ื™ PS ืฉืจื™ืคื˜:

RDSManagement.cmd

@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*

ืžื™ืจ ืฉื˜ืขืœืŸ ื‘ื™ื™ื“ืข ื˜ืขืงืขืก ืื™ืŸ ืึท ื˜ืขืงืข ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฆื•ื˜ืจื™ื˜ืœืขืš ืคึฟืึทืจ "ืžืึทื ืึทื“ื–ืฉืขืจื–" ืื•ืŸ ื‘ืขื˜ืŸ ื–ื™ื™ ืฆื• ืฉื™ื™ึทืขืš-ืœืึธื’ื™ืŸ. ืื™ืฆื˜, ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ cmd ื˜ืขืงืข, ื–ื™ื™ ืงืขื ืขืŸ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ื“ื™ ืกืขืฉืึทื ื– ืคื•ืŸ ืื ื“ืขืจืข ื™ื•ื–ืขืจื– ืื™ืŸ RDS Shadow ืžืึธื“ืข ืื•ืŸ ืฆื•ื•ื™ื ื’ืขืŸ ื–ื™ื™ ืฆื• ืงืœืึธืฅ ืื•ื™ืก (ื“ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ื•ื•ืขืŸ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืงืขื ืขืŸ ื ื™ืฉื˜ ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ ืคืึทืจืขื ื“ื™ืงืŸ ืึท "ื›ืึทื ื’ื’ื™ื ื’" ืกืขืกื™ืข).

ืขืก ืงื•ืงื˜ ืขืคึผืขืก ื•ื•ื™ ื“ืึธืก:

ืคืืจ ื“ื™ "ืžื ื”ืœ"ื“ืขืœืึทื’ื™ื™ื˜ื™ื ื’ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ RDP ืกืขืฉืึทื ื–

ืคึฟืึทืจ ื“ื™ ื‘ืึทื ื™ืฆืขืจื“ืขืœืึทื’ื™ื™ื˜ื™ื ื’ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืคื•ืŸ RDP ืกืขืฉืึทื ื–

ืขื˜ืœืขื›ืข ืœืขืฆื˜ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ

ื ื•ืึทื ืก 1. ืื•ื™ื‘ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืกืขืกื™ืข ืฆื• ื•ื•ืึธืก ืžื™ืจ ื–ืขื ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืงืึธื ื˜ืจืึธืœ ืื™ื– ืœืึธื ื˜ืฉื˜ ืื™ื™ื“ืขืจ ื“ื™ Set-RDSPermissions.ps1 ืฉืจื™ืคื˜ ืื™ื– ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ, ื“ืขืจ "ืคืึทืจื•ื•ืึทืœื˜ืขืจ" ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ืึท ืึทืงืกืขืก ื˜ืขื•ืช. ื“ื™ ืœื™ื™ื–ื•ื ื’ ื“ืึธ ืื™ื– ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’: ื•ื•ืึทืจื˜ืŸ ื‘ื™ื– ื“ืขืจ ื’ืขืจืื˜ืŸ ื‘ืึทื ื™ืฆืขืจ ืœืึธื’ืก ืื™ืŸ.

ื ื•ืึทื ืก 2. ื ืึธืš ืขื˜ืœืขื›ืข ื˜ืขื’ ืคื•ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ RDP Shadow, ืžื™ืจ ื‘ืืžืขืจืงื˜ ืึท ื˜ืฉื™ืงืึทื•ื•ืข ื–ืฉื•ืง ืึธื“ืขืจ ืฉื˜ืจื™ืš: ื ืึธืš ื“ืขื ืกื•ืฃ ืคื•ืŸ ื“ื™ ืฉืึธื˜ืŸ ืกืขืกื™ืข, ื“ื™ ืฉืคึผืจืึทืš ื‘ืึทืจ ืื™ืŸ ื“ื™ ื˜ืึทืฅ ืคืึทืจืฉื•ื•ื™ื ื“ืŸ ืคึฟืึทืจ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื•ื•ืึธืก ืื™ื– ืงืึธื ื ืขืงื˜ืขื“ ืฆื•, ืื•ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืขืก ืฆื•ืจื™ืง, ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ื“ืึทืจืฃ ืฆื• ืจืข -ืฆื™ื™ื›ืŸ ืืจื™ื™ืŸ. ื•ื•ื™ ืขืก ื˜ื•ืจื ืก ืื•ื™ืก, ืžื™ืจ ื–ืขื ืขืŸ ื ื™ืฉื˜ ืึทืœื™ื™ืŸ: ืฆื™ื™ึทื˜, ะดะฒะฐ, ื“ืจื™ื™ึท.

ืึทื– ืก ืึทืœืข. ืื™ืš ื•ื•ื™ื ื˜ืฉืŸ ืื™ืจ ืื•ืŸ ื“ื™ื™ืŸ ืกืขืจื•ื•ืขืจืก ื’ื•ื˜ ื’ืขื–ื•ื ื˜. ื•ื•ื™ ืฉื˜ืขื ื“ื™ืง, ืื™ืš ืงื•ืง ืคืึธืจื•ื™ืก ืฆื• ื“ื™ื™ืŸ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืื•ืŸ ื‘ืขื˜ืŸ ืื™ืจ ืฆื• ื ืขืžืขืŸ ื“ื™ ืงื•ืจืฅ ื™ื‘ืขืจื‘ืœื™ืง ืื•ื ื˜ืŸ.

ืงื•ื•ืืœืŸ

ื‘ืœื•ื™ื– ืจืขื’ื™ืกื˜ืจื™ืจื˜ ื ื™ืฆืขืจืก ืงืขื ืขืŸ ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ื“ื™ ื™ื‘ืขืจื‘ืœื™ืง. ืกื™ื™ืŸ ืืจื™ื™ืŸื‘ื™ื˜ืข.

ื•ื•ืึธืก ื˜ืึธืŸ ืื™ืจ ื ื•ืฆืŸ?

  • ืงืกื ื•ืžืงืก%AMMYY Admin5

  • ืงืกื ื•ืžืงืก%AnyDesk11

  • ืงืกื ื•ืžืงืก%DameWare6

  • ืงืกื ื•ืžืงืก%Radmin15

  • ืงืกื ื•ืžืงืก%RDS Shadow9

  • ืงืกื ื•ืžืงืก%ืฉื ืขืœ ืึทืกื™ืกื˜ / Windows ืจื™ืžืึธื•ื˜ ืึทืกื™ืกื˜ืึทื ืก 1

  • ืงืกื ื•ืžืงืก%TeamViewer24

  • ืงืกื ื•ืžืงืก%VNC20

  • ืงืกื ื•ืžืงืก%ืื ื“ืขืจืข 20

  • ืงืกื ื•ืžืงืก%LiteManager2

62 ื‘ืื ื•ืฆืขืจ ื”ืื‘ืŸ ื’ืขืฉื˜ื™ืžื˜. 22 ื‘ืื ื•ืฆืขืจ ื”ืื‘ืŸ ื–ื™ืš ืืคื’ืขื”ืืœื˜ืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’