Π ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ, Π² ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΡ, Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ½ΠΎ. Π‘Π΅Π³Π°. ΠΠΎ ΠΌΠΈΠ½Π°Π»Π°ΡΠ° ΡΠ΅Π΄ΠΌΠΈΡΠ°. Π‘Π΅Π³Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π²Π½Π΅Π΄ΡΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡ Π±ΠΈΠ·Π½Π΅ΡΠ° β Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΊΡΠΌ Π½ΠΎΠ²ΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΠΎΡ Π½Π°Ρ β 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 ΠΈ Π΄Π° Π³ΠΈ ΡΠ°Π·Π»ΠΎΠ³ΠΈΠ½ΠΈΡΠ°Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌ Π΄Π° Π·Π°Π²ΡΡΡΠΈ Β«Π·Π°Π²ΠΈΡΠ½Π°Π»Π°Β» ΡΠ΅ΡΠΈΡ).
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠΎΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
ΠΠ° Β«ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠΈΡΒ»
ΠΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π°ΠΊΡΠ°Ρ
ΠΡΠ°Π½Ρ 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
