แแ แแ แแแแแแแชแแแจแ, แกแแแแช แแ แแแฃแจแแแ, แแแกแขแแแชแแฃแ แ แแฃแจแแแแ แแ แแแชแแแจแ แแแ แซแแแฃแแแ. แแงแ. แแแกแฃแ แแแแ แแแแ. แแฎแแ แกแแกแฌแ แแคแแ แแแแแแฌแแ แแแแแกแแแแแก แแแแฎแแ แชแแแแแแ. แแแแแแกแแแแ - แแ แแชแแกแแแแก แแแแแขแแชแแ แแฎแแ แกแแแฃแจแแ แคแแ แแแขแแ, แฉแแแแแแ - PKI PIN แแแแแแแ แแ แขแแแแแแแแ, VPN, แแแขแแแฃแ แ แแแแแแแ แแ แแ แแแแแ แกแฎแแ.
แกแฎแแ แกแแแแแฎแแแแแ แแ แแแ, แแ แแแงแแแแแแ แแแกแขแแแชแแฃแ แ แแแกแแขแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก, แกแแฎแแแแ แขแแ แแแแแแแก แกแแ แแแกแแแก. แฉแแแ แแแแฅแแก แ แแแแแแแแ RDS แแแแแแแแแ แกแฎแแแแแกแฎแแ แแแแแชแแแแ แชแแแขแ แจแ. แแ แ-แแ แแ แแแแแแ แแงแ แแแแแแแแก แแแแชแแ แกแแจแฃแแแแแ แแแแชแแ แแแแแแจแแ แแแฃแแ IT แแแแแ แขแแแแแขแแแแแแ, แแแฃแแแแจแแ แแแแ แแแแฎแแแ แแแแแก แกแแกแแแแก แแแขแแ แแฅแขแแฃแแแ. แแแแแฎแกแแแแแแ, แแแแกแแแแแก แแ แกแแแแแก แกแขแแแแแ แขแฃแแ RDS Shadow แแแฅแแแแแแ แแ แแแกแ แแแแแแแ แแแแก แงแแแแแแ แแแ แขแแแ แแแแ แแแแแแแแ แแแ แแแแแแแกแขแ แแขแแ แแก แฃแคแแแแแแแก แแแแแญแแแ RDS แกแแ แแแ แแแแ.
แแ แแแขแแแก แแชแแ แแ แแแคแแกแแ แฉแแแก แแแแแแแแก, แแแแ แแ แซแแแแแ แแแฃแแแซแฆแแ แ แแแ , แ แแแแกแแช แกแแฅแแ แแฎแแแ แแแแแแแกแขแ แแขแแ แแก แฃแคแแแแแแแก แแแชแแแแก. ๐ แแแแแแแก, แแแแช แแแแแแฎแแแแ, แแแฎแแแ แแแฐแงแแแแ แญแ แแแก.
แแแ แแแ, แแแแชแแแ แแแแแแแ, แแฎแแ แแแแแ แแแแแแแแแ แกแแฅแแแแ.
แแแแแฏแ 1
แแแแแ แจแแแฅแแแแ แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแ Active Directory-แจแ RDP_แแแแ แแขแแ แแแ แแ แแแกแจแ แฉแแ แแแ แแ แแแแฎแแแ แแแแแแแก แแแแแ แแจแแแ, แ แแแแแแแกแแแแกแแช แแแแแแ แแแแแแแขแแแแ แฃแคแแแแแแ:
$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 โ แฃแคแแแแแแแก แแแแแแแ แแแ แแ แแแแแแแแกแขแ แแขแแ แแแแ Get-LoggedOnUser แแแ แแแแแก แแแคแแ แแแชแแแก แแแกแขแแแชแแฃแ แกแแกแขแแแแแแ แจแแกแฃแแ แแแแฎแแแ แแแแแแแก แจแแกแแฎแแ แกแแฃแแแแแกแ แแแ แ แแแแ แแแแแฌแงแแ PowerShell PS1 แกแแ แแแขแแแ แแแแแแแก แแแแฎแแแ แแแแแแแก แแแแแขแแแ แแแแแแแแ แแ แฃแกแแคแ แแฎแแแแแก แฏแแฃแคแจแ GPMC โ แแแซแฃแแแ gpupdate แงแแแแ แแแแแแฃแขแแ แแ OU
แแแแแแแแฎแแแจแ แแแแแฌแแแแแแ แจแแฃแซแแแแ แแฎแแแแ แแแ แแแแกแขแ แแ แแแฃแ แแแแฎแแแ แแแแแแก.
แ แแก แแงแแแแแ?
-
8,1%AMMYY Admin5
-
17,7%AnyDesk11
-
9,7%DameWare6
-
24,2%Radmin15
-
14,5%RDS Shadow9
-
1,6%แกแฌแ แแคแ แแแฎแแแ แแแ / Windows Remote Assistance1
-
38,7%TeamViewer24
-
32,3%VNC20
-
32,3%แกแฎแแ 20
-
3,2%LiteManager2
แฎแแ แแแกแชแ 62 แแแแฎแแแ แแแแแแ. 22 แแแแฎแแแ แแแแแแ แแแแ แจแแแแแแ.
แฌแงแแ แ: www.habr.com