Masalah sajrone periode karantina perusahaan dadi ing ngisor iki: pancene kudu nyilikake jumlah kunjungan menyang kantor dening spesialis sing nglayani lan konsultasi babagan piranti lunak aplikasi, lan terus terang, pangguna asring nyiksa bantuan saka spesialis tanpa pengin nyelidiki. masalah kasebut dhewe, dheweke ujar "bakal teka - bakal nulungi - bakal ditindakake, nanging aku bakal ngrokok / ngombe kopi, lsp." Konsultasi telpon nalika nuduhake server luwih efektif yen sampeyan ndeleng layar remot.
Sawise "penemuan" sepeda kita, informasi waras babagan topik artikel kasebut muncul:
Kabeh informasi ing ngisor iki dimaksudakΓ© kanggo wong-wong sing tolerates perversions abnormal biasane kanggo entuk asil sing dikarepake, nggawe cara sing ora perlu.
Supaya ora "narik kucing kanthi buntut", aku bakal miwiti karo sing pungkasan: mancal bisa digunakake kanggo pangguna rata-rata nggunakake sarana
I. Console lan bayangan RDP.
Wiwit digunakake karo hak administrator saka konsol Server Manager -> QuickSessionCollection -> kanthi ngeklik sesi pangguna sing dikarepake, milih Shadow saka menu konteks kanggo personel instructing carane nggunakake piranti lunak, ora dadi pilihan, metode "kayu" liyane dianggep, yaiku:
1. Temokake id RDP sesi:
query user | findstr Administrator
utawa:
qwinsta | findstr Administrator
opo maneh"| Findstr Administrator"Iku mung trep nalika ngerti apa persis Administrator sampeyan kudu, utawa nggunakake mung bagean pisanan kanggo ndeleng everyone mlebu ing server.
2. Sambungake menyang sesi iki, kasedhiya ing domain kawicaksanan klompok Opsi "Setel aturan kontrol remot kanggo sesi Layanan Desktop Jarak Jauh pangguna" dipilih kanthi paling ora pilihan "Sesi monitor kanthi ijin pangguna" sing dipilih (
mstsc /shadow:127
Wigati dimangerteni manawa dhaptar kasebut mung ngemot login pangguna.
Aku mbaleni manawa tanpa hak admin sampeyan bakal entuk ing ngisor iki:
Nanging kanggo debugging awal program sing bakal dibahas, aku nggunakake akun kanthi hak administrator.
II. Program
Dadi statement masalah: nggawe sawetara antarmuka grafis prasaja kanggo nyambung menyang pangertèn bayangan pangguna karo ijin, ngirim pesen kanggo pangguna. Lingkungan pemrograman sing dipilih yaiku Lazarus.
1. Kita entuk dhaptar domain lengkap pangguna "login" - "jeneng lengkap" saka administrator, utawa maneh liwat konsol:
wmic useraccount get Name,FullName
ora ana sing nglarang iki:
wmic useraccount get Name,FullName > c:testusername.txt
Aku bakal langsung ngomong yen Lazarus sing duwe masalah karo ngolah file iki, amarga kanthi standar enkoding UCS-2, mula aku kudu ngowahi kanthi manual menyang UTF-8 biasa. Ana akeh tab ing struktur file, utawa luwih akeh spasi, sing diputusake kanggo diproses kanthi program; cepet utawa mengko masalah enkoding bakal ditanggulangi, lan file kasebut bakal dianyari kanthi program.
Dadi, ide kasebut yaiku nduwe folder sing bisa diakses pangguna program, contone c:test, sing bakal ana 2 file: sing pertama nganggo login lan jeneng lengkap, sing nomer loro nganggo id_rdp lan login pangguna. Sabanjure, kita ngolah data iki kanthi paling apik :).
Ing sawetoro wektu, kanggo nggandhengake karo dhaptar sesi, kita nransfer isi (login lan jeneng lengkap) iki menyang array:
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;
Aku njaluk ngapura kanggo "akeh kode", TCTerms ing ngisor iki bakal luwih ringkes.
2. Nggunakake metode sing padha saka paragraf sadurunge, kita maca asil pangolahan dhaptar menyang unsur StringGrid, nalika aku bakal menehi potongan kode "penting":
2.1 Kita nampa dhaptar sesi RDP saiki ing file:
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 Proses file (mung baris kode penting sing dituduhake):
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. Sambungan langsung dhewe kanthi ngeklik baris karo pangguna lan nomer sesi:
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. A saperangan liyane paesan wis digawe, kayata ngurutake kanthi ngeklik ing radiobutton, lan pesen kanggo pangguna utawa kabeh kedhaftar.
β Kode sumber lengkap bisa dideleng
III. Nggunakake AdminLink - apa sing dakdeleng:
AdminLink nggawe trabasan sing nuduhake lokasi sarana admilaunch.exe, lan salinan pribadi sarana peluncuran AdmiRun.Exe kang dumunung ing folder pangguna, contone, vasya, jinis C:UsvasyaWINDOWS. UmumΓ©, ora kabeh dadi ala: sampeyan bisa muter-muter kanthi hak akses menyang file trabasan lan liya-liyane kanggo ngresiki kalbu admin sampeyan dhewe.
Source: www.habr.com