Додани идоракунии ҷаласаҳои RDP

Додани идоракунии ҷаласаҳои RDP
Дар ташкилоте, ки ман кор мекунам, кори дурдаст асосан манъ аст. буд. То ҳафтаи гузашта. Акнун ба мо лозим омад, ки халли масъаларо фавран ба амал барорем. Аз бизнес - мутобиқ кардани равандҳо ба формати нави корӣ, аз мо - PKI бо рамзҳои PIN ва нишонаҳо, VPN, сабти муфассал ва ғайра.
Дар байни чизҳои дигар, ман инфрасохтори дурдасти Мизи кориро таъсис додам, ки aka Terminal Services. Мо дар марказҳои гуногуни додаҳо якчанд ҷойгиркунии 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)

Барои серверҳои ягона мо истифода мебарем сиёсати гурӯҳ, интизори татбиқи он дар серверҳо. Онҳое, ки барои интизор шудан танбал ҳастанд, метавонанд ин равандро бо истифода аз 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 shell эҷод мекунем:

RDSManagement.cmd

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

Мо ҳарду файлро дар папкае ҷойгир мекунем, ки барои "менеҷерон" дастрас хоҳад буд ва аз онҳо хоҳиш мекунем, ки дубора ворид шаванд. Акнун, бо иҷро кардани файли cmd, онҳо метавонанд ба сеансҳои корбарони дигар дар реҷаи RDS Shadow пайваст шаванд ва онҳоро маҷбур кунанд, ки аз система хориҷ шаванд (ин метавонад муфид бошад, вақте ки корбар мустақилона сессияи "овезон" -ро қатъ карда наметавонад).

Чунин ба назар мерасад:

Барои "менеҷер"Додани идоракунии ҷаласаҳои RDP

Барои истифодабарандаДодани идоракунии ҷаласаҳои RDP

Якчанд шарҳҳои ниҳоӣ

Нусхаи 1. Агар сессияи корбаре, ки мо кӯшиши ба даст овардани назоратро дорем, пеш аз иҷро шудани скрипти Set-RDSPermissions.ps1 дар сервер оғоз шуда бошад, он гоҳ "менеҷер" хатои дастрасӣ пайдо мекунад. Ҳалли ин ҷо аён аст: то ворид шудани корбари идорашаванда интизор шавед.

Нусхаи 2. Пас аз чанд рӯзи кор бо RDP Shadow, мо як хато ё хусусияти ҷолибро мушоҳида кардем: пас аз ба итмом расидани сессияи соя, сатри забонҳо дар панел барои корбаре, ки ба он пайваст мешавад, нопадид мешавад ва барои баргардонидани он корбар бояд дубора -даромадан. Тавре маълум мешавад, мо танҳо нестем: вақтҳо, два, се.

Ҳамааш ҳамин. Ба шумо ва серверҳои шумо саломатии бардавом таманно дорам. Мисли ҳамеша, ман интизори фикру мулоҳизаҳои шумо дар шарҳҳо ҳастам ва аз шумо хоҳиш мекунам, ки пурсиши кӯтоҳи зерро гузаронед.

Манбаъҳои иттилоот

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Шумо чиро истифода мебаред?

  • 8,1%AMMYY Admin5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%Радмин 15

  • 14,5%RDS Shadow9

  • 1,6%Ёрии зуд / Кӯмаки дурдасти Windows1

  • 38,7%TeamViewer 24

  • 32,3%VNC20

  • 32,3%дигар 20

  • 3,2%LiteManager2

62 корбар овоз доданд. 22 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ