جنهن تنظيم ۾ آئون ڪم ڪريان ٿو، اها اصولي طور تي ريموٽ ڪم کي منع ڪري ٿي. گذريل هفتي تائين. هاڻي اسان کي فوري طور تي هڪ حل لاڳو ڪرڻو پيو آهي. ڪاروبار کي عملن کي نئين ڪم ڪندڙ فارميٽ مطابق ترتيب ڏيڻو پيو آهي، ۽ اسان کي پن ڪوڊ ۽ ٽوڪن، هڪ VPN، تفصيلي لاگنگ، ۽ گهڻو ڪجهه سان گڏ هڪ PKI لاڳو ڪرڻو پيو آهي.
ٻين شين سان گڏ، مان ريموٽ ڊيسڪ ٽاپ انفراسٽرڪچر (يعني ٽرمينل سروسز) قائم ڪرڻ ۾ شامل هوس. اسان وٽ مختلف ڊيٽا سينٽرن ۾ ڪيترائي آر ڊي ايس ڊيپلائيمينٽ آهن. هڪ ڪم اهو هو ته ڀرپاسي جي آئي ٽي ڊپارٽمينٽس جي ساٿين کي صارف سيشن سان انٽرايڪٽو طور تي ڳنڍڻ جي قابل بڻايو وڃي. جيئن توهان ڄاڻو ٿا، ان لاءِ هڪ بلٽ ان آر ڊي ايس شيڊو ميڪانيزم آهي، ۽ ان کي تفويض ڪرڻ جو آسان طريقو آر ڊي ايس سرورز تي مقامي ايڊمنسٽريٽر حق ڏيڻ آهي.
مان پنهنجن ساٿين جو احترام ۽ قدر ڪيان ٿو، پر جڏهن ايڊمن حقن جي ورهاست جي ڳالهه اچي ٿي ته مان تمام گهڻو لالچي آهيان. 🙂 جيڪي مون سان متفق آهن، مهرباني ڪري پڙهو.
خير، ڪم واضح آهي، هاڻي اچو ته ڪاروبار تي لهون.
قدم 1
اچو ته ايڪٽو ڊاريڪٽري ۾ هڪ سيڪيورٽي گروپ ٺاهيون. آر ڊي پي_آپريٽرز ۽ ان ۾ انهن استعمال ڪندڙن جا اڪائونٽ شامل ڪريو جن کي اسان حق سونپڻ چاهيون ٿا:
$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 سرور تي ٽرمينل سيشن منظم ڪرڻ جي اجازت ڏيون:
سيٽ-آر ڊي ايس پرميشن.پي ايس 1
$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
اچو ته "مينيجرز" لاءِ هيٺ ڏنل پي ايس اسڪرپٽ تيار ڪريون:
آر ڊي ايس مئنيجمينٽ. پي ايس 1
$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 " сессий не найдено"
}
}
پي ايس اسڪرپٽ کي هلائڻ ۾ آسان بڻائڻ لاءِ، اچو ته ان لاءِ هڪ شيل ٺاهيون جيڪو پي ايس اسڪرپٽ جي نالي سان هڪ سي ايم ڊي فائل جي صورت ۾ هجي:
آر ڊي ايس مئنيجمينٽ. سي ايم ڊي
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
ٻنهي فائلن کي "مينيجرز" جي رسائي واري فولڊر ۾ رکو ۽ انهن کي ٻيهر لاگ ان ٿيڻ لاءِ چئو. هاڻي، cmd فائل هلائڻ سان، اهي RDS شيڊو موڊ ۾ ٻين استعمال ڪندڙن جي سيشن سان ڳنڍڻ جي قابل هوندا ۽ انهن کي زبردستي لاگ آئوٽ ڪري سگهندا (اهو ڪارآمد آهي جڏهن ڪو استعمال ڪندڙ منجمد سيشن ختم نٿو ڪري سگهي).
اهو ڪجهه هن طرح نظر اچي ٿو:
"مينيجر" لاءِ
استعمال ڪندڙ لاءِ
ڪجھ آخري تبصرا
نونس 1جيڪڏهن صارف جو سيشن جنهن تي اسان ڪنٽرول حاصل ڪرڻ جي ڪوشش ڪري رهيا آهيون اهو سرور تي Set-RDSPermissions.ps1 اسڪرپٽ هلائڻ کان اڳ شروع ٿيو هو، ته "منظم" صارف کي رسائي جي غلطي ملندي. حل واضح آهي: انتظار ڪريو جيستائين منظم صارف ٻيهر لاگ آئوٽ نه ٿئي.
نونس 2آر ڊي پي شيڊو سان ڪيترن ئي ڏينهن ڪم ڪرڻ کان پوءِ، اسان هڪ دلچسپ بگ يا فيچر ڏٺو: شيڊو سيشن ختم ڪرڻ کان پوءِ، سسٽم ٽري ۾ استعمال ڪندڙ جي ٻولي بار غائب ٿي ويندي آهي، ۽ ان کي بحال ڪرڻ لاءِ، استعمال ڪندڙ کي واپس لاگ ان ٿيڻو پوندو. جيئن ته اهو نڪتو، اسان اڪيلا نه آهيون: , , .
هاڻي لاءِ بس اهو ئي آهي. مان توهان ۽ توهان جي سرورز جي سٺي صحت جي خواهش ڪيان ٿو. هميشه وانگر، مان تبصرن ۾ توهان جي راءِ جو استقبال ڪريان ٿو ۽ توهان کي هيٺ ڏنل مختصر سروي ۾ حصو وٺڻ لاءِ چوان ٿو.
ذريعو
صرف رجسٽرڊ استعمال ڪندڙ سروي ۾ حصو وٺي سگهن ٿا. ، توهان جي مهرباني.
توهان ڇا استعمال ڪندا آهيو؟
-
8,1٪ايمي ايڊمن 5
-
17,7٪ايني ڊيسڪ 11
-
9,7٪ڊيم ويئر 6
-
24,2٪رڊمن 15
-
14,5٪آر ڊي ايس شيڊو 9
-
1,6٪Quick Assist / Windows Remote Assistance1
-
38,7٪ٽيم ويور 24
-
32,3٪وي اين سي 20
-
32,3٪ٻيا 20
-
3,2٪لائيٽ مئنيجر 2
62 صارفين ووٽ ڪيو. 22 استعمال ڪندڙن کي روڪيو ويو.
جو ذريعو: www.habr.com
