RDP เชธเชคเซเชฐเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เชธเซ‹เช‚เชชเชตเซเช‚

RDP เชธเชคเซเชฐเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เชธเซ‹เช‚เชชเชตเซเช‚
เชนเซเช‚ เชœเซ‡ เชธเช‚เชธเซเชฅเชพเชฎเชพเช‚ เช•เชพเชฎ เช•เชฐเซเช‚ เช›เซเช‚ เชคเซเชฏเชพเช‚ เชฐเชฟเชฎเซ‹เชŸ เชตเชฐเซเช• เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฐเซ€เชคเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช›เซ‡. เชนเชคเซ€. เช—เชฏเชพ เชธเชชเซเชคเชพเชน เชธเซเชงเซ€. เชนเชตเซ‡ เช…เชฎเชพเชฐเซ‡ เชคเชพเช•เซ€เชฆเซ‡ เช‰เช•เซ‡เชฒ เชฒเชพเชตเชตเชพเชจเซ‹ เชนเชคเซ‹. เชตเซเชฏเชตเชธเชพเชฏเชฅเซ€ - เชจเชตเชพ เช•เชพเชฐเซเชฏ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เช…เชจเซเช•เซ‚เชฒเชฟเชค เช•เชฐเชตเชพ, เช…เชฎเชพเชฐเชพ เชคเชฐเชซเชฅเซ€ - PIN เช•เซ‹เชก เช…เชจเซ‡ เชŸเซ‹เช•เชจเซเชธ เชธเชพเชฅเซ‡ PKI, VPN, เชตเชฟเช—เชคเชตเชพเชฐ เชฒเซ‹เช—เชฟเช‚เช— เช…เชจเซ‡ เช˜เชฃเซเช‚ เชฌเชงเซเช‚.
เช…เชจเซเชฏ เชตเชธเซเชคเซเช“เชจเซ€ เชธเชพเชฅเซ‡, เชนเซเช‚ เชฐเชฟเชฎเซ‹เชŸ เชกเซ‡เชธเซเช•เชŸเซ‹เชช เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เช‰เชฐเซเชซ เชŸเชฐเซเชฎเชฟเชจเชฒ เชธเซ‡เชตเชพเช“ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เชนเชคเซ‹. เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชตเชฟเชตเชฟเชง เชกเซ‡เชŸเชพ เชธเซ‡เชจเซเชŸเชฐเซ‹เชฎเชพเช‚ เช…เชจเซ‡เช• RDS เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เช›เซ‡. เชเช• เชงเซเชฏเซ‡เชฏ เชธเช‚เชฌเช‚เชงเชฟเชค IT เชตเชฟเชญเชพเช—เซ‹เชจเชพ เชธเชนเช•เชพเชฐเซเชฏเช•เชฐเซ‹เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เช‡เชจเซเชŸเชฐเซ‡เช•เซเชŸเชฟเชต เชฐเซ€เชคเซ‡ เช•เชจเซ‡เช•เซเชŸ เชฅเชตเชพ เชธเช•เซเชทเชฎ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชนเชคเซ‹. เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเชพเชฃเซ‹ เช›เซ‹, เช† เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค RDS เชถเซ‡เชกเซ‹ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซ‹เช‚เชชเชตเชพเชจเซ‹ เชธเซŒเชฅเซ€ เชธเชนเซ‡เชฒเซ‹ เชฐเชธเซเชคเซ‹ เช เช›เซ‡ เช•เซ‡ RDS เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชธเซเชฅเชพเชจเชฟเช• เชธเช‚เชšเชพเชฒเช• เช…เชงเชฟเช•เชพเชฐเซ‹ เช†เชชเชตเชพ.
เชนเซเช‚ เชฎเชพเชฐเชพ เชธเชนเช•เชฐเซเชฎเซ€เช“เชจเซเช‚ เชธเชจเซเชฎเชพเชจ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏ เชฐเชพเช–เซเช‚ เช›เซเช‚, เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชเชกเชฎเชฟเชจ เช…เชงเชฟเช•เชพเชฐเซ‹ เช†เชชเชตเชพเชจเซ€ เชตเชพเชค เช†เชตเซ‡ เช›เซ‡ เชคเซเชฏเชพเชฐเซ‡ เชนเซเช‚ เช–เซ‚เชฌ เชœ เชฒเซ‹เชญเซ€ เช›เซเช‚. ๐Ÿ™‚ เชœเซ‡เช“ เชฎเชพเชฐเซ€ เชธเชพเชฅเซ‡ เชธเชนเชฎเชค เช›เซ‡, เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช•เชŸเชจเซ‡ เช…เชจเซเชธเชฐเซ‹.

เชธเชพเชฐเซเช‚, เช•เชพเชฐเซเชฏ เชธเซเชชเชทเซเชŸ เช›เซ‡, เชนเชตเซ‡ เชšเชพเชฒเซ‹ เชตเซเชฏเชตเชธเชพเชฏ เชชเชฐ เช‰เชคเชฐเซ€เช.

เชชเช—เชฒเซเช‚ 1

เชšเชพเชฒเซ‹ เชเช•เซเชŸเชฟเชต เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเซเชฐเช•เซเชทเชพ เชœเซ‚เชฅ เชฌเชจเชพเชตเซ€เช RDP_Operators เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เชคเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเชพ เชเช•เชพเช‰เชจเซเชŸเซเชธ เชถเชพเชฎเซ‡เชฒ เช•เชฐเซ‹ เชœเซ‡เชฎเชจเซ‡ เช…เชฎเซ‡ เช…เชงเชฟเช•เชพเชฐเซ‹ เชธเซ‹เช‚เชชเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช:

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

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเชนเซเชตเชฟเชง AD เชธเชพเช‡เชŸเซเชธ เช›เซ‡, เชคเซ‹ เชคเชฎเชพเชฐเซ‡ เช†เช—เชฒเชพ เชชเช—เชฒเชพ เชชเชฐ เชœเชคเชพ เชชเชนเซ‡เชฒเชพ เชฌเชงเชพ เชกเซ‹เชฎเซ‡เชจ เชจเชฟเชฏเช‚เชคเซเชฐเช•เซ‹ เชชเชฐ เชคเซ‡เชจเซ€ เชจเช•เชฒ เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชฐเชพเชน เชœเซ‹เชตเซ€ เชชเชกเชถเซ‡. เช†เชฎเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ 15 เชฎเชฟเชจเชฟเชŸเชฅเซ€ เชตเชงเซ เชธเชฎเชฏ เชฒเชพเช—เชคเซ‹ เชจเชฅเซ€.

เชชเช—เชฒเซเช‚ 2

เชšเชพเชฒเซ‹ เชœเซ‚เชฅเชจเซ‡ เชฆเชฐเซ‡เช• 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")
        }
    }
}

เชชเช—เชฒเซเช‚ 3

เชœเซ‚เชฅเชจเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชœเซ‚เชฅเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ เชฆเซ‚เชฐเชธเซเชฅ เชกเซ‡เชธเซเช•เชŸเซ‹เชช เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเชฐเซ‡เช• RDSH เชธเชฐเซเชตเชฐ เชชเชฐ. เชœเซ‹ เชคเชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐเซเชธเชจเซ‡ เชธเชคเซเชฐ เชธเช‚เช—เซเชฐเชนเชฎเชพเช‚ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡, เชคเซ‹ เช…เชฎเซ‡ เช† เชธเช‚เช—เซเชฐเชน เชธเซเชคเชฐเซ‡ เช•เชฐเซ€เช เช›เซ€เช:

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

เชธเชฟเช‚เช—เชฒ เชธเชฐเซเชตเชฐเซเชธ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช เชœเซ‚เชฅ เชจเซ€เชคเชฟ, เชคเซ‡ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชฒเชพเช—เซ เชฅเชตเชพเชจเซ€ เชฐเชพเชน เชœเซ‹เชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. เชœเซ‡เช“ เชฐเชพเชน เชœเซ‹เชตเชพเชฎเชพเช‚ เช–เซ‚เชฌ เช†เชณเชธเซ เช›เซ‡ เชคเซ‡เช“ เชชเซเชฐเชพเชงเชพเชจเซเชฏเชฎเชพเช‚ เชธเชพเชฐเชพ เชœเซ‚เชจเชพ gpupdate เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชฏ เชฐเซ€เชคเซ‡.

เชชเช—เชฒเซเช‚ 4

เชšเชพเชฒเซ‹ โ€œเชฎเซ‡เชจเซ‡เชœเชฐเซ‹โ€ โ€‹โ€‹เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเซ€ PS เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€เช:

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 เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชœเซ‡เชตเชพ เชœ เชจเชพเชฎ เชธเชพเชฅเซ‡ cmd เชซเชพเช‡เชฒเชจเชพ เชฐเซ‚เชชเชฎเชพเช‚ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชถเซ‡เชฒ เชฌเชจเชพเชตเซ€เชถเซเช‚:

RDSManagement.cmd

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

เช…เชฎเซ‡ เชฌเช‚เชจเซ‡ เชซเชพเช‡เชฒเซ‹เชจเซ‡ เชเชตเชพ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชฎเซ‚เช•เซ€เช เช›เซ€เช เชœเซ‡ "เชฎเซ‡เชจเซ‡เชœเชฐเซ‹" เชฎเชพเชŸเซ‡ เชเช•เซเชธเซ‡เชธเชฟเชฌเชฒ เชนเชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‰เช—เชฟเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซ€เชถเซเช‚. เชนเชตเซ‡, cmd เชซเชพเช‡เชฒ เชšเชฒเชพเชตเซ€เชจเซ‡, เชคเซ‡เช“ RDS เชถเซ‡เชกเซ‹ เชฎเซ‹เชกเชฎเชพเช‚ เช…เชจเซเชฏ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเชพ เชธเชคเซเชฐเซ‹ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชˆ เชถเช•เชถเซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฒเซ‰เช— เช†เช‰เชŸ เช•เชฐเชตเชพ เชฆเชฌเชพเชฃ เช•เชฐเชถเซ‡ (เชœเซเชฏเชพเชฐเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเซเชตเชคเช‚เชคเซเชฐ เชฐเซ€เชคเซ‡ "เชนเซ‡เช‚เช—เชฟเช‚เช—" เชธเชคเซเชฐเชจเซ‡ เชธเชฎเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€ เชคเซเชฏเชพเชฐเซ‡ เช† เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡).

เชคเซ‡ เช†เชจเชพ เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

"เชฎเซ‡เชจเซ‡เชœเชฐ" เชฎเชพเชŸเซ‡RDP เชธเชคเซเชฐเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เชธเซ‹เช‚เชชเชตเซเช‚

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฎเชพเชŸเซ‡RDP เชธเชคเซเชฐเซ‹เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เชธเซ‹เช‚เชชเชตเซเช‚

เชฅเซ‹เชกเซ€ เช…เช‚เชคเชฟเชฎ เชŸเชฟเชชเซเชชเชฃเซ€เช“

เช‰เชชเชฆเซเชฐเชต 1. เชœเซ‹ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเชคเซเชฐ เช•เซ‡ เชœเซ‡เชจเชพ เชชเชฐ เช…เชฎเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ เชฎเซ‡เชณเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชคเซ‡ Set-RDSPermissions.ps1 เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชธเชฐเซเชตเชฐ เชชเชฐ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เชฅเชพเชฏ เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚ เชฒเซ‰เชจเซเชš เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‹ เชชเช›เซ€ "เชฎเซ‡เชจเซ‡เชœเชฐ" เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชญเซ‚เชฒ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡. เช…เชนเซ€เช‚ เช‰เช•เซ‡เชฒ เชธเซเชชเชทเซเชŸ เช›เซ‡: เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฒเซ‹เช— เช‡เชจ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชฐเชพเชน เชœเซเช“.

เช‰เชชเชฆเซเชฐเชต 2. RDP เชถเซ‡เชกเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซเชฏเชพเชจเชพ เช˜เชฃเชพ เชฆเชฟเชตเชธเซ‹ เชชเช›เซ€, เช…เชฎเซ‡ เชเช• เชฐเชธเชชเซเชฐเชฆ เชฌเช— เช…เชฅเชตเชพ เชฒเช•เซเชทเชฃ เชœเซ‹เชฏเซเช‚: เชถเซ‡เชกเซ‹ เชธเชคเซเชฐเชจเชพ เช…เช‚เชค เชชเช›เซ€, เชŸเซเชฐเซ‡เชฎเชพเช‚เชจเซ‹ เชฒเซ‡เช‚เช—เซเชตเซ‡เชœ เชฌเชพเชฐ เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เชœเชพเชฏ เช›เซ‡ เชœเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชชเชพเช›เซเช‚ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. -เชชเซเชฐเชตเซ‡เชถ เช•เชฐเซ‹. เชœเซ‡เชฎ เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡, เช…เชฎเซ‡ เชเช•เชฒเชพ เชจเชฅเซ€: เชตเช–เชค, ะดะฒะฐ, เชคเซเชฐเชฃ.

เชฌเชธ เชเชŸเชฒเซเช‚ เชœ. เชนเซเช‚ เชคเชฎเชจเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชธเชฐเซเชตเชฐเซเชธเชจเซ‡ เชธเชพเชฐเชพ เชธเซเชตเชพเชธเซเชฅเซเชฏเชจเซ€ เช‡เชšเซเช›เชพ เช•เชฐเซเช‚ เช›เซเช‚. เชนเช‚เชฎเซ‡เชถเชจเซ€ เชœเซ‡เชฎ, เชนเซเช‚ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชคเชฎเชพเชฐเชพ เชชเซเชฐเชคเชฟเชธเชพเชฆเชจเซ€ เชฐเชพเชน เชœเซ‹เช‰เช‚ เช›เซเช‚ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชจเซ€เชšเซ‡ เชŸเซ‚เช‚เช•เชพ เชธเชฐเซเชตเซ‡เช•เซเชทเชฃเชฎเชพเช‚ เชญเชพเช— เชฒเซ‡เชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซเช‚ เช›เซเช‚.

เชธเซเชคเซเชฐเซ‹เชคเซ‹

เชซเช•เซเชค เชจเซ‹เช‚เชงเชพเชฏเซ‡เชฒเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชœ เชธเชฐเซเชตเซ‡เชฎเชพเช‚ เชญเชพเช— เชฒเชˆ เชถเช•เซ‡ เช›เซ‡. เชธเชพเช‡เชจ เช‡เชจ เช•เชฐเซ‹, เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡.

เชคเชฎเซ‡ เชถเซเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹?

  • 8,1%AMMYY เชเชกเชฎเชฟเชจ5

  • 17,7%เช•เซ‹เชˆเชชเชฃ เชกเซ‡เชธเซเช•11

  • 9,7%เชกเซ‡เชฎเชตเซ‡เชฐ6

  • 24,2%เชฐเซ‡เชกเชฎเซ€เชจ15

  • 14,5%RDS เชถเซ‡เชกเซ‹9

  • 1,6%เช•เซเชตเชฟเช• เช…เชธเชฟเชธเซเชŸ / เชตเชฟเชจเซเชกเซ‹เช เชฐเซ€เชฎเซ‹เชŸ เช†เชธเชฟเชธเซเชŸเชจเซเชธ1

  • 38,7%เชŸเซ€เชฎเชตเซเชฏเซเช…เชฐ24

  • 32,3%VNC20

  • 32,3%เช…เชจเซเชฏ20

  • 3,2%เชฒเชพเช‡เชŸ เชฎเซ‡เชจเซ‡เชœเชฐ2

62 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เช เชฎเชค โ€‹โ€‹เช†เชชเซเชฏเซ‹. 22 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเซ‚เชฐ เชฐเชนเซเชฏเชพ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹