Ettevõttesse karantiiniajal teki järgmine probleem: tõepoolest on vaja vähendada spetsialistide kabinetti külastamise arvu, kes haldavad ja nõustavad rakendussoftas, ning tuleb tõe eest öelda, et kasutajad kuritarvitavad tihti spetsialistide abi, ei soovides asja süveneda, üteldes: «tulevad — aitavad — teevad, aga ma vahepeal suitsetan/joon kohvi jne.» Telefonikonsultatsioon koos serveri kaugjuurdepääsuga on efektiivsem, kui vaadata kaugelt ekraani.

Juba pärast meie ratta «leiutamist» tuli ette mõistetav teave artikli teemal: või või . Kõik need eeldavad konsooli kasutamist, isegi lihtsate dialoogielementidega.
Kõik allpool esitatud teave on mõeldud neile, kes normaalselt taluvad ebanormaalseid erootikaid vajaliku tulemuse saavutamiseks, leiutades ebavajalikke viise.
Et «kassi saba ei venitada», alustan viimasest: ratas töötab tavalise kasutaja jaoks utiliidi , mille eest autorile tänud.
I. Konsool ja shadow RDP.
Kuna console'i Server Manageri kasutamine -> QuickSessionCollection -> klikkides huvipakkuvale seansile, valides kontekstimenüüst Shadow (Varjatud koopia) -> QuickSessionCollection -> klõpsates huvipakkuvale seansile ja valides kontekstimenüüst Shadow (Varikoopia) koolitajate jaoks rakenduse kasutamisest, — ei ole variant, kaaluti teist «puidust» meetodit, nimelt:
1. Saame teada RDP seansi id:
query user | findstr Administratorvõi:
qwinsta | findstr Administrator Kuid "| findstr Administrator" oli mugav ainult siis, kui tead, et just see Administraator on vajalik, või kasutada ainult esimest osa, et näha, kes kõik on serverisse sisse logitud.
![]()
2. Ühendame selle seansiga, tingimusel, et domeeni grupi poliitika parameeter «Seab kaugjuhtimise reeglid kaugjuurdepääsu seanssidele» on valitud vähemalt «Seansi vaatamine kasutaja loal» ():
mstsc /shadow:127Palun pane tähele, et loendis on ainult kasutajate logid.
Kordan, et ilma administreerimisõigusteta saad järgmise:

Aga et programmi, millest jutt edasi, eelnevalt testida, kasutasin administraatori õigustega kontot.
II. Programm
Seega ülesande püstitamine: luua mingisugune lihtne graafiline liides, et jõuda varjatud sensu kasutaja loa korral, edastada sõnum kasutajale. Programmeerimiskeskkond on valitud Lazarus.
1. Saame administraatorilt täieliku domeeninime loendi «login» — «täisnimi» või taas, läbi console:
wmic useraccount get Name,FullName keegi ei keela isegi nii:
wmic useraccount get Name,FullName > c:testusername.txtÜtlen kohe, et just Lazarus'il oli selle faili töötlemisega probleem, kuna selle kodeering on vaikimisi UCS-2, seega pidi lihtsalt käsitsi tavaliseks UTF-8-ks konverteerima. Failistruktuuris oli palju tabulatsioone, õigemini palju tühikuid, mida otsustati siiski programmiga töödelda, varem või hiljem lahendatakse kodeeringuülesanne, ja fail uuendatakse automaatselt.
Nii et idee on selline, et kaust, mis on programmikasutajatele kergesti kätte saadav, näiteks c:test, sisaldab 2 faili: esimene login ja fullname, teine id_rdp ja kasutajate login. Edasi töötleme neid andmeid, kuidas oskame :)
Ja seni, et seansside loendiga seostada, kanname selle (login ja fullname) sisu massiivi:
procedure Tf_rdp.UserF2Array;
var
F:TextFile; i:integer; f1, line1:String; fL: TStringList;
begin //f_d globaalne tee failide salvestamiseks
f1:=f_d+'user_name.txt'; //ülesanne lugeda faili sisu massiivi
fL := TStringList.Create; // rida allub metamorfoosidele eraldajatega
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1);
try // Avame faili lugemiseks
reset(F); ReadLn(F,line1);
i:=0;
while not eof(F) do // Loeme ridu, kuni fail lõpeb
begin
ReadLn(F,line1);
line1:= StringReplace(line1, ' ', '|',[]); //asendame esimese kaks tühikut eraldajaga |
// eemaldame kõik kahekordse tühiku
while pos(' ',line1)>0 do line1:= StringReplace(line1, ' ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //kui eraldaja eksisteerib, sisestame selle massiivi
fL.DelimitedText :=line1; // jagame veergudeks
if (fL[0]<>'') then //kui kontol on nimi
begin //sisestame selle massiivi
inc(i); // vabanege võimalike üksikute tühikute eest logis
fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
fam[1,i]:=fL[0];
end;end;end;end; // Valmis. Sulge faili.
CloseFile(F);
Fl.Free;
except
on E: EInOutError do ShowMessage('Faili töötlemise viga. Üksikasjad: '+E.Message);
end;end;Palun vabandust «palju koodi» pärast, järgmised punktid saavad olema lakoonilisemad.
2. Samuti loeme eelnevas punktis nimetatud meetodit kasutades töötlemise tulemuse StringGrid elemendisse, tuues esile "olulise" koodi osa:
2.1 Saame aktuaalse RDP seansside nimekirja faili:
f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // võib oodata ka kauem, kuni fail loetakse2.2 Töötleme faili (ainult olulised koodiread):
StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //lisame tsüklis StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //eemaldame loginnist tühikud
if (SearchArr(login1)>=0) then //otsime p1. massiivist loginit ja salvestame tabelisse FIO
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; //või salvestame plussmärgi:)
.... //kasutaja valiku põhjal sorteerime ja vormindame andmete järgi
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2); 3. Otsene ühendus kasutaja ja tema seansi numbriga klikkimisel:
id:=(StringGrid1.Row);// saame rea numbri IntToStr(StringGrid1.Row)
ids:=StringGrid1.Cells[2,id]; //saame rdp identifikaatori
cmdline:='/c mstsc /shadow:'+ ids; //ja ühendame....
if (b_rdp.Checked=True) then if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then; 4. Tehtud on veel paar kaunistust nagu sortimine klikkimisel radiobuttoni peal ja teavitamine kasutajale või kõigile kasutajatele.

→ Täielikku algse koodi saab näha
III. AdminLinki rakendamine — mida ma nägin:
AdminLink tõepoolest genereerib otsetee, mis viitab utiliidi asukohale admilaunch.exe, ja isiklike utiliidi käivituse koopia AdmiRun.Exe , mis asub kasutaja kaustas, näiteks vasya, nagu C:UsersvasyaWINDOWS. Üldiselt ei ole kõik nii hull: failide otseteede õiguste ja muude osas saab oma administraatorite südametunnistust puhastada.
Allikas: habr.com
