Pagdelegar sa pagdumala sa mga sesyon sa RDP

Pagdelegar sa pagdumala sa mga sesyon sa RDP
Sa organisasyon diin ako nagtrabaho, ang layo nga trabaho gidili sa prinsipyo. Ang. Hangtod sa miaging semana. Karon kinahanglan namong ipatuman dayon ang solusyon. Gikan sa negosyo - pagpahiangay sa mga proseso sa usa ka bag-ong format sa trabaho, gikan kanamo - PKI nga adunay mga PIN code ug mga token, VPN, detalyado nga pag-log ug daghan pa.
Lakip sa ubang mga butang, nagbutang ako og Remote Desktop Infrastructure aka Terminal Services. Adunay kami daghang mga pag-deploy sa RDS sa lainlaing mga sentro sa datos. Usa sa mga katuyoan mao ang paghimo sa mga kauban gikan sa mga may kalabutan nga departamento sa IT nga makonektar sa mga sesyon sa tiggamit nga interactive. Sama sa imong nahibal-an, adunay usa ka sumbanan nga mekanismo sa RDS Shadow alang niini, ug ang labing kadali nga paagi sa pagdelegar niini mao ang paghatag mga katungod sa lokal nga tagdumala sa mga server sa RDS.
Girespeto ug gihatagan nako og bili ang akong mga kauban, apan ako hakog kaayo kon bahin sa pagpanghatag sa mga katungod sa admin. 🙂 Sa mga musugot nako palihog sunda ang cut.

Aw, klaro ang tahas, karon moadto kita sa negosyo.

lakang 1

Magbuhat ta ug grupo sa seguridad sa Active Directory RDP_Operator ug ilakip niini ang mga account sa mga tiggamit nga gusto namon nga itugyan ang mga katungod:

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

Kung ikaw adunay daghang AD nga mga site, kinahanglan nimo nga maghulat hangtod kini masundog sa tanan nga mga tigkontrol sa domain sa dili pa mopadayon sa sunod nga lakang. Kini kasagaran dili molapas sa 15 minutos.

lakang 2

Hatagan nato ang mga katungod sa grupo sa pagdumala sa mga sesyon sa terminal sa matag usa sa mga server sa 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")
        }
    }
}

lakang 3

Idugang ang grupo sa lokal nga grupo Mga Gumagamit sa Remote Desktop sa matag usa sa RDSH server. Kung ang imong mga server gihiusa sa mga koleksyon sa sesyon, nan buhaton namon kini sa lebel sa pagkolekta:

$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)

Alang sa usa ka server nga among gigamit polisiya sa grupo, naghulat nga kini magamit sa mga server. Kadtong tapolan kaayo sa paghulat makapadali sa proseso gamit ang maayong daan nga gpupdate, mas maayo sa sentro.

lakang 4

Atong andamon ang mosunod nga PS script para sa "managers":

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 "    сессий не найдено"
    }
}

Aron mahimo ang PS script nga kombenyente sa pagdagan, maghimo kami usa ka kabhang alang niini sa porma sa usa ka cmd file nga adunay parehas nga ngalan sa PS script:

RDSManagement.cmd

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

Among gibutang ang duha ka mga file sa usa ka folder nga mahimong ma-access sa "managers" ug hangyoa sila sa pag-login pag-usab. Karon, pinaagi sa pagpadagan sa cmd file, makahimo sila sa pagkonektar sa mga sesyon sa ubang mga tiggamit sa RDS Shadow mode ug pugson sila sa pag-log out (kini mahimong mapuslanon kung ang user dili mahimong independente nga pagtapos sa usa ka "nagbitay" nga sesyon).

Ingon niini ang hitsura:

Alang sa "manager"Pagdelegar sa pagdumala sa mga sesyon sa RDP

Alang sa tiggamitPagdelegar sa pagdumala sa mga sesyon sa RDP

Pipila ka katapusan nga mga komento

Nuance 1. Kung ang sesyon sa tiggamit diin kami naningkamot nga makontrol gilusad sa wala pa ang Set-RDSPermissions.ps1 nga script gipatuman sa server, nan ang "manager" makadawat usa ka sayup sa pag-access. Ang solusyon dinhi klaro: paghulat hangtod ang gidumala nga tiggamit mag-log in.

Nuance 2. Pagkahuman sa pila ka adlaw nga pagtrabaho kauban ang RDP Shadow, nakamatikod kami usa ka makapaikag nga bug o bahin: pagkahuman sa sesyon sa anino, ang bar sa pinulongan sa tray mawala alang sa tiggamit nga konektado, ug aron mabalik kini, kinahanglan nga ibalik sa gumagamit. -sulod. Ingon sa nahibal-an, wala kami nag-inusara: mga panahon, duha ka, tulo.

Mao ra. Nanghinaut ko nga ikaw ug ang imong mga server maayong panglawas. Sama sa kanunay, nagpaabut ako sa imong feedback sa mga komento ug gihangyo ka nga kuhaon ang mubo nga survey sa ubos.

Mga tinubdan

Ang mga rehistradong tiggamit lamang ang makaapil sa survey. Sign in, walay sapayan.

Unsa imong gamit?

  • 8,1%AMMYY Admin5

  • 17,7%Bisan unsa nga desk11

  • 9,7%DameWare6

  • 24,2%Radmin15

  • 14,5%RDS Shadow9

  • 1,6%Dali nga Tabang / Windows Remote Assistance1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%uban 20

  • 3,2%LiteManager2

62 nga tiggamit ang nagboto. 22 ka tiggamit ang nag-abstain.

Source: www.habr.com

Idugang sa usa ka comment