WinServer 2012R2 da ma'mur bo'lmagan foydalanuvchining RDP seanslariga inson soyasi ulanishi uchun yordamchi dastur

Korxonaning karantin davridagi muammo quyidagicha bo'ldi: haqiqatan ham amaliy dasturiy ta'minot bo'yicha xizmat ko'rsatuvchi va maslahat beradigan mutaxassislarning ofislarga tashrifi sonini minimallashtirish kerak, va ochig'ini aytganda, foydalanuvchilar ko'pincha mutaxassislarning yordamini suiiste'mol qilishni istamasdan suiiste'mol qiladilar. Muammoning o'zi, ular "ular kelishadi - yordam berishadi - ular buni qilishadi, lekin men chekaman / qahva ichaman va hokazo" deyishadi. Agar masofaviy ekranni ko'rsangiz, serverni ulashishda telefon orqali maslahat berish samaraliroq bo'ladi.

WinServer 2012R2 da ma'mur bo'lmagan foydalanuvchining RDP seanslariga inson soyasi ulanishi uchun yordamchi dastur

Velosipedimiz "ixtiro qilinganidan" keyin maqola mavzusi bo'yicha aqlli ma'lumotlar paydo bo'ldi: RDS Shadow – Windows Server 2012 R2 da RDP foydalanuvchi seanslariga soyali ulanish yoki Windows serverida imtiyozsiz foydalanuvchi soya rejimi yoki RDP seanslarini boshqarishni topshirish. Ularning barchasi, hatto oddiy dialog elementlari bilan ham konsoldan foydalanishni o'z ichiga oladi.

Quyidagi barcha ma'lumotlar kimlar uchun mo'ljallangan g'ayritabiiy buzilishlarga odatda toqat qiladi keraksiz usullarni ixtiro qilib, kerakli natijaga erishish.
"Mushukni dumidan tortib olmaslik" uchun men oxirgisidan boshlayman: velosiped yordamchi dasturdan foydalanadigan oddiy foydalanuvchi uchun ishlaydi. AdmiLink, buning uchun uning muallifiga rahmat.

I. Konsol va soyali RDP.

bilan foydalangandan beri Server menejeri konsolining administrator huquqlari -> QuickSessionCollection -> qiziqtirgan foydalanuvchi seansini bosish orqali kontekst menyusidan Shadow-ni tanlang. dasturiy ta'minotdan foydalanish bo'yicha ko'rsatmalar beradigan xodimlar uchun, variant emas, boshqa "yog'och" usul ko'rib chiqildi, xususan:

1. Seansning RDP identifikatorini toping:

query user | findstr Administrator

yoki:

qwinsta | findstr Administrator 

Bundan tashqari "| findstr Administratorβ€œBu siz aniq nima ekanligini bilganingizdagina qulay edi Administrator Sizga kerak, yoki hammaning serverga kirganligini ko'rish uchun faqat birinchi qismdan foydalaning.

WinServer 2012R2 da ma'mur bo'lmagan foydalanuvchining RDP seanslariga inson soyasi ulanishi uchun yordamchi dastur

2. Domenda bo'lishi sharti bilan ushbu sessiyaga ulaning guruh siyosati "Masofaviy ish stoli xizmatlarining foydalanuvchi seanslari uchun masofadan boshqarish qoidalarini sozlash" opsiyasi kamida "Foydalanuvchi ruxsati bilan seansni kuzatish" opsiyasi tanlangan holda tanlanadi (batafsil ma'lumot):

mstsc /shadow:127

E'tibor bering, ro'yxat faqat foydalanuvchi loginlarini o'z ichiga oladi.

Takror aytamanki, administrator huquqlarisiz siz quyidagilarni olasiz:

WinServer 2012R2 da ma'mur bo'lmagan foydalanuvchining RDP seanslariga inson soyasi ulanishi uchun yordamchi dastur

Ammo muhokama qilinadigan dasturni oldindan tuzatish uchun men administrator huquqlariga ega hisob qaydnomasidan foydalandim.

II. Dastur

Shunday qilib, muammo bayoni: foydalanuvchining ruxsati bilan uning soya tuyg'usiga ulanish uchun oddiy grafik interfeysni yaratish, foydalanuvchiga xabar yuborish. Tanlangan dasturlash muhiti - Lazarus.

1. Biz foydalanuvchilarning "login" - "to'liq ism" domenlarining to'liq ro'yxatini administratordan yoki yana konsol orqali olamiz:

wmic useraccount get Name,FullName 

Hech kim buni taqiqlamaydi:

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

Men darhol aytamanki, aynan Lazarus ushbu faylni qayta ishlashda muammoga duch keldi, chunki sukut bo'yicha uning kodlashi UCS-2, shuning uchun uni oddiy UTF-8 ga qo'lda aylantirishim kerak edi. Fayl tuzilmasida juda ko'p yorliqlar, aniqrog'i juda ko'p bo'shliqlar mavjud bo'lib, ularni dasturiy jihatdan qayta ishlashga qaror qilindi; ertami-kechmi kodlash muammosi hal qilinadi va fayl dasturiy jihatdan yangilanadi.

Shunday qilib, g'oya dastur foydalanuvchilari uchun ochiq bo'lgan papkaga ega bo'lishdir, masalan, c: test, unda 2 ta fayl bo'ladi: birinchisida login va to'liq ism, ikkinchisida id_rdp va foydalanuvchilarning loginlari mavjud. Keyinchalik, biz ushbu ma'lumotlarni iloji boricha qayta ishlaymiz :).

Ayni paytda, seanslar ro'yxati bilan bog'lanish uchun biz ushbu (login va to'liq ism) tarkibni massivga o'tkazamiz:

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;

Men "ko'p kod" uchun uzr so'rayman, quyidagi fikrlar qisqaroq bo'ladi.

2. Oldingi paragrafdagi xuddi shu usuldan foydalanib, biz ro'yxatni StringGrid elementiga qayta ishlash natijasini o'qiymiz, men esa "muhim" kod qismini beraman:

2.1 Biz RDP seanslarining joriy ro'yxatini faylda olamiz:

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 Faylni qayta ishlash (faqat muhim kod satrlari ko'rsatilgan):

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. Foydalanuvchi va uning sessiya raqami bilan chiziqni bosish orqali to'g'ridan-to'g'ri ulanishning o'zi:

  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. Radio tugmachasini bosish orqali saralash va foydalanuvchi yoki barcha foydalanuvchilarga xabarlar kabi yana bir nechta bezaklar yaratildi.

WinServer 2012R2 da ma'mur bo'lmagan foydalanuvchining RDP seanslariga inson soyasi ulanishi uchun yordamchi dastur

β†’ To'liq manba kodini ko'rish mumkin shu yerda

III. AdminLink-dan foydalanish - men ko'rgan narsam:

AdminLink yordam dasturining joylashgan joyiga havola qiluvchi yorliq yaratadi admilaunch.exe, va ishga tushirish yordam dasturining shaxsiy nusxasi AdmiRun.Exe masalan, foydalanuvchi papkasida joylashgan Vasya, turi C: WINDOWS foydalanuvchilari. Umuman olganda, hamma narsa unchalik yomon emas: siz o'zingizning administrator vijdoningizni tozalash uchun yorliq fayliga va boshqalarga kirish huquqlari bilan o'ynashingiz mumkin.

Manba: www.habr.com

a Izoh qo'shish