Ettevõtte karantiinioperatsiooni ajal tekkis probleem järgmises: rakendustarkvara hooldavate ja konsulteerivate spetsialistide külastuste arvu kontoritesse on vaja minimeerida. Ausalt öeldes kasutavad kasutajad spetsialistide abi sageli üle, soovimata asjasse süveneda, öeldes: "Nad tulevad, aitavad, teevad seda, kuni ma suitsetan/kohvi joon jne." Telefonikonsultatsioonid jagatud serveriühendusega on kaugekraani vaatamisel tõhusamad.

Pärast seda, kui olime oma jalgratta juba "leiutanud", sattusin artikli teemal asjakohase teabe otsa: või või Kõik need hõlmavad konsooli kasutamist, isegi lihtsa dialoogi elementidega.
Kogu allolev teave on mõeldud neile, kes talub normaalselt ebanormaalseid perverssusi soovitud tulemuse saavutamiseks leiutades ebavajalikke meetodeid.
Et vältida ümberringi keerutamist, alustan viimasest osast: jalgratas töötab tavakasutaja jaoks kasuliku abil , mille eest tänu autorile.
I. Konsool ja vari RDP.
Alates kasutamisest koos Server Manageri konsooli administraatoriõigused -> QuickSessionCollection -> klõpsates huvipakkuva kasutaja seansil ja valides kontekstimenüüst Shadow töötajatele, kes juhendavad tarkvara kasutamist, pole valikuvõimalus, kaaluti teist "puidust" meetodit, nimelt:
1. Uurige välja RDP seansi ID:
query user | findstr Administratorvõi:
qwinsta | findstr Administrator Pealegi, "| findstr administraator"See oli mugav ainult siis, kui teadsid täpselt, mida administraator Serverisse sisseloginud inimeste kuvamiseks peate kasutama ainult esimest osa.
![]()
2. Looge ühendus selle seansiga, eeldusel, et see asub domeenis grupipoliitikad Suvandi „Määrab kaugtöölaua teenuste kasutajaseansside kaugjuhtimisreeglid” väärtuseks on seatud vähemalt „Jälgi seanssi kasutajaloaga” ():
mstsc /shadow:127Palun arvestage, et loend sisaldab ainult kasutajate sisselogimisi.
Lubage mul veel kord öelda, et ilma administraatoriõigusteta saate järgmise:

Kuid kõnealuse programmi esialgseks silumiseks kasutasin administraatori õigustega kontot.
II. Programm
Seega oli ülesandeks luua lihtne graafiline liides, mis ühenduks kasutaja varjumeelega tema loal ja saadaks kasutajale sõnumi. Programmeerimiskeskkonnaks valiti Lazarus.
1. Hankige administraatorilt või uuesti konsooli kaudu täielik domeenikasutajate loend (sisselogimine - täisnimi):
wmic useraccount get Name,FullName Keegi ei keela seda isegi:
wmic useraccount get Name,FullName > c:testusername.txtÜtlen kohe ära, et Lazarusel oli selle faili töötlemisel probleem, kuna selle vaikimisi kodeering on UCS-2, seega pidin selle käsitsi standardseks UTF-8-ks teisendama. Failistruktuur sisaldab palju tabulaatoreid või õigemini palju tühikuid, millega otsustasime programmiliselt tegeleda. Varem või hiljem lahendatakse kodeerimisprobleem ja faili uuendatakse programmiliselt.
Seega on idee luua programmi kasutajatele ligipääsetav kaust, näiteks c:\test, mis sisaldab kahte faili: esimene sisselogimise ja täisnimega ning teine id_rdp ja kasutaja sisselogimisega. Seejärel töötleme neid andmeid parimal võimalikul viisil.
Vahepeal, seansside loendiga seostamiseks, edastame selle sisu (sisselogimise ja täisnime) 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;Vabandust "palju koodi" pärast, järgmised punktid on sisutihedamad.
2. Sarnaselt eelmises punktis kirjeldatud meetodile loeme loenditöötluse tulemuse StringGrid elementi. Siin on „oluline“ koodilõik:
2.1 Saame failis praeguse RDP-seansside loendi:
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. Ühendus ise luuakse kasutaja ja tema seansi numbriga reale klõpsates:
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. Tehti veel paar täiustust, näiteks sortimine raadionupule klõpsates ning sõnumid kasutajale või kõigile kasutajatele.

→ Täielik lähtekood on nähtav
III. AdminLinki kasutamine – mida ma nägin:
AdminLink loob otsetee, mis lingib utiliidi asukohta. admilaunch.exeja käivitusprogrammi isiklik koopia AdmiRun.Exe mis asub näiteks kasutajakaustas Vasjatüübi järgi C:\Kasutajad\WINDOWSLühidalt, kõik pole nii hull: saate oma administraatori südametunnistuse puhastamiseks mängida otsetee faili ligipääsuõiguste ja muude asjadega.
Allikas: www.habr.com
