Utiliit mitteadministraatorite ja RDP-kasutajate seansside inimseansi ühendamiseks rakenduses WinServer 2012R2

Ettevõtte karantiinioperatsiooni ajal tekkis probleem järgmises: rakendustarkvara hooldavate ja konsulteerivate spetsialistide külastuste arvu kontoritesse on vaja minimeerida. Ausalt öeldes kasutavad kasutajad spetsialistide abi sageli üle, soovimata asjasse süveneda, öeldes: "Nad tulevad, aitavad, teevad seda, kuni ma suitsetan/kohvi joon jne." Telefonikonsultatsioonid jagatud serveriühendusega on kaugekraani vaatamisel tõhusamad.

Utiliit mitteadministraatorite ja RDP-kasutajate seansside inimseansi ühendamiseks rakenduses WinServer 2012R2

Pärast seda, kui olime oma jalgratta juba "leiutanud", sattusin artikli teemal asjakohase teabe otsa: RDS Shadow – varjuühendus kasutajate RDP-seanssidega Windows Server 2012 R2 või Ebasobiva kasutaja varjurežiim windows server või MAK seansside haldamise delegeerimineKõik need hõlmavad konsooli kasutamist, isegi lihtsa dialoogi elementidega.

Kogu allolev teave on mõeldud neile, kes talub normaalselt ebanormaalseid perverssusi soovitud tulemuse saavutamiseks leiutades ebavajalikke meetodeid.
Et vältida ümberringi keerutamist, alustan viimasest osast: jalgratas töötab tavakasutaja jaoks kasuliku abil AdmiLink, mille eest tänu autorile.

I. Konsool ja vari RDP.

Alates kasutamisest koos Server Manageri konsooli administraatoriõigused -> QuickSessionCollection -> klõpsates huvipakkuva kasutaja seansil ja valides kontekstimenüüst Shadow töötajatele, kes juhendavad tarkvara kasutamist, pole valikuvõimalus, kaaluti teist "puidust" meetodit, nimelt:

1. Uurige välja RDP seansi ID:

query user | findstr Administrator

või:

qwinsta | findstr Administrator 

Pealegi, "| findstr administraator"See oli mugav ainult siis, kui teadsid täpselt, mida administraator Serverisse sisseloginud inimeste kuvamiseks peate kasutama ainult esimest osa.

Utiliit mitteadministraatorite ja RDP-kasutajate seansside inimseansi ühendamiseks rakenduses WinServer 2012R2

2. Looge ühendus selle seansiga, eeldusel, et see asub domeenis grupipoliitikad Suvandi „Määrab kaugtöölaua teenuste kasutajaseansside kaugjuhtimisreeglid” väärtuseks on seatud vähemalt „Jälgi seanssi kasutajaloaga” (rohkem):

mstsc /shadow:127

Palun arvestage, et loend sisaldab ainult kasutajate sisselogimisi.

Lubage mul veel kord öelda, et ilma administraatoriõigusteta saate järgmise:

Utiliit mitteadministraatorite ja RDP-kasutajate seansside inimseansi ühendamiseks rakenduses WinServer 2012R2

Kuid kõnealuse programmi esialgseks silumiseks kasutasin administraatori õigustega kontot.

II. Programm

Seega oli ülesandeks luua lihtne graafiline liides, mis ühenduks kasutaja varjumeelega tema loal ja saadaks kasutajale sõnumi. Programmeerimiskeskkonnaks valiti Lazarus.

1. Hankige administraatorilt või uuesti konsooli kaudu täielik domeenikasutajate loend (sisselogimine - täisnimi):

wmic useraccount get Name,FullName 

Keegi ei keela seda isegi:

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

Ütlen kohe ära, et Lazarusel oli selle faili töötlemisel probleem, kuna selle vaikimisi kodeering on UCS-2, seega pidin selle käsitsi standardseks UTF-8-ks teisendama. Failistruktuur sisaldab palju tabulaatoreid või õigemini palju tühikuid, millega otsustasime programmiliselt tegeleda. Varem või hiljem lahendatakse kodeerimisprobleem ja faili uuendatakse programmiliselt.

Seega on idee luua programmi kasutajatele ligipääsetav kaust, näiteks c:\test, mis sisaldab kahte faili: esimene sisselogimise ja täisnimega ning teine ​​id_rdp ja kasutaja sisselogimisega. Seejärel töötleme neid andmeid parimal võimalikul viisil.

Vahepeal, seansside loendiga seostamiseks, edastame selle sisu (sisselogimise ja täisnime) massiivi:

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;

Vabandust "palju koodi" pärast, järgmised punktid on sisutihedamad.

2. Sarnaselt eelmises punktis kirjeldatud meetodile loeme loenditöötluse tulemuse StringGrid elementi. Siin on „oluline“ koodilõik:

2.1 Saame failis praeguse RDP-seansside loendi:

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 Töötle faili (näidatud on ainult olulised koodiread):

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. Ühendus ise luuakse kasutaja ja tema seansi numbriga reale klõpsates:

  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. Tehti veel paar täiustust, näiteks sortimine raadionupule klõpsates ning sõnumid kasutajale või kõigile kasutajatele.

Utiliit mitteadministraatorite ja RDP-kasutajate seansside inimseansi ühendamiseks rakenduses WinServer 2012R2

→ Täielik lähtekood on nähtav siin

III. AdminLinki kasutamine – mida ma nägin:

AdminLink loob otsetee, mis lingib utiliidi asukohta. admilaunch.exeja käivitusprogrammi isiklik koopia AdmiRun.Exe mis asub näiteks kasutajakaustas Vasjatüübi järgi C:\Kasutajad\WINDOWSLühidalt, kõik pole nii hull: saate oma administraatori südametunnistuse puhastamiseks mängida otsetee faili ligipääsuõiguste ja muude asjadega.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusväärne hostimine, VPS VDS-serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster