Utility fir mënschlech Schattenverbindung vun Net-Administrateur zu RDP Benotzersessiounen am WinServer 2012R2

De Problem während der Quarantänperiod vun der Entreprise gouf de folgenden: et ass wierklech néideg d'Zuel vun de Visiten an de Büroe vu Spezialisten ze minimiséieren, déi iwwer Applikatiounssoftware servéieren an konsultéieren, an éierlech gesoot, Benotzer mëssbrauchen dacks d'Hëllef vu Spezialisten ouni ze verdéiwen. d'Thema selwer, si soen "si kommen - si wäerten hëllefen - si maachen et, awer ech fëmmen / drénken Kaffi, etc." Telefonkonsultatioun wann Dir e Server deelt ass méi effektiv wann Dir de Fernbildschierm kuckt.

Utility fir mënschlech Schattenverbindung vun Net-Administrateur zu RDP Benotzersessiounen am WinServer 2012R2

No der "Erfindung" vun eisem Vëlo ass verstänneg Informatiounen zum Thema vum Artikel opgetaucht: RDS Shadow – Schiedverbindung zu RDP-Sessiounen vu Benotzer an Windows Server 2012 R2 oder Schiedmodus vun engem net privilegéierte Benotzer an windows server oder Delegéiert Gestioun vun RDP Sessiounen. All vun hinnen beinhalt d'Benotzung vun enger Konsole, och mat Elementer vun engem einfachen Dialog.

All Informatioun hei drënner ass fir déi geduecht, déi toleréiert anormal Perversiounen normalerweis fir dat gewënschte Resultat ze kréien, onnéideg Methoden erfannen.
Fir net "d'Kaz um Schwanz ze zéien", fänken ech mat der leschter un: de Vëlo funktionnéiert fir den duerchschnëttleche Benotzer mat dem Utility AdmiLink, fir déi Merci un hiren Auteur.

I. Konsol a Schied RDP.

Zanter benotzen mat Administrator Rechter vun der Server Manager Konsol -> QuickSessionCollection -> andeems Dir op d'Sessioun vum interesséierte Benotzer klickt, Shadow aus dem Kontextmenü auswielen fir Personal ze instruéieren wéi d'Software ze benotzen, ass keng Optioun, eng aner "Holz" Method gouf berücksichtegt, nämlech:

1. Fannt d'RDP ID vun der Sessioun eraus:

query user | findstr Administrator

oder:

qwinsta | findstr Administrator 

Ausserdeem "| findstr Administrator"Et war nëmme bequem wann Dir wousst wat genau Administrator Dir braucht, oder benotzt nëmmen den éischten Deel fir e gesinn jiddereen op de Server ageloggt.

Utility fir mënschlech Schattenverbindung vun Net-Administrateur zu RDP Benotzersessiounen am WinServer 2012R2

2. Connect zu dëser Sëtzung, virausgesat datt am Domain Grupp Politiken D'Optioun "Fernsteuerungsregele fir Benotzersessiounen vun Remote Desktop Services opsetzen" ass ausgewielt mat op d'mannst d'Optioun "Monitor Sessioun mat Benotzererlaabnes" ausgewielt (méi gewuer ze ginn):

mstsc /shadow:127

Maacht weg datt d'Lëscht nëmme Benotzer Login enthält.

Ech widderhuelen datt ouni Admin Rechter Dir déi folgend kritt:

Utility fir mënschlech Schattenverbindung vun Net-Administrateur zu RDP Benotzersessiounen am WinServer 2012R2

Awer fir virleefeg Debugging vum Programm deen diskutéiert gëtt, hunn ech e Kont mat Administratorrechter benotzt.

II. Programm

Also d'Problem Ausso: eng einfach graphesch Interface erstellen fir dem Benotzer säi Schiedsënn mat senger Erlaabnes ze verbannen, e Message un de Benotzer ze schécken. D'programméiere Ëmfeld gewielt ass Lazarus.

1. Mir kréien déi komplett Domain Lëscht vun de Benotzer "Login" - "voll Numm" vum Administrator, oder nach eng Kéier duerch d'Konsol:

wmic useraccount get Name,FullName 

keen verbitt och dat:

wmic useraccount get Name,FullName > c:testusername.txt

Ech wäert direkt soen datt et de Lazarus war deen e Problem mat der Veraarbechtung vun dëser Datei hat, well seng Kodéierung als Standard UCS-2 ass, also muss ech se just manuell op normale UTF-8 konvertéieren. Et gi vill Tabs an der Dateistruktur, oder éischter vill Plazen, déi decidéiert gouf programmatesch ze veraarbechten; fréier oder spéider gëtt de Kodéierungsproblem geléist, an d'Datei gëtt programmatesch aktualiséiert.

Also, d'Iddi ass en Dossier zougänglech fir Benotzer vum Programm ze hunn, zum Beispill c:test, an deem et 2 Dateien gëtt: déi éischt mat Login a Vollnumm, déi zweet mat id_rdp a Login vun de Benotzer. Als nächst veraarbechte mir dës Donnéeën sou gutt wéi méiglech :).

An der Tëschenzäit, fir mat der Lëscht vun de Sessiounen ze associéieren, transferéiere mir dësen (Login a Vollnumm) Inhalter op eng Array:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d глобальный путь к размещению файлов 
f1:=f_d+'user_name.txt';     //задача считать в массив содержимое файла
fL := TStringList.Create; // строку подвергнем метамарфозам с разделителями
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Открыть файл для чтения
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Считываем строки, пока не закончится файл
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //заменяем первый попавш.2пробела разделителем |
// удаляем все двойные пробелы
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //если разделитель существует заносим его в массив
fL.DelimitedText :=line1; // разбиваем на столбцы
if (fL[0]<>'') then //если учетка имеет имя
begin //вносим ее в массив
 inc(i); // избавляемся от возможных одиночных пробелов в логине
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Готово. Закрываем файл.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Ошибка обработки файла. Детали: '+E.Message);
 end;end;

Ech entschëllege mech fir de "vill Code", déi folgend Punkte wäerte méi präzis sinn.

2. Mat der selwechter Method aus dem virege Paragraphe liesen mir d'Resultat vun der Veraarbechtung vun der Lëscht an de StringGrid Element, während ech e "bedeitend" Code ginn:

2.1 Mir kréien déi aktuell Lëscht vun RDP Sessiounen an engem Fichier:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // можно и подольше ждать пока файл для чтения создается

2.2 Veraarbecht d'Datei (nëmme bedeitend Codelinne ginn uginn):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //кидаем в цикле в StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //убираем из логина пробелы
if (SearchArr(login1)>=0) then //ищем в массиве из п1. логин и записываем в таблицу ФИО
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // либо записываем плюсик:)
.... //в зависимости от выбора пользователя сортируем и форматируем по данным
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Direkt Verbindung selwer andeems Dir op d'Linn mam Benotzer a senger Sessiounsnummer klickt:

  id:=(StringGrid1.Row);// узнаем номер строки  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //получаем идентификатор rdp
  cmdline:='/c mstsc /shadow:'+ ids; //и подключаемся....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. E puer méi Dekoratioune goufe gemaach, wéi z.B. Sortéieren andeems Dir op de Radiobutton klickt, a Messagen un de Benotzer oder all Benotzer.

Utility fir mënschlech Schattenverbindung vun Net-Administrateur zu RDP Benotzersessiounen am WinServer 2012R2

→ Voll Quellcode ka gesi ginn hei

III. Benotzt AdminLink - wat ech gesinn hunn:

AdminLink generéiert eng Ofkiirzung déi de Standuert vum Utility referéiert admilaunch.exe, an eng perséinlech Kopie vum Start Utility AdmiRun.Exe déi zum Beispill am Dossier vum Benotzer läit Vasya, Typ C: UsersvasyaWINDOWS. Am Allgemengen ass net alles sou schlecht: Dir kënnt mat Zougangsrechter fir d'Ofkiirzungsdatei an anerer spillen fir Äert eegent Admin Gewëssen ze läschen.

Source: will.com

Kaaft zouverlässeg Hosting fir Site mat DDoS Schutz, VPS VDS Server 🔥 Kaaft zouverléissegt Websäithosting mat DDoS-Schutz, VPS VDS Server | ProHoster