Di rêxistina ku ez lê dixebitim, karê ji dûr ve di prensîbê de qedexe ye. Bû. Heta hefteya çûyî. Niha diviyabû em bi lezgînî çareseriyê pêk bînin. Ji karsaziyê - adaptasyona pêvajoyên berbi formatek xebatê ya nû, ji me - PKI bi kodên PIN û nîşanan, VPN, têketina berfireh û hêj bêtir.
Di nav tiştên din de, min Binesaziya Sermaseya Dûr aka Karûbarên Termînalê saz dikir. Di navendên daneyên cihêreng de me gelek sazûmanên RDS hene. Yek ji mebestan ew bû ku hevkarên ji beşên IT-ê yên têkildar bi înteraktîf bi danişînên bikarhêneran ve girêbidin. Wekî ku hûn dizanin, ji bo vê yekê mekanîzmayek standard RDS Shadow heye, û awayê herî hêsan ji bo veguheztina wê dayîna mafên rêveberê herêmî li ser serverên RDS ye.
Ez rêz û qîmetê didim hevkarên xwe, lê dema ku dor tê dayîn mafên rêveberiyê ez pir çavbirçî me. 🙂 Ji bo yên ku bi min razî ne, ji kerema xwe qut bişopînin.
Welê, peywir zelal e, naha em werin ser karsaziyê.
gav 1
Ka em di Active Directory de komek ewlehiyê biafirînin RDP_Operators û tê de hesabên wan bikarhênerên ku em dixwazin mafan ji wan re veguhezînin têxin nav xwe:
$Users = @(
"UserLogin1",
"UserLogin2",
"UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users
Ger we gelek malperên AD-ê hene, hûn ê hewce bikin ku li bendê bimînin heya ku ew ji hemî kontrolkerên domainê re were dubare kirin berî ku hûn biçin qonaxa paşîn. Ev bi gelemperî ji 15 hûrdeman bêtir digire.
gav 2
Ka em mafên komê bidin ku danişînên termînalê li ser her serverek RDSH birêve bibin:
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")
}
}
}
gav 3
Komê li koma herêmî zêde bikin Bikarhênerên Sermaseya Dûr li ser her yek ji pêşkêşkerên RDSH. Ger serverên we di berhevokên danişînê de têne hev kirin, wê hingê em vê yekê di asta berhevokê de dikin:
$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)
Ji bo pêşkêşkerên yekane em bikar tînin , li bendê ye ku ew li ser pêşkêşkeran were sepandin. Yên ku li bendê ne pir tembel in dikarin pêvajoyê bi karanîna gpupdate-a kevn a baş, bi tercîh bilezînin .
gav 4
Ka em ji bo "rêveber" skrîpta PS-ya jêrîn amade bikin:
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 " сессий не найдено"
}
}
Ji bo ku skrîpta PS-ê hêsan were xebitandin, em ê ji bo wê di forma pelek cmd de bi heman navî wekî skrîpta PS-ê şêlekek biafirînin:
RDSmanagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
Em herdu pelan di peldankek ku dê ji "rêveberan" re bigihîjin têxin hundur û ji wan dipirsin ku ji nû ve têkevinê. Naha, bi xebitandina pelê cmd, ew ê karibin bi danişînên bikarhênerên din ên di moda RDS Shadow de werin girêdan û wan neçar bikin ku derkevin (ev dikare bikêr be dema ku bikarhêner nekare rûniştinek "daleqandî" serbixwe biqedîne).
Ew tiştek mîna vê xuya dike:
Ji bo "rêveber"
Ji bo bikarhêner
Çend şîroveyên dawî
Xala 1. Ger danişîna bikarhêner a ku em hewl didin kontrolê bi dest bixin berî ku skrîpta Set-RDSPermissions.ps1 li ser pêşkêşkarê were darve kirin hate destpêkirin, wê hingê "rêveber" dê xeletiyek gihîştinê bistîne. Li vir çareserî diyar e: li bendê bimînin heya ku bikarhênerê rêvebir têkeve.
Xala 2. Piştî çend rojan xebitandina bi RDP Shadow re, me xeletiyek an taybetmendiyek balkêş dît: piştî bidawîbûna rûniştina siyê, barika zimanî ya di tepsiyê de ji bo bikarhênerê ku pê ve girêdayî ye winda dibe, û ji bo vegerandina wê, pêdivî ye ku bikarhêner ji nû ve vegerîne. -login. Wekî ku diqewime, em ne tenê ne: , , .
Navê pêger. Ez ji we û serverên we re sihetek baş dixwazim. Mîna her gav, ez li benda nerînên we di şîroveyan de me û ji we dipirsim ku hûn anketa kurt a jêrîn bigirin.
Çavkaniyên
Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. ji kerema xwe.
Hûn çi bikar tînin?
-
8,1%AMMYY Admin5
-
17,7%AnyDesk11
-
9,7%DameWare6
-
24,2%Radmin15
-
14,5%RDS Shadow9
-
1,6%Quick Assist / Windows Remote Assistance1
-
38,7%TeamViewer24
-
32,3%VNC20
-
32,3%din20
-
3,2%LiteManager2
62 bikarhêneran deng dan. 22 bikarhêner betal bûn.
Source: www.habr.com
