Problem tokom karantenskog perioda preduzeća postao je sledeći: zaista je potrebno svesti na minimum broj poseta kancelarijama od strane stručnjaka koji servisiraju i konsultuju aplikativni softver, a iskreno govoreći, korisnici često zloupotrebljavaju pomoć stručnjaka ne želeći da se upuštaju u u samom pitanju, kažu “doći će – pomoći će – uradiće to, ali ja ću pušiti/popiti kafu, itd.” Telefonske konsultacije prilikom dijeljenja servera su efikasnije ako gledate udaljeni ekran.

Nakon "izumljenja" našeg bicikla, pojavile su se zdrave informacije o temi članka: ili ili . Svi oni uključuju upotrebu konzole, čak i sa elementima jednostavnog dijaloga.
Sve informacije u nastavku namijenjene su onima koji normalno toleriše abnormalne perverzije za postizanje željenog rezultata, izmišljanjem nepotrebnih metoda.
Kako ne bih "vukao mačku za rep", počet ću s posljednjim: bicikl radi za prosječnog korisnika koristeći uslužni program , na čemu se zahvaljujemo njenom autoru.
I. Konzola i RDP u sjeni.
Od upotrebe sa administratorska prava konzole Server Manager -> QuickSessionCollection -> klikom na sesiju korisnika od interesa, odabirom Shadow iz kontekstnog menija za osoblje koje podučava kako koristiti softver, nije opcija, razmatrana je druga „drvena“ metoda, i to:
1. Saznajte RDP ID sesije:
query user | findstr Administratorili:
qwinsta | findstr Administrator Štaviše "| findstr Administrator„Bilo je zgodno samo kada se zna šta tačno Administrator trebate ili koristite samo prvi dio da vidite sve koji su prijavljeni na server.
![]()
2. Povežite se na ovu sesiju, pod uvjetom da je u domeni grupne politike Odabrana je opcija "Postavi pravila daljinske kontrole za korisničke sesije usluga udaljene radne površine" uz odabranu opciju "Nadgledanje sesije s korisničkom dozvolom" ():
mstsc /shadow:127Imajte na umu da će lista sadržavati samo korisničke prijave.
Ponavljam da ćete bez administratorskih prava dobiti sljedeće:

Ali za preliminarno otklanjanje grešaka u programu o kojem će biti reči, koristio sam nalog sa administratorskim pravima.
II. Program
Dakle, izjava o problemu: kreiranje nekog jednostavnog grafičkog interfejsa za povezivanje sa korisnikovim čulom senke uz njegovu dozvolu, slanje poruke korisniku. Izabrano programsko okruženje je Lazarus.
1. Kompletnu listu domena korisnika "login" - "puno ime" dobijamo od administratora, ili opet preko konzole:
wmic useraccount get Name,FullName niko ne zabranjuje ni ovo:
wmic useraccount get Name,FullName > c:testusername.txtOdmah ću reći da je Lazarus imao problem sa obradom ovog fajla, pošto je po defaultu njegovo kodiranje UCS-2, tako da sam samo morao ručno da ga konvertujem u običan UTF-8. Postoji mnogo kartica u strukturi datoteke, odnosno puno prostora, koje je odlučeno programski obraditi prije ili kasnije problem kodiranja će biti riješen, a datoteka će se programski ažurirati.
Dakle, ideja je da korisnicima programa bude dostupan folder, na primjer c:test, u kojem će biti 2 fajla: prvi sa login i punim imenom, drugi sa id_rdp i login korisnika. Zatim ove podatke obrađujemo najbolje što možemo :).
U međuvremenu, da bismo se povezali sa listom sesija, ovaj sadržaj (prijava i puno ime) prenosimo u niz:
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;Izvinjavam se zbog "puno koda", sljedeće točke će biti sažetije.
2. Koristeći istu metodu iz prethodnog pasusa, čitamo rezultat obrade liste u StringGrid element, dok ću dati „značajan“ dio koda:
2.1 Primamo trenutnu listu RDP sesija u datoteci:
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 Obradite datoteku (naznačeni su samo značajni redovi koda):
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. Sama direktna konekcija klikom na liniju sa korisnikom i njegovim brojem sesije:
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. Urađeno je još par ukrasa, kao što je sortiranje klikom na radio dugme i poruke korisniku ili svim korisnicima.

→ Može se vidjeti cijeli izvorni kod
III. Koristeći AdminLink - ono što sam vidio:
AdminLink generiše prečicu koja upućuje na lokaciju uslužnog programa admilaunch.exe, i ličnu kopiju uslužnog programa za pokretanje AdmiRun.Exe koji se nalazi u folderu korisnika, na primjer Vasya, po vrsti C:UsersvasyaWINDOWS. Općenito, nije sve tako loše: možete se poigrati s pravima pristupa fajlu prečice i drugim da biste očistili vlastitu savjest administratora.
izvor: www.habr.com
