Π ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ, Π³Π΄Π΅ Ρ ΡΠ°Π±ΠΎΡΠ°Ρ, ΡΠ΄Π°Π»Π΅Π½ΠΊΠ° Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π° Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅. ΠΡΠ»Π°. ΠΠΎ ΠΏΡΠΎΡΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»ΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π² ΡΡΠΎΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²Π½Π΅Π΄ΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡ Π±ΠΈΠ·Π½Π΅ΡΠ° β Π°Π΄Π°ΠΏΡΠ°ΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΊ Π½ΠΎΠ²ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΎΡ Π½Π°Ρ β 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)
ΠΠ»Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΠΌ
Π¨Π°Π³ 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 Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΡΠΎ Π»ΠΈ Π±Π°Π³, ΡΠΎ Π»ΠΈ ΡΠΈΡΡ: ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠ΅Π°Π½ΡΠ° Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π»ΠΈΡΡ, ΠΏΡΠΎΠΏΠ°Π΄Π°Π΅Ρ ΡΠ·ΡΠΊΠΎΠ²Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ Π² ΡΡΠ΅Π΅ ΠΈ ΡΡΠΎΠ±Ρ Π΅Π΅ Π²Π΅ΡΠ½ΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π»ΠΎΠ³ΠΈΠ½ΠΈΡΡΡΡ. ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΠΌΡ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ:
ΠΠ° ΡΡΠΎΠΌ Π²ΡΡ. ΠΠ΅Π»Π°Ρ Π·Π΄ΠΎΡΠΎΠ²ΡΡ Π²Π°ΠΌ ΠΈ Π²Π°ΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ. ΠΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, ΠΆΠ΄Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΈ ΠΏΡΠΎΡΡ ΠΏΡΠΎΠΉΡΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠΏΡΠΎΡ Π½ΠΈΠΆΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ
RDS Shadow β ΡΠ΅Π½Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ RDP ΡΠ΅ΡΡΠΈΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² Windows Server 2016 / 2012 R2 Windows Server 2012 Shadowing β Delegating Rights To Non-Admins Get-LoggedOnUser Gathers information of logged on users on remote systems The best way how to start PowerShell PS1 scripts ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΄ΠΎΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π³ΡΡΠΏΠΏΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ GPMC β Force gpupdate on all computers in OU
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
Π§Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ?
-
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