RDP సెషన్‌ల నిర్వహణను అప్పగించడం

RDP సెషన్‌ల నిర్వహణను అప్పగించడం
నేను పనిచేసే సంస్థలో, రిమోట్ పని సూత్రప్రాయంగా నిషేధించబడింది. ఉంది. గత వారం వరకు. ఇప్పుడు మేము అత్యవసరంగా ఒక పరిష్కారాన్ని అమలు చేయాల్సి వచ్చింది. వ్యాపారం నుండి - ప్రాసెస్‌లను కొత్త పని ఆకృతికి స్వీకరించడం, మా నుండి - PIN కోడ్‌లు మరియు టోకెన్‌లతో PKI, VPN, వివరణాత్మక లాగింగ్ మరియు మరిన్ని.
ఇతర విషయాలతోపాటు, నేను రిమోట్ డెస్క్‌టాప్ ఇన్‌ఫ్రాస్ట్రక్చర్ అకా టెర్మినల్ సర్వీసెస్‌ని సెటప్ చేస్తున్నాను. మేము వివిధ డేటా సెంటర్లలో అనేక RDS విస్తరణలను కలిగి ఉన్నాము. సంబంధిత IT విభాగాల నుండి సహోద్యోగులను ఇంటరాక్టివ్‌గా వినియోగదారు సెషన్‌లకు కనెక్ట్ చేయడాన్ని ప్రారంభించడం లక్ష్యాలలో ఒకటి. మీకు తెలిసినట్లుగా, దీని కోసం ఒక ప్రామాణిక RDS షాడో మెకానిజం ఉంది మరియు RDS సర్వర్‌లపై స్థానిక నిర్వాహక హక్కులను అందించడం దానిని అప్పగించడానికి సులభమైన మార్గం.
నేను నా సహోద్యోగులను గౌరవిస్తాను మరియు గౌరవిస్తాను, కానీ నిర్వాహక హక్కులను అందజేయడం విషయంలో నేను చాలా అత్యాశతో ఉన్నాను. 🙂 నాతో ఏకీభవించే వారి కోసం, దయచేసి కట్‌ని అనుసరించండి.

సరే, పని స్పష్టంగా ఉంది, ఇప్పుడు వ్యాపారానికి దిగుదాం.

1 అడుగు

యాక్టివ్ డైరెక్టరీలో భద్రతా సమూహాన్ని క్రియేట్ చేద్దాం 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 సర్వర్‌లలో టెర్మినల్ సెషన్‌లను నిర్వహించడానికి సమూహ హక్కులను ఇద్దాం:

సెట్-RDSPpermissions.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 స్క్రిప్ట్‌ను అమలు చేయడానికి సౌకర్యవంతంగా చేయడానికి, మేము దాని కోసం PS స్క్రిప్ట్ వలె అదే పేరుతో cmd ఫైల్ రూపంలో షెల్‌ను సృష్టిస్తాము:

RDSManagement.cmd

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

మేము రెండు ఫైల్‌లను “మేనేజర్‌లు” యాక్సెస్ చేయగల ఫోల్డర్‌లో ఉంచాము మరియు వారిని మళ్లీ లాగిన్ చేయమని అడుగుతాము. ఇప్పుడు, cmd ఫైల్‌ను అమలు చేయడం ద్వారా, వారు RDS షాడో మోడ్‌లోని ఇతర వినియోగదారుల సెషన్‌లకు కనెక్ట్ చేయగలుగుతారు మరియు వారిని లాగ్ అవుట్ చేయమని బలవంతం చేయగలుగుతారు (వినియోగదారు స్వతంత్రంగా "హాంగింగ్" సెషన్‌ను ముగించలేనప్పుడు ఇది ఉపయోగపడుతుంది).

ఇది ఇలా కనిపిస్తుంది:

"మేనేజర్" కోసంRDP సెషన్‌ల నిర్వహణను అప్పగించడం

వినియోగదారు కోసంRDP సెషన్‌ల నిర్వహణను అప్పగించడం

కొన్ని చివరి వ్యాఖ్యలు

స్వల్పభేదాన్ని 1. మేము నియంత్రణను పొందేందుకు ప్రయత్నిస్తున్న వినియోగదారు సెషన్ Set-RDSPpermissions.ps1 స్క్రిప్ట్ సర్వర్‌లో అమలు చేయబడే ముందు ప్రారంభించబడితే, అప్పుడు “మేనేజర్” యాక్సెస్ లోపాన్ని స్వీకరిస్తుంది. ఇక్కడ పరిష్కారం స్పష్టంగా ఉంది: నిర్వహించబడే వినియోగదారు లాగిన్ అయ్యే వరకు వేచి ఉండండి.

స్వల్పభేదాన్ని 2. RDP షాడోతో చాలా రోజుల పనిచేసిన తర్వాత, మేము ఒక ఆసక్తికరమైన బగ్ లేదా ఫీచర్‌ని గమనించాము: షాడో సెషన్ ముగిసిన తర్వాత, వినియోగదారు కనెక్ట్ చేయబడినందుకు ట్రేలోని లాంగ్వేజ్ బార్ అదృశ్యమవుతుంది మరియు దాన్ని తిరిగి పొందడానికి, వినియోగదారు మళ్లీ అవసరం -ప్రవేశించండి. అది ముగిసినప్పుడు, మేము ఒంటరిగా లేము: సమయం, два, మూడు.

అంతే. మీకు మరియు మీ సర్వర్‌లకు మంచి ఆరోగ్యం కావాలని కోరుకుంటున్నాను. ఎప్పటిలాగే, నేను వ్యాఖ్యలలో మీ అభిప్రాయం కోసం ఎదురు చూస్తున్నాను మరియు దిగువన ఉన్న చిన్న సర్వేలో పాల్గొనమని మిమ్మల్ని అడుగుతున్నాను.

వర్గాలు

నమోదు చేసుకున్న వినియోగదారులు మాత్రమే సర్వేలో పాల్గొనగలరు. సైన్ ఇన్ చేయండిదయచేసి.

మీరు ఏమి ఉపయోగిస్తున్నారు?

  • 8,1%అమ్మీ అడ్మిన్ 5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%రాడ్మిన్ 15

  • 14,5%RDS షాడో9

  • 1,6%క్విక్ అసిస్ట్ / విండోస్ రిమోట్ అసిస్టెన్స్1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%ఇతర20

  • 3,2%లైట్‌మేనేజర్2

62 వినియోగదారులు ఓటు వేశారు. 22 వినియోగదారులు దూరంగా ఉన్నారు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి