рдЖрд░рдбреАрдкреА рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рд╕реМрдВрдкрдирд╛

рдЖрд░рдбреАрдкреА рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рд╕реМрдВрдкрдирд╛
рдЬрд┐рд╕ рд╕рдВрдЧрдарди рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рджреВрд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИред рдерд╛ред рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рддрдХ. рдЕрдм рд╣рдореЗрдВ рддрддреНрдХрд╛рд▓ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рд╡реНрдпрд╡рд╕рд╛рдп рд╕реЗ - рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирдП рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛рдирд╛, рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ - рдкрд┐рди рдХреЛрдб рдФрд░ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреАрдХреЗрдЖрдИ, рд╡реАрдкреАрдПрди, рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЙрд░реНрдл тАЛтАЛрдЯрд░реНрдорд┐рдирд▓ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдХреЗрдВрджреНрд░реЛрдВ рдореЗрдВ рдХрдИ рдЖрд░рдбреАрдПрд╕ рддреИрдирд╛рддреА рд╣реИрдВред рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдИрдЯреА рд╡рд┐рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░реЛрдВ рд╕реЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рдирд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЖрд░рдбреАрдПрд╕ рдЫрд╛рдпрд╛ рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реМрдВрдкрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЖрд░рдбреАрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╢рд╛рд╕рдХ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдирд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд╣рддреНрд╡ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЕрдзрд┐рдХрд╛рд░ рд╕реМрдВрдкрдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рдореИрдВ рдмрд╣реБрдд рд▓рд╛рд▓рдЪреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВред ЁЯЩВ рдЬреЛ рд▓реЛрдЧ рдореБрдЭрд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдХреГрдкрдпрд╛ рдХрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рдЦреИрд░, рдХрд╛рдо рддреЛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЕрдм рдХрд╛рдо рдкрд░ рдЖрддреЗ рд╣реИрдВред

1 рдХрджрдо

рдЖрдЗрдП рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдмрдирд╛рдПрдВ рдЖрд░рдбреАрдкреА_рдСрдкрд░реЗрдЯрд░реНрд╕ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЦрд╛рддреЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдзрд┐рдХрд╛рд░ рд╕реМрдВрдкрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

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

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХрд╛рдзрд┐рдХ AD рд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдбреЛрдореЗрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдкрд░ рдЗрд╕рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред рдЗрд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ 15 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

2 рдХрджрдо

рдЖрдЗрдП рд╕рдореВрд╣ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрд░рдбреАрдПрд╕рдПрдЪ рд╕рд░реНрд╡рд░ рдкрд░ рдЯрд░реНрдорд┐рдирд▓ рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рджреЗрдВ:

рд╕реЗрдЯ-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 рдХрджрдо

рдЖрдЗрдП "рдкреНрд░рдмрдВрдзрдХреЛрдВ" рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреАрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ:

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 "    ╤Б╨╡╤Б╤Б╨╕╨╣ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛"
    }
}

рдкреАрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреАрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдПрдордбреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ:

RDSManagement.cmd

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

рд╣рдо рджреЛрдиреЛрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ "рдкреНрд░рдмрдВрдзрдХреЛрдВ" рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗред рдЕрдм, рд╕реАрдПрдордбреА рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдХрд░, рд╡реЗ рдЖрд░рдбреАрдПрд╕ рд╢реИрдбреЛ рдореЛрдб рдореЗрдВ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рддреНрд░реЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рддрдм рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ "рд╣реИрдВрдЧрд┐рдВрдЧ" рд╕рддреНрд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

"рдкреНрд░рдмрдВрдзрдХ" рдХреЗ рд▓рд┐рдПрдЖрд░рдбреАрдкреА рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рд╕реМрдВрдкрдирд╛

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдПрдЖрд░рдбреАрдкреА рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рд╕реМрдВрдкрдирд╛

рдХреБрдЫ рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ 1. рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдкрд░ Set-RDSPermissions.ps1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ "рдкреНрд░рдмрдВрдзрдХ" рдХреЛ рдПрдХ рдПрдХреНрд╕реЗрд╕ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдкреНрд░рдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓реЙрдЧ рдЗрди рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ 2. рдЖрд░рдбреАрдкреА рд╢реИрдбреЛ рдХреЗ рд╕рд╛рде рдХрдИ рджрд┐рдиреЛрдВ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдЧ рдпрд╛ рдлреАрдЪрд░ рджреЗрдЦрд╛: рд╢реИрдбреЛ рд╕рддреНрд░ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рдж, рдЯреНрд░реЗ рдореЗрдВ рднрд╛рд╖рд╛ рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред -рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдо рдЕрдХреЗрд▓реЗ рдирд╣реАрдВ рд╣реИрдВ: рд╕рдордп, ╨┤╨▓╨░, рддреАрди.

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореИрдВ рдЖрдкрдХреЗ рдФрд░ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдЪреНрдЫреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЖрдкрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ

рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВрдХреГрдкрдпрд╛ред

рддреБрдо рдХреНрдпрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реЛ?

  • 8,1% рддрдХ рдЕрдореНрдореА рдПрдбрдорд┐рди5

  • 17,7% рддрдХ AnyDesk11

  • 9,7% рддрдХ рдбреЗрдорд╡реЗрдпрд░6

  • 24,2% рддрдХ рд░реИрдбрдорд┐рди15

  • 14,5% рддрдХ рдЖрд░рдбреАрдПрд╕ рд╢реИрдбреЛ9

  • 1,6% рддрдХ рддреНрд╡рд░рд┐рдд рд╕рд╣рд╛рдпрддрд╛/рд╡рд┐рдВрдбреЛрдЬ рд░рд┐рдореЛрдЯ рд╕рд╣рд╛рдпрддрд╛1

  • 38,7% рддрдХ рдЯреАрдорд╡реНрдпреВрдЕрд░24

  • 32,3% рддрдХ рд╡реАрдПрдирд╕реА20

  • 32,3% рддрдХ рдЕрдиреНрдп20

  • 3,2% рддрдХ рд▓рд╛рдЗрдЯрдореИрдиреЗрдЬрд░2

62 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдорддрджрд╛рди рдХрд┐рдпрд╛ред 22 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд░рд╣реЗред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ