Shërbimi për lidhjen në hije njerëzore të seancave të përdoruesve jo-administratorë me RDP në WinServer 2012R2

Problemi gjatë periudhës së karantinës së ndërmarrjes u bë si vijon: është me të vërtetë e nevojshme të minimizohet numri i vizitave në zyra nga specialistë që shërbejnë dhe këshillohen për programet e aplikacionit, dhe sinqerisht, përdoruesit shpesh abuzojnë me ndihmën e specialistëve pa dashur të thellohen në vetë çështjen, thonë “do të vijnë – do të ndihmojnë – do ta bëjnë, por unë do të pi duhan/pij kafe etj”. Konsultimi telefonik kur ndani një server është më efektiv nëse shikoni ekranin në distancë.

Shërbimi për lidhjen në hije njerëzore të seancave të përdoruesve jo-administratorë me RDP në WinServer 2012R2

Pas "shpikjes" së biçikletës sonë, dolën informacione të arsyeshme mbi temën e artikullit: RDS Shadow – lidhje hije me seancat e përdoruesve të RDP në Windows Server 2012 R2 ose Modaliteti i hijes së përdoruesit të paprivilegjuar në serverin e Windows ose Delegimi i menaxhimit të seancave të RDP-së. Të gjitha përfshijnë përdorimin e një konsole, madje edhe me elemente të një dialogu të thjeshtë.

Të gjitha informacionet e mëposhtme janë të destinuara për ata që toleron normalisht perversionet anormale për të marrë rezultatin e dëshiruar, duke shpikur metoda të panevojshme.
Për të mos "tërhequr macen nga bishti", do të filloj me të fundit: biçikleta funksionon për përdoruesin mesatar që përdor shërbimin AdmiLink, për të cilën falë autorit të saj.

I. Konsola dhe RDP hije.

Që nga përdorimi me të drejtat e administratorit të konsolës së Menaxherit të Serverit -> QuickSessionCollection -> duke klikuar në seancën e përdoruesit të interesuar, duke zgjedhur Shadow nga menyja e kontekstit për personelin që udhëzon se si të përdorin softuerin, nuk është një opsion, u konsiderua një metodë tjetër "druri", domethënë:

1. Gjeni ID-në RDP të seancës:

query user | findstr Administrator

ose:

qwinsta | findstr Administrator 

Për më tepër "| findstr Administrator"Ishte i përshtatshëm vetëm kur e dinit se çfarë saktësisht Administrator ju duhet, ose përdorni vetëm pjesën e parë për të parë të gjithë të regjistruar në server.

Shërbimi për lidhjen në hije njerëzore të seancave të përdoruesve jo-administratorë me RDP në WinServer 2012R2

2. Lidhu me këtë sesion, me kusht që në domen politikat e grupit Opsioni "Konfiguro rregullat e telekomandës për seancat e përdoruesve të Shërbimeve të Desktopit në distancë" zgjidhet me të paktën opsionin "Monitor sesioni me lejen e përdoruesit" (më shumë):

mstsc /shadow:127

Ju lutemi vini re se lista do të përmbajë vetëm hyrjet e përdoruesve.

E përsëris që pa të drejtat e administratorit do të merrni sa vijon:

Shërbimi për lidhjen në hije njerëzore të seancave të përdoruesve jo-administratorë me RDP në WinServer 2012R2

Por për korrigjimin paraprak të programit që do të diskutohet, kam përdorur një llogari me të drejta administratori.

II. Programi

Pra, deklarata e problemit: krijimi i një ndërfaqeje të thjeshtë grafike për t'u lidhur me sensin hije të përdoruesit me lejen e tij, duke i dërguar një mesazh përdoruesit. Mjedisi i programimit i zgjedhur është Lazarus.

1. Ne marrim listën e plotë të domenit të përdoruesve "hyrja" - "emri i plotë" nga administratori, ose përsëri përmes tastierës:

wmic useraccount get Name,FullName 

askush nuk e ndalon edhe këtë:

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

Unë do të them menjëherë se ishte Lazarus ai që kishte një problem me përpunimin e këtij skedari, pasi kodimi i tij si parazgjedhje është UCS-2, kështu që thjesht më duhej ta konvertoja manualisht në UTF-8 të rregullt. Ka shumë skeda në strukturën e skedarit, ose më saktë shumë hapësira, të cilat u vendos të përpunohen në mënyrë programore; herët a vonë problemi i kodimit do të zgjidhet dhe skedari do të përditësohet në mënyrë programore.

Pra, ideja është që të kemi një dosje të aksesueshme për përdoruesit e programit, për shembull c:test, në të cilën do të ketë 2 skedarë: i pari me login dhe emri i plotë, i dyti me id_rdp dhe login e përdoruesve. Më pas, ne i përpunojmë këto të dhëna sa më mirë që mundemi :).

Ndërkohë, për t'u lidhur me listën e sesioneve, ne e transferojmë këtë përmbajtje (hyrja dhe emri i plotë) në një grup:

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;

Kërkoj falje për "shumë kodin", pikat e mëposhtme do të jenë më koncize.

2. Duke përdorur të njëjtën metodë nga paragrafi i mëparshëm, ne lexojmë rezultatin e përpunimit të listës në elementin StringGrid, ndërsa unë do të jap një pjesë "të rëndësishme" të kodit:

2.1 Ne marrim listën aktuale të sesioneve të RDP në një skedar:

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 Përpunoni skedarin (tregohen vetëm linja të rëndësishme të kodit):

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. Vetë lidhja direkte duke klikuar në linjën me përdoruesin dhe numrin e sesionit të tij:

  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. Janë bërë disa dekorime të tjera, si renditja duke klikuar në butonin e radios dhe mesazhe për përdoruesit ose të gjithë përdoruesit.

Shërbimi për lidhjen në hije njerëzore të seancave të përdoruesve jo-administratorë me RDP në WinServer 2012R2

→ Mund të shihet kodi i plotë i burimit këtu

III. Duke përdorur AdminLink - ajo që pashë:

AdminLink gjeneron një shkurtore që i referohet vendndodhjes së programit admilaunch.exe, dhe një kopje personale të programit të nisjes AdmiRun.Exe e cila ndodhet në dosjen e përdoruesit, për shembull Vasya, lloji C: Përdoruesit përdorin WINDOWS. Në përgjithësi, jo gjithçka është aq e keqe: mund të luani me të drejtat e hyrjes në skedarin e shkurtoreve dhe të tjerëve për të pastruar ndërgjegjen tuaj të administratorit.

Burimi: www.habr.com

Shto një koment