Utiliti pikeun sambungan bayangan manusa non-administrator ka sesi pamaké RDP di WinServer 2012R2

Masalah salami periode karantina perusahaan janten kieu: leres-leres diperyogikeun pikeun ngaminimalkeun jumlah kunjungan ka kantor ku spesialis anu ngalayanan sareng konsultasi dina parangkat lunak aplikasi, sareng terus terang, pangguna sering nyiksa bantosan spesialis tanpa hoyong ngagali kana. masalahna sorangan, aranjeunna nyarios "aranjeunna bakal sumping - aranjeunna bakal ngabantosan - aranjeunna bakal ngalakukeun éta, tapi kuring bakal ngaroko / nginum kopi, jsb." Konsultasi telepon nalika ngabagi server langkung efektif upami anjeun ningali layar jauh.

Utiliti pikeun sambungan bayangan manusa non-administrator ka sesi pamaké RDP di WinServer 2012R2

Saatos "penemuan" sapédah urang, inpormasi waras ngeunaan topik tulisan éta muncul: RDS Shadow - sambungan bayangan ka sesi pangguna RDP dina Windows Server 2012 R2 atawa mode kalangkang pamaké unprivileged dina windows server atawa Delegating manajemén sesi RDP. Sadayana ngalibatkeun panggunaan konsol, bahkan kalayan unsur-unsur dialog anu sederhana.

Sadaya inpo di handap ieu dimaksudkeun pikeun jalma anu tolerates perversions abnormal normalna pikeun meunangkeun hasil nu dipikahoyong, inventing métode teu perlu.
Pikeun henteu "narik ucing ku buntut", kuring bakal ngamimitian ku anu terakhir: sapédah tiasa dianggo pikeun pangguna rata-rata nganggo utiliti. AdmiLink, pikeun nu berkat pangarang na.

I. Konsol jeung kalangkang RDP.

Kusabab ngagunakeun kalawan hak administrator tina konsol Server Manajer -> QuickSessionCollection -> ku ngaklik sési pangguna anu dipikaresep, milih Shadow tina ménu kontéks pikeun personel instructing kumaha ngagunakeun software, sanés pilihan, metode "kayu" sanés dianggap, nyaéta:

1. Pilarian id RDP tina sési:

query user | findstr Administrator

atawa:

qwinsta | findstr Administrator 

Sumawona"| findstr Administrator"Éta ngan merenah nalika anjeun terang naon persisna anu ngolola anjeun peryogi, atanapi nganggo ukur bagian kahiji pikeun ningali dulur asup kana server.

Utiliti pikeun sambungan bayangan manusa non-administrator ka sesi pamaké RDP di WinServer 2012R2

2. Nyambung ka sési ieu, disadiakeun yén dina domain kawijakan grup Pilihan "Nyetél aturan kadali jauh pikeun sési Layanan Desktop Jauh pangguna" dipilih kalayan sahenteuna pilihan "Monitor sési kalayan idin pangguna" dipilih (deui):

mstsc /shadow:127

Perhatikeun yén daptar ngan bakal ngandung login pamaké.

Kuring ngulang deui yén tanpa hak admin anjeun bakal nampi ieu:

Utiliti pikeun sambungan bayangan manusa non-administrator ka sesi pamaké RDP di WinServer 2012R2

Tapi pikeun debugging awal program anu bakal dibahas, kuring nganggo akun sareng hak administrator.

II. Program

Jadi pernyataan masalah: nyieun sababaraha panganteur grafis basajan pikeun nyambung ka rasa kalangkang pamaké kalawan idin-Na, ngirim pesen ka pamaké. Lingkungan pemrograman anu dipilih nyaéta Lasarus.

1. Urang meunang daptar domain pinuh pamaké "login" - "ngaran lengkep" ti administrator, atawa deui ngaliwatan konsol nu:

wmic useraccount get Name,FullName 

teu aya anu ngalarang malah ieu:

wmic useraccount get Name,FullName > c:testusername.txt

Kuring bakal langsung nyarios yén éta Lasarus anu ngagaduhan masalah sareng ngolah file ieu, sabab sacara standar encodingna nyaéta UCS-2, janten kuring kedah sacara manual ngarobih kana UTF-8 biasa. Aya seueur tab dina struktur file, atanapi langkung seueur rohangan, anu diputuskeun pikeun diolah sacara program; engké atanapi engké masalah encoding bakal direngsekeun, sareng filena bakal diropéa sacara program.

Janten, idena nyaéta gaduh folder anu tiasa diaksés ku pangguna program, contona c:test, dimana bakal aya 2 file: anu kahiji kalayan login sareng nami lengkep, anu kadua kalayan id_rdp sareng login pangguna. Salajengna, urang ngolah data ieu sabisa-bisa :).

Samentawis waktos, pikeun ngahubungkeun sareng daptar sési, urang mindahkeun eusi ieu (login sareng nami lengkep) kana susunan:

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;

Hapunten pikeun "loba kode", titik di handap ieu bakal leuwih singket.

2. Nganggo metodeu anu sami tina paragraf sateuacana, urang maca hasil ngolah daptar kana unsur StringGrid, sedengkeun kuring bakal masihan potongan kode anu "signifikan".

2.1 Kami nampi daptar sesi RDP ayeuna dina 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 Ngolah file (ngan ukur garis kode anu penting anu dituduhkeun):

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 sorangan ku ngaklik dina garis kalawan pamaké sarta nomer sési na:

  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. Sababaraha leuwih hiasan geus dijieun, kayaning asihan ku ngaklik on radiobutton, sarta pesen ka pamaké atawa sakabéh pamaké.

Utiliti pikeun sambungan bayangan manusa non-administrator ka sesi pamaké RDP di WinServer 2012R2

→ Kode sumber lengkep tiasa ditingali di dieu

III. Ngagunakeun AdminLink - naon kuring nempo:

AdminLink ngahasilkeun potong kompas anu ngarujuk kana lokasi utilitas admilaunch.exe, sareng salinan pribadi tina utilitas peluncuran AdmiRun.Exe которая находится в папке пользователя, например Vasya, tipeu C: UsersvasyaWINDOWS. Sacara umum, henteu sadayana parah: anjeun tiasa maénkeun kalayan hak aksés kana file potong kompas sareng anu sanés pikeun mupus nurani admin anjeun nyalira.

sumber: www.habr.com

Tambahkeun komentar