Problem tijekom razdoblja karantene poduzeća postao je sljedeći: doista je potrebno minimizirati broj posjeta uredima od strane stručnjaka za servisiranje i savjetovanje o aplikativnom softveru, a iskreno govoreći, korisnici često zlorabe pomoć stručnjaka ne želeći se udubiti u samom pitanju, oni kažu "oni će doći - oni će pomoći - oni će to učiniti, ali ja ću pušiti/piti kavu, itd." Telefonsko savjetovanje pri dijeljenju poslužitelja učinkovitije je ako gledate udaljeni zaslon.
Nakon "izuma" našeg bicikla pojavile su se zdrave informacije o temi članka:
Sve informacije u nastavku namijenjene su onima koji normalno podnosi abnormalne perverzije da biste dobili željeni rezultat, izmišljajući nepotrebne metode.
Kako ne bih "vukao mačku za rep", počet ću s posljednjim: bicikl radi za prosječnog korisnika koji koristi uslužni program
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 izbornika za osoblje koje podučava kako koristiti softver, nije opcija, razmatrana je druga "drvena" metoda, naime:
1. Saznajte RDP ID sesije:
query user | findstr Administrator
ili:
qwinsta | findstr Administrator
Štoviše "| findstr Administrator“Bilo je zgodno samo kad si znao što točno administrator koji vam je potreban ili upotrijebite samo prvi dio kako biste vidjeli sve prijavljene na poslužitelj.
2. Povežite se s ovom sesijom, pod uvjetom da u domeni grupne politike Odabrana je opcija "Postavi pravila daljinskog upravljanja za korisničke sesije usluga udaljene radne površine" s odabranom barem opcijom "Nadgledaj sesiju s korisničkim dopuštenjem" (
mstsc /shadow:127
Imajte na umu da će popis sadržavati samo prijave korisnika.
Ponavljam da ćete bez administratorskih prava dobiti sljedeće:
Ali za preliminarno otklanjanje pogrešaka programa o kojem će se raspravljati, koristio sam račun s administratorskim pravima.
II. Program
Dakle, izjava problema: stvaranje nekog jednostavnog grafičkog sučelja za povezivanje s korisnikovim osjetilom sjene uz njegovo dopuštenje, slanje poruke korisniku. Odabrano programsko okruženje je Lazarus.
1. Dobivamo puni popis domena korisnika “login” - “puno ime” od administratora ili opet preko konzole:
wmic useraccount get Name,FullName
nitko ne brani ni ovo:
wmic useraccount get Name,FullName > c:testusername.txt
Odmah ću reći da je Lazarus bio taj koji je imao problema s obradom ove datoteke, jer je prema zadanim postavkama njezino kodiranje UCS-2, pa sam je jednostavno morao ručno pretvoriti u obični UTF-8. Postoji mnogo kartica u strukturi datoteke, točnije puno prostora, koje je odlučeno programski obraditi; prije ili kasnije problem kodiranja će biti riješen, a datoteka će se ažurirati programski.
Dakle, ideja je imati mapu dostupnu korisnicima programa, npr. c:test, u kojoj će biti 2 datoteke: prva s prijavom i punim imenom, druga s id_rdp i prijavom korisnika. Dalje, te podatke obrađujemo najbolje što možemo :).
U međuvremenu, za povezivanje s popisom sesija, prenosimo ovaj sadržaj (prijava i puno ime) u polje:
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;
Ispričavam se zbog "puno koda", sljedeće će točke biti sažetije.
2. Koristeći istu metodu iz prethodnog paragrafa, očitavamo rezultat obrade liste u StringGrid element, dok ću dati “značajan” dio koda:
2.1 Primamo trenutni popis 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 (navedene su samo značajne linije 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 izravna veza klikom na liniju s 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. Napravljeno je još par ukrasa kao što je sortiranje klikom na radiobutton te poruke korisniku ili svim korisnicima.
→ Može se vidjeti cijeli izvorni kod
III. Korištenje AdminLinka - što sam vidio:
AdminLink generira prečac koji upućuje na lokaciju uslužnog programa admilaunch.exei osobnu kopiju uslužnog programa za pokretanje AdmiRun.Exe koji se nalazi u mapi korisnika npr vasya, tip C:UsersvasyaWINDOWS. Općenito, nije sve tako loše: možete se igrati s pravima pristupa datoteci prečaca i drugima kako biste očistili vlastitu administratorsku savjest.
Izvor: www.habr.com