Π”Π΅Π»Π΅Π³ΠΈΡ€Π°ΠΌΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° RDP сСсии

Π”Π΅Π»Π΅Π³ΠΈΡ€Π°ΠΌΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° RDP сСсии
Π’ организация, Π² която работя, дистанционната Ρ€Π°Π±ΠΎΡ‚Π° Π΅ Π·Π°Π±Ρ€Π°Π½Π΅Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ½ΠΎ. Π‘Π΅Π³Π°. Π”ΠΎ ΠΌΠΈΠ½Π°Π»Π°Ρ‚Π° сСдмица. Π‘Π΅Π³Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π²Π½Π΅Π΄Ρ€ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ спСшно. ΠžΡ‚ бизнСса β€” Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° процСситС към новия Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, ΠΎΡ‚ нас β€” PKI с ПИН ΠΊΠΎΠ΄ΠΎΠ²Π΅ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ, VPN, Π΄Π΅Ρ‚Π°ΠΉΠ»Π½ΠΎ Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ.
ОсвСн всичко Π΄Ρ€ΡƒΠ³ΠΎ, сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ… със настройката Π½Π° инфраструктурата Π·Π° дистанционни Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ станции aka слуТбата ΠΏΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΈ. ИмамС няколко RDS Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π¦ΠžΠ”. Π•Π΄Π½Π° ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ бСшС Π΄Π° сС Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° ΠΊΠΎΠ»Π΅Π³ΠΈ ΠΎΡ‚ съсСдни IT ΠΎΡ‚Π΄Π΅Π»ΠΈ Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ с потрСбитСлскитС сСсии Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ. ΠšΠ°ΠΊΡ‚ΠΎ Π΅ извСстно, Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ RDS Shadow ΠΈ Π½Π°ΠΉ-простият Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³ΠΎ Π΄Π΅Π»Π΅Π³ΠΈΡ€Π°ΠΌΠ΅ β€” Π΅ Π΄Π° прСдоставим ΠΏΡ€Π°Π²Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½ администратор Π½Π° RDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅.
Π£Π²Π°ΠΆΠ°Π²Π°ΠΌ ΠΈ цСня ΠΊΠΎΠ»Π΅Π³ΠΈΡ‚Π΅ си, Π½ΠΎ съм ΠΌΠ½ΠΎΠ³ΠΎ стиснат ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° админски ΠΏΡ€Π°Π²Π°. πŸ™‚ Π’Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са съгласни с ΠΌΠ΅Π½, моля, ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

ΠšΠ°ΠΊΠ²ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π΅, Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ ясна, сСга β€” към Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1

Π©Π΅ създадСм Π² Active Directory Π³Ρ€ΡƒΠΏΠ° Π·Π° сигурност 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 ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅:

Set-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-скрипта, Ρ‰Π΅ създадСм ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° cmd Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅, ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ΠΎ с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° 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 забСлязахмС интСрСсСн бъг ΠΈΠ»ΠΈ функция: слСд Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° сСсията Π½Π° потрСбитСля, към ΠΊΠΎΠ³ΠΎΡ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ…ΠΌΠ΅, Π΅Π·ΠΈΠΊΠΎΠ²Π°Ρ‚Π° Π»Π΅Π½Ρ‚Π° Π² Ρ‚Ρ€Π΅ΠΉΠ° ΠΈΠ·Ρ‡Π΅Π·Π²Π° ΠΈ потрСбитСлят трябва Π΄Π° Π²Π»Π΅Π·Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, Π·Π° Π΄Π° я Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈ. Оказа сС, Ρ‡Π΅ Π½Π΅ смС СдинствСни: Ρ€Π°Π·, Π΄Π²Π°, Ρ‚Ρ€ΠΈ.

На Ρ‚ΠΎΠ²Π° всичко. ЖСлая Π·Π΄Ρ€Π°Π²Π΅ Π½Π° вас ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠ½Π°Π³ΠΈ, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ ΠΈ Π²ΠΈ моля Π΄Π° ΠΏΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠ° Π°Π½ΠΊΠ΅Ρ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ

Π‘Π°ΠΌΠΎ рСгистрирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° участват Π² Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π°. Π’Π»Π΅Π·Ρ‚Π΅, моля.

Π‘ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅?

  • 8,1%AMMYY Admin5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%Radmin15

  • 14,5%RDS Shadow9

  • 1,6%Quick Assist / Windows Remote Assistance1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%Π΄Ρ€ΡƒΠ³ΠΎ20

  • 3,2%LiteManager2

Гласували са 62 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π’ΡŠΠ·Π΄ΡŠΡ€ΠΆΠ°Π»ΠΈ са сС 22 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster