WinServer 2012R2 дээрх RDP хэрэглэгчийн сешнүүдэд администратор бус хүнийг сүүдэртэй холбох хэрэгсэл

Аж ахуйн нэгжийн хорио цээрийн үеийн асуудал нь дараах байдалтай байв: хэрэглээний програм хангамжийн талаар үйлчилгээ үзүүлж, зөвлөгөө өгдөг мэргэжилтнүүдийн оффис руу очих тоог багасгах нь үнэхээр чухал бөгөөд ний нуугүй хэлэхэд хэрэглэгчид нарийн ширийн зүйлийг судлах хүсэлгүйгээр мэргэжилтнүүдийн тусламжийг урвуулан ашигладаг. Асуудал нь өөрөө "тэд ирнэ - тэд туслах болно - тэд үүнийг хийх болно, гэхдээ би тамхи татах/кофе уух гэх мэт" гэж хэлдэг. Хэрэв та алсын дэлгэцийг харвал сервер хуваалцах үед утсаар зөвлөгөө өгөх нь илүү үр дүнтэй байдаг.

WinServer 2012R2 дээрх RDP хэрэглэгчийн сешнүүдэд администратор бус хүнийг сүүдэртэй холбох хэрэгсэл

Манай унадаг дугуйг "шинэ бүтээсний" дараа нийтлэлийн сэдвийн талаархи эрүүл ухаантай мэдээлэл гарч ирэв. RDS Shadow – Windows Server 2012 R2 дээрх RDP хэрэглэгчийн сессүүдтэй сүүдрийн холболт буюу Windows сервер дээрх давуу эрхгүй хэрэглэгчийн сүүдэр горим буюу RDP хуралдааны удирдлагыг шилжүүлэх. Эдгээр нь бүгд энгийн харилцан ярианы элементүүдтэй ч гэсэн консол ашиглахыг хамардаг.

Доорх бүх мэдээлэл нь хүмүүст зориулагдсан болно хэвийн бус гажуудлыг хэвийн хэмжээнд тэсвэрлэдэг шаардлагагүй аргуудыг зохион бүтээж, хүссэн үр дүндээ хүрэх.
"Муурыг сүүлнээс нь татахгүйн тулд" би сүүлчийнхээс эхэлье: унадаг дугуй нь энгийн хэрэглэгчдэд зориулагдсан. AdmiLink, үүний төлөө зохиогчдоо баярлалаа.

I. Консол ба сүүдэр RDP.

-тай хамт хэрэглэснээс хойш Server Manager консолын администраторын эрх -> QuickSessionCollection -> сонирхсон хэрэглэгчийн сесс дээр дарж контекст цэснээс Shadow-г сонгоно. програм хангамжийг хэрхэн ашиглах талаар зааварчилгаа өгч буй ажилтнуудад зориулсан, сонголт биш, өөр "модон" аргыг авч үзсэн, тухайлбал:

1. Сеансын RDP id-г олоорой:

query user | findstr Administrator

эсвэл:

qwinsta | findstr Administrator 

Дээрээс нь "| findstr Администратор"Чи яг юу болохыг мэдсэн үед л тохиромжтой байсан Администратор Танд хэрэгтэй, эсвэл хүн бүр серверт нэвтэрсэн эсэхийг харахын тулд зөвхөн эхний хэсгийг ашиглана уу.

WinServer 2012R2 дээрх RDP хэрэглэгчийн сешнүүдэд администратор бус хүнийг сүүдэртэй холбох хэрэгсэл

2. Домэйн дотор байгаа тохиолдолд энэ сессэд холбогдоно уу бүлгийн бодлого "Алсын ширээний үйлчилгээний хэрэглэгчийн сессийн алсын удирдлагын дүрмийг тохируулах" сонголтыг дор хаяж "Хэрэглэгчийн зөвшөөрөлтэй сессийг хянах" сонголтыг сонгосон (дэлгэрэнгүй мэдээлэл):

mstsc /shadow:127

Жагсаалт нь зөвхөн хэрэглэгчийн нэвтрэх мэдээллийг агуулна гэдгийг анхаарна уу.

Админ эрхгүйгээр та дараах зүйлийг авах болно гэдгийг би давтан хэлье.

WinServer 2012R2 дээрх RDP хэрэглэгчийн сешнүүдэд администратор бус хүнийг сүүдэртэй холбох хэрэгсэл

Гэхдээ хэлэлцэх програмыг урьдчилан дибаг хийхийн тулд би администраторын эрхтэй данс ашигласан.

II. Програм

Тиймээс асуудлын мэдэгдэл: хэрэглэгчийн сүүдрийн мэдрэмжтэй холбогдохын тулд энгийн график интерфэйсийг бий болгож, хэрэглэгч рүү мессеж илгээх. Сонгосон програмчлалын орчин нь Лазар юм.

1. Бид админаас эсвэл дахин консолоор дамжуулан "нэвтрэх" - "бүтэн нэр" гэсэн хэрэглэгчдийн домэйн жагсаалтыг бүрэн авдаг.

wmic useraccount get Name,FullName 

Хэн ч үүнийг хориглодоггүй:

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

Анхдагч байдлаар кодчилол нь UCS-2 учраас би үүнийг энгийн UTF-8 болгон гараар хөрвүүлэх шаардлагатай болсон тул энэ файлыг боловсруулахад Лазар байсан гэдгийг би шууд хэлье. Файлын бүтцэд маш олон таб, эс тэгвээс маш олон зай байгаа бөгөөд тэдгээрийг програмын дагуу боловсруулахаар шийдсэн; эрт орой хэзээ нэгэн цагт кодчилолын асуудал шийдэгдэж, файлыг програмын дагуу шинэчлэх болно.

Тиймээс, програмын хэрэглэгчдэд хандах боломжтой хавтастай байх санаа юм, жишээлбэл c:test, үүнд 2 файл байх болно: эхнийх нь нэвтрэх болон бүтэн нэр, хоёр дахь нь id_rdp болон хэрэглэгчийн нэвтрэлт. Дараа нь бид энэ өгөгдлийг аль болох сайн боловсруулдаг :).

Энэ хооронд сешнүүдийн жагсаалттай холбохын тулд бид энэ (нэвтрэх болон бүтэн нэр) агуулгыг массив руу шилжүүлнэ:

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;

"Их код" өгсөнд хүлцэл өчье, дараах зүйлүүд илүү товч байх болно.

2. Өмнөх догол мөртэй ижил аргыг ашиглан бид жагсаалтыг StringGrid элемент болгон боловсруулсны үр дүнг уншсан бол би "чухал" кодыг өгөх болно:

2.1 Бид файл дахь RDP сешнүүдийн одоогийн жагсаалтыг авна.

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 Файлыг боловсруулах (зөвхөн кодын чухал мөрүүдийг зааж өгсөн болно):

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. Хэрэглэгч болон түүний сессийн дугаартай шугам дээр дарж шууд холбогдоно уу:

  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. Радио товчлуур дээр дарж эрэмбэлэх, хэрэглэгч эсвэл бүх хэрэглэгчдэд илгээх мессеж зэрэг хэд хэдэн чимэглэлийг нэмж хийсэн.

WinServer 2012R2 дээрх RDP хэрэглэгчийн сешнүүдэд администратор бус хүнийг сүүдэртэй холбох хэрэгсэл

→ Бүрэн эх кодыг харж болно энд

III. AdminLink ашиглах - миний харсан зүйл:

AdminLink нь хэрэгслийн байршлыг заадаг товчлол үүсгэдэг admilaunch.exe, болон эхлүүлэх хэрэгслийн хувийн хуулбар AdmiRun.Exe жишээлбэл, хэрэглэгчийн хавтсанд байдаг вася, төрөл C: Хэрэглэгчид WINDOWS. Ерөнхийдөө бүх зүйл тийм ч муу биш юм: та өөрийн админ ухамсрыг цэвэрлэхийн тулд товчлолын файл болон бусад хүмүүст хандах эрхээр тоглож болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх