آر ڊي پي سيشن جي انتظام جو انتظام

آر ڊي پي سيشن جي انتظام جو انتظام
تنظيم ۾ جتي آئون ڪم ڪريان ٿو، ريموٽ ڪم اصولن ۾ منع ٿيل آهي. هئي. گذريل هفتي تائين. هاڻي اسان کي فوري طور تي هڪ حل لاڳو ڪرڻو پوندو. ڪاروبار کان - عملن کي نئين ڪم جي شڪل ۾ ترتيب ڏيڻ، اسان کان - PKI PIN ڪوڊ ۽ ٽوڪن سان، VPN، تفصيلي لاگنگ ۽ گهڻو ڪجهه.
ٻين شين جي وچ ۾، مان سيٽ ڪري رهيو هوس ريموٽ ڊيسڪ ٽاپ انفراسٽرڪچر عرف ٽرمينل سروسز. اسان وٽ مختلف ڊيٽا سينٽرن ۾ ڪيترائي آر ڊي ايس ڊيپلائيمينٽ آهن. انهن مان هڪ مقصد اهو هو ته لاڳاپيل IT شعبن جي ساٿين کي فعال ڪرڻ لاءِ استعمال ڪندڙ سيشنن سان ڳنڍڻ لاءِ. جيئن توهان کي خبر آهي، ان لاءِ هڪ معياري RDS شيڊو ميکانيزم آهي، ۽ ان کي نمائندگي ڏيڻ جو آسان طريقو اهو آهي ته آر ڊي ايس سرورز تي مقامي منتظم جا حق ڏنا وڃن.
مان پنهنجن ساٿين جو احترام ۽ قدر ڪريان ٿو، پر مان ڏاڍو لالچي آهيان جڏهن اهو منتظم جي حقن کي هٿ ڪرڻ جي اچي ٿو. 🙂 انهن لاءِ جيڪي مون سان متفق آهن، مهرباني ڪري ڪٽ جي پيروي ڪريو.

خير، ڪم صاف آهي، هاڻي اچو ته ڪاروبار ڏانهن وڃو.

قدم 1

اچو ته Active Directory ۾ هڪ سيڪيورٽي گروپ ٺاهيو آر ڊي پي_ آپريٽرز ۽ ان ۾ شامل ڪريو انهن صارفين جا اڪائونٽ جن کي اسان حق ڏيڻ چاهيون ٿا:

$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

اچو ته ”منيجر“ لاءِ هيٺين پي ايس اسڪرپٽ تيار ڪريون:

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

پي ايس اسڪرپٽ کي هلائڻ لاءِ آسان بڻائڻ لاءِ، اسان ان لاءِ هڪ شيل ٺاهينداسين سي ايم ڊي فائل جي صورت ۾ ساڳئي نالي سان پي ايس اسڪرپٽ:

RDSManagement.cmd

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

اسان ٻنهي فائلن کي فولڊر ۾ رکون ٿا جيڪي "منيجرز" تائين پهچندا ۽ انهن کي ٻيهر لاگ ان ڪرڻ لاءِ چيو. ھاڻي، cmd فائل هلائڻ سان، اھي RDS شيڊو موڊ ۾ ٻين استعمال ڪندڙن جي سيشن سان ڳنڍڻ جي قابل ٿي ويندا ۽ انھن کي لاگ آئوٽ ڪرڻ تي مجبور ڪندا (اھو ڪارائتو ٿي سگھي ٿو جڏھن صارف آزاديءَ سان ”ھينگ“ سيشن کي ختم نٿو ڪري سگھي).

اهو ڪجهه هن طرح نظر اچي ٿو:

"منيجر" لاءآر ڊي پي سيشن جي انتظام جو انتظام

استعمال ڪندڙ لاءآر ڊي پي سيشن جي انتظام جو انتظام

ڪجھ آخري تبصرا

نزاڪت 1. جيڪڏهن صارف جو سيشن جنهن تي اسان ڪنٽرول حاصل ڪرڻ جي ڪوشش ڪري رهيا آهيون، سرور تي Set-RDSPermissions.ps1 اسڪرپٽ تي عمل ٿيڻ کان اڳ شروع ڪيو ويو، ته پوءِ ”منيجر“ کي رسائي جي غلطي ملندي. هتي حل واضح آهي: انتظار ڪريو جيستائين منظم صارف لاگ ان ٿئي.

نزاڪت 2. آر ڊي پي شيڊو سان ڪم ڪرڻ جي ڪيترن ئي ڏينهن کان پوءِ، اسان هڪ دلچسپ بگ يا خصوصيت محسوس ڪئي: شيڊ سيشن جي پڄاڻيءَ کان پوءِ، ٽري ۾ ٻولي واري بار غائب ٿي وڃي ٿي صارف جي ڳنڍجڻ لاءِ، ۽ ان کي واپس حاصل ڪرڻ لاءِ، صارف کي ٻيهر ڪرڻ جي ضرورت آهي. - لاگ ان. جيئن اهو نڪتو، اسان اڪيلو نه آهيون: ڀيرا, два, ٽي.

اهو ئي سڀ ڪجهه آهي. مان توهان کي ۽ توهان جي سرور جي سٺي صحت جي خواهشمند آهيان. هميشه وانگر، آئون تبصرن ۾ توهان جي راءِ جو منتظر آهيان ۽ توهان کي هيٺ ڏنل مختصر سروي وٺڻ لاءِ چوان ٿو.

ذريعو

صرف رجسٽرڊ استعمال ڪندڙ سروي ۾ حصو وٺي سگهن ٿا. سائن ان ڪريو، توهان جي مهرباني.

توهان ڇا استعمال ڪندا آهيو؟

  • 8,1٪AMMYY منتظم5

  • 17,7٪AnyDesk11

  • 9,7٪DameWare6

  • 24,2٪Radmin15

  • 14,5٪آر ڊي ايس شيڊ9

  • 1,6٪Quick Assist / Windows Remote Assistance1

  • 38,7٪TeamViewer24

  • 32,3٪VNC20

  • 32,3٪ٻيا 20

  • 3,2٪لائيٽ مئنيجر 2

62 صارفين ووٽ ڪيو. 22 استعمال ڪندڙن کي روڪيو ويو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو