Kukasimu usimamizi wa vikao vya RDP

Kukasimu usimamizi wa vikao vya RDP
Katika shirika ambapo ninafanya kazi, kazi ya mbali ni marufuku kwa kanuni. Ilikuwa. Hadi wiki iliyopita. Sasa tulilazimika kutekeleza suluhisho haraka. Kutoka kwa biashara - kurekebisha michakato hadi muundo mpya wa kazi, kutoka kwetu - PKI yenye misimbo ya PIN na ishara, VPN, ukataji wa kina na mengi zaidi.
Miongoni mwa mambo mengine, nilikuwa nikianzisha Miundombinu ya Eneo-kazi la Mbali aka Huduma za Kituo. Tuna matumizi kadhaa ya RDS katika vituo tofauti vya data. Mojawapo ya malengo yalikuwa kuwezesha wafanyikazi wenzako kutoka idara zinazohusiana za IT kuunganishwa na vikao vya watumiaji kwa maingiliano. Kama unavyojua, kuna utaratibu wa kawaida wa Kivuli wa RDS kwa hili, na njia rahisi ya kuikabidhi ni kutoa haki za msimamizi wa ndani kwenye seva za RDS.
Ninawaheshimu na kuwathamini wenzangu, lakini mimi ni mchoyo sana linapokuja suala la kupeana haki za admin. 🙂 Kwa wale wanaokubaliana nami, tafadhali fuata kata.

Kweli, kazi ni wazi, sasa hebu tushuke kwenye biashara.

Hatua ya 1

Hebu tuunde kikundi cha usalama katika Saraka Inayotumika RDP_Operators na kujumuisha ndani yake akaunti za watumiaji hao ambao tunataka kuwakabidhi haki:

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

Iwapo una tovuti nyingi za AD, utahitaji kusubiri hadi irudiwe kwa vidhibiti vyote vya kikoa kabla ya kuendelea na hatua inayofuata. Hii kawaida huchukua si zaidi ya dakika 15.

Hatua ya 2

Wacha tupe haki za kikundi kudhibiti vipindi vya wastaafu kwenye kila seva ya 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")
        }
    }
}

Hatua ya 3

Ongeza kikundi kwenye kikundi cha ndani Watumiaji wa Kompyuta ya Mbali kwenye kila seva ya RDSH. Ikiwa seva zako zimeunganishwa katika mikusanyiko ya vipindi, basi tunafanya hivi katika kiwango cha mkusanyiko:

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

Kwa seva moja tunatumia sera ya kikundi, ikingoja itumike kwenye seva. Wale ambao ni wavivu sana kusubiri wanaweza kuharakisha mchakato kwa kutumia gpupdate nzuri ya zamani, ikiwezekana katikati.

Hatua ya 4

Wacha tuandae hati ifuatayo ya PS kwa "wasimamizi":

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

Ili kufanya hati ya PS iwe rahisi kuendesha, tutaunda ganda kwa namna ya faili ya cmd iliyo na jina sawa na hati ya PS:

RDSMmanagement.cmd

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

Tunaweka faili zote mbili kwenye folda ambayo itapatikana kwa "wasimamizi" na kuwauliza waingie tena. Sasa, kwa kuendesha faili ya cmd, wataweza kuunganisha kwenye vikao vya watumiaji wengine katika hali ya Kivuli ya RDS na kuwalazimisha kutoka (hii inaweza kuwa muhimu wakati mtumiaji hawezi kusitisha kikao cha "kunyongwa") kwa kujitegemea).

Inaonekana kitu kama hiki:

Kwa "meneja"Kukasimu usimamizi wa vikao vya RDP

Kwa mtumiajiKukasimu usimamizi wa vikao vya RDP

Maoni machache ya mwisho

Nuance 1. Ikiwa kipindi cha mtumiaji ambacho tunajaribu kupata udhibiti kilizinduliwa kabla ya hati ya Set-RDSPermissions.ps1 kutekelezwa kwenye seva, basi "msimamizi" atapokea hitilafu ya ufikiaji. Suluhisho hapa ni dhahiri: subiri hadi mtumiaji anayesimamiwa aingie.

Nuance 2. Baada ya siku kadhaa za kufanya kazi na Kivuli cha RDP, tuliona mdudu au kipengele cha kuvutia: baada ya mwisho wa kipindi cha kivuli, upau wa lugha kwenye tray hupotea kwa mtumiaji kuunganishwa, na ili kuirejesha, mtumiaji anahitaji kurejesha tena. -Ingia. Kama inavyotokea, sisi sio peke yetu: wakati, два, tatu.

Ni hayo tu. Nakutakia afya njema wewe na seva zako. Kama kawaida, natarajia maoni yako katika maoni na nakuomba ufanye utafiti mfupi hapa chini.

Vyanzo

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Unatumia nini?

  • 8,1%AMMYY Admin5

  • 17,7%Dawati Yoyote11

  • 9,7%DameWare6

  • 24,2%Radmin15

  • 14,5%Kivuli cha RDS9

  • 1,6%Usaidizi wa Haraka / Usaidizi wa Mbali wa Windows1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%nyingine20

  • 3,2%LiteManager2

Watumiaji 62 walipiga kura. Watumiaji 22 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni