Tól fyrir mannlega skuggatengingu óstjórnanda við RDP notendalotur í WinServer 2012R2

Vandamálið á sóttkvíartímabili fyrirtækisins varð eftirfarandi: það er í raun nauðsynlegt að lágmarka fjölda heimsókna á skrifstofur sérfræðinga sem þjónusta og ráðgjöf um forritahugbúnað, og satt að segja misnota notendur oft aðstoð sérfræðinga án þess að vilja kafa ofan í málið sjálft segja þeir "þeir munu koma - þeir munu hjálpa - þeir munu gera það, en ég mun reykja/drekka kaffi, osfrv." Símaráðgjöf þegar miðlari er deilt er skilvirkara ef þú skoðar ytri skjáinn.

Tól fyrir mannlega skuggatengingu óstjórnanda við RDP notendalotur í WinServer 2012R2

Eftir „uppfinninguna“ á hjólinu okkar komu skynsamlegar upplýsingar um efni greinarinnar: RDS Shadow – skuggatenging við RDP notendalotur í Windows Server 2012 R2 eða Skuggastilling án forréttinda notanda á Windows server eða Framselja stjórnun RDP funda. Öll þau fela í sér notkun stjórnborðs, jafnvel með einfaldri samræðuþáttum.

Allar upplýsingar hér að neðan eru ætlaðar þeim sem þolir óeðlilegar rangfærslur venjulega til að ná tilætluðum árangri, finna upp óþarfa aðferðir.
Til þess að „toga ekki köttinn í skottið“ byrja ég á því síðasta: hjólið virkar fyrir meðalnotandann sem notar tólið AdmiLink, sem þökk sé höfundi hennar.

I. Hugga og skugga RDP.

Frá notkun með stjórnandaréttindi á stjórnborði Server Manager -> QuickSessionCollection -> með því að smella á lotu viðkomandi notanda, velja Shadow í samhengisvalmyndinni fyrir starfsfólk sem leiðbeinir um notkun hugbúnaðarins, er ekki valkostur, önnur „tré“ aðferð var skoðuð, nefnilega:

1. Finndu út RDP auðkenni lotunnar:

query user | findstr Administrator

eða:

qwinsta | findstr Administrator 

Þar að auki"| findstr Stjórnandi„Það var bara þægilegt þegar maður vissi hvað nákvæmlega stjórnandi þú þarft, eða notaðu aðeins fyrsta hlutann til að sjá alla skráða inn á netþjóninn.

Tól fyrir mannlega skuggatengingu óstjórnanda við RDP notendalotur í WinServer 2012R2

2. Tengstu við þessa lotu, að því tilskildu að í léninu stefnur hópa Valmöguleikinn „Setja upp fjarstýringarreglur fyrir notendalotur fjarskjáborðsþjónustu“ er valinn með að minnsta kosti „Skoða lotu með leyfi notanda“ valinn (meira):

mstsc /shadow:127

Vinsamlegast athugaðu að listinn mun aðeins innihalda notendainnskráningu.

Ég endurtek að án stjórnanda réttinda færðu eftirfarandi:

Tól fyrir mannlega skuggatengingu óstjórnanda við RDP notendalotur í WinServer 2012R2

En fyrir bráðabirgðakembiforrit á forritinu sem fjallað verður um notaði ég reikning með stjórnandaréttindi.

II. Forrit

Svo vandamálayfirlýsingin: búa til einfalt grafískt viðmót til að tengjast skuggaskyni notandans með leyfi hans, senda skilaboð til notandans. Forritunarumhverfið sem var valið er Lazarus.

1. Við fáum allan lénslistann yfir notendur „innskráning“ - „fullt nafn“ frá stjórnandanum, eða aftur í gegnum stjórnborðið:

wmic useraccount get Name,FullName 

enginn bannar einu sinni þetta:

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

Ég segi strax að það var Lazarus sem átti í vandræðum með að vinna úr þessari skrá, þar sem sjálfgefið er að kóðun hennar er UCS-2, svo ég þurfti bara að breyta henni handvirkt í venjulegan UTF-8. Það eru margir flipar í skráarskipaninni, eða öllu heldur mikið af rýmum, sem ákveðið var að vinna úr forritunarlega, fyrr eða síðar verður kóðun vandamálið leyst og skráin verður uppfærð forritunarlega.

Svo, hugmyndin er að hafa möppu aðgengilega notendum forritsins, til dæmis c:test, þar sem það verða 2 skrár: sú fyrri með innskráningu og fullu nafni, önnur með id_rdp og innskráningu notenda. Næst vinnum við þessi gögn eins vel og við getum :).

Í millitíðinni, til að tengja við lista yfir lotur, flytjum við þetta (innskráning og fullt nafn) innihald í fylki:

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;

Ég biðst afsökunar á „miklum kóða“, eftirfarandi atriði verða hnitmiðaðri.

2. Með því að nota sömu aðferð frá fyrri málsgrein, lesum við niðurstöðuna af því að vinna listann yfir í StringGrid þáttinn, á meðan ég mun gefa upp „verulegan“ kóða:

2.1 Við fáum núverandi lista yfir RDP fundi í skrá:

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 Vinnið úr skránni (aðeins marktækar kóðalínur eru sýndar):

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. Bein tenging sjálf með því að smella á línuna með notandanum og lotunúmeri hans:

  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. Nokkrar skreytingar í viðbót hafa verið gerðar, svo sem flokkun með því að smella á útvarpshnappinn og skilaboð til notandans eða allra notenda.

Tól fyrir mannlega skuggatengingu óstjórnanda við RDP notendalotur í WinServer 2012R2

→ Hægt er að sjá allan frumkóðann hér

III. Að nota AdminLink - það sem ég sá:

AdminLink býr til flýtileið sem vísar til staðsetningu tólsins admilaunch.exe, og persónulegt eintak af ræsiforritinu AdmiRun.Exe sem er til dæmis staðsett í möppu notandans Vasya, gerð C:UsersvasyaWINDOWS. Almennt séð er ekki allt svo slæmt: þú getur leikið þér með aðgangsrétt að flýtivísaskránni og öðrum til að hreinsa eigin samvisku stjórnanda.

Heimild: www.habr.com

Bæta við athugasemd