Probleemiks kujunes ettevõtte karantiiniperioodil järgmine: tõesti on vaja minimeerida rakendustarkvara teenindavate ja nõustavate spetsialistide kontorikülastuste arvu ning ausalt öeldes kasutavad kasutajad sageli spetsialistide abi ära, soovimata sellesse süveneda. teema ise, nad ütlevad: "nad tulevad - nad aitavad - nad teevad seda, aga ma suitsetan / joon kohvi jne." Telefonikonsultatsioon serveri jagamisel on tõhusam, kui vaatate kaugekraani.
Pärast meie jalgratta "leiutamist" ilmus artikli teema kohta mõistlik teave:
Kogu allolev teave on mõeldud neile, kes talub ebanormaalseid perversioone normaalselt soovitud tulemuse saavutamiseks, leiutades tarbetuid meetodeid.
Et mitte kassil "sabast tõmmata", alustan viimasest: ratas töötab utiliiti kasutades tavakasutaja jaoks.
I. Konsool ja vari RDP.
Alates kasutamisest koos serverihalduri konsooli administraatori õigused -> QuickSessionCollection -> klõpsates huvipakkuva kasutaja seansil, valides kontekstimenüüst Shadow personalile, kes juhendab tarkvara kasutamist, ei ole valik, kaaluti teist "puidust" meetodit, nimelt:
1. Uurige seansi RDP ID:
query user | findstr Administrator
või:
qwinsta | findstr Administrator
Enamgi veel "| findstr Administraator“See oli mugav ainult siis, kui teadsid, mida täpselt administraator mida vajate, või kasutage ainult esimest osa, et näha kõiki, kes on serverisse sisse logitud.
2. Looge ühendus selle seansiga, eeldusel, et see on domeenis rühmapoliitika Valik "Seadista kaugjuhtimisreeglid kaugtöölauateenuste kasutajaseansside jaoks" on valitud, kui on valitud vähemalt suvand "Jälgi seanssi kasutaja loaga" (
mstsc /shadow:127
Pange tähele, et loend sisaldab ainult kasutajate sisselogimisi.
Kordan, et ilma administraatoriõigusteta saate järgmise:
Kuid käsitletava programmi esialgseks silumiseks kasutasin administraatoriõigustega kontot.
II. Programm
Seega probleemi avaldus: mõne lihtsa graafilise liidese loomine kasutaja varjutajuga ühenduse loomiseks tema loal, kasutajale sõnumi saatmine. Programmeerimiskeskkonnaks on valitud Lazarus.
1. Saame administraatorilt või uuesti konsooli kaudu kasutajate täieliku domeeniloendi "login" - "täisnimi":
wmic useraccount get Name,FullName
keegi ei keela isegi seda:
wmic useraccount get Name,FullName > c:testusername.txt
Ütlen kohe, et selle faili töötlemisega oli probleem Lazarusel, kuna vaikimisi on selle kodeering UCS-2, nii et ma pidin selle lihtsalt käsitsi teisendama tavaliseks UTF-8-ks. Failistruktuuris on palju sakke, õigemini palju tühikuid, mida otsustati programmiliselt töödelda, varem või hiljem kodeeringu probleem laheneb ja faili uuendatakse programmiliselt.
Niisiis, idee on luua programmi kasutajatele juurdepääsetav kaust, näiteks c:test, milles on 2 faili: esimene sisselogimise ja täisnimega, teine id_rdp ja kasutajate sisselogimisega. Järgmiseks töötleme neid andmeid nii hästi kui suudame :).
Vahepeal kanname seansside loendiga seostamiseks selle (sisselogimise ja täisnimi) sisu 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;
Vabandan "palju koodi" pärast, järgmised punktid on lakoonilisemad.
2. Kasutades sama meetodit eelmises lõigus, loeme loendi töötlemise tulemuse StringGridi elemendiks, samal ajal kui annan "olulise" koodilõigu:
2.1 Praeguse RDP seansside loendi saame failis:
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. Otseühenduse loomine, klõpsates reale kasutaja ja tema seansinumbriga:
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. Tehtud on veel paar kaunistust, näiteks raadionupule vajutades sorteerimine ja sõnumid kasutajale või kõigile kasutajatele.
→ Täielik lähtekood on näha
III. AdminLinki kasutamine – mida ma nägin:
AdminLink loob otsetee, mis viitab utiliidi asukohale admilaunch.exeja käivitusutiliidi isiklik koopia AdmiRun.Exe mis asub näiteks kasutaja kaustas Vasja, tüüp C:UsersvasyaWINDOWS. Üldiselt pole kõik nii hull: saate oma administraatori südametunnistuse puhastamiseks mängida otseteefaili ja teiste juurdepääsuõigustega.
Allikas: www.habr.com