Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ RDP-сСансами

Π”Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ RDP-сСансами
Π’ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ, ΡƒΠ΄Π°Π»Π΅Π½ΠΊΠ° Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅. Π‘Ρ‹Π»Π°. Π”ΠΎ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»ΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π² срочном порядкС Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠžΡ‚ бизнСса β€” адаптация процСссов ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΎΡ‚ нас β€” PKI с ΠΏΠΈΠ½-ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ, VPN, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ Π΅Ρ‰Ρ‘.
Помимо всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, я занимался настройкой инфраструктуры ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… столов aka слуТбы Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ². У нас нСсколько RDS-Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π¦ΠžΠ”Π°Ρ…. Одной ΠΈΠ· Π·Π°Π΄Π°Ρ‡ Π±Ρ‹Π»ΠΎ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ ΠΈΠ· смСТных ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ ИВ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ сСансам Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Как извСстно, для этого Π΅ΡΡ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ 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