WinServer 2012R2-də qeyri-inzibatçının RDP istifadəçi seanslarına insan kölgəsi qoşulması üçün yardım proqramı

Müəssisənin karantin dövründə problem belə oldu: həqiqətən də tətbiqi proqram təminatı üzrə xidmət göstərən və məsləhət verən mütəxəssislərin ofislərə səfərlərinin sayını minimuma endirmək lazımdır və açığını desəm, istifadəçilər çox vaxt mütəxəssislərin köməyindən sui-istifadə edirlər. məsələnin özündə “gələcəklər - kömək edəcəklər - edəcəklər, amma siqaret çəkəcəm/kofe içəcəyəm və s.” deyirlər. Uzaqdan ekrana baxsanız, serveri paylaşarkən telefonla məsləhətləşmə daha effektiv olar.

WinServer 2012R2-də qeyri-inzibatçının RDP istifadəçi seanslarına insan kölgəsi qoşulması üçün yardım proqramı

Velosipedimizin "ixtirasından" sonra məqalənin mövzusu ilə bağlı sağlam məlumatlar ortaya çıxdı: RDS Shadow – Windows Server 2012 R2-də RDP istifadəçi seanslarına kölgə bağlantısı və ya Windows serverində imtiyazsız istifadəçi kölgə rejimi və ya RDP seanslarının idarəçiliyini həvalə etmək. Onların hamısı hətta sadə dialoq elementləri ilə də konsolun istifadəsini nəzərdə tutur.

Aşağıdakı bütün məlumatlar olanlar üçün nəzərdə tutulub anormal pozğunluqlara normal şəkildə dözür lazımsız üsullar icad edərək istənilən nəticəni əldə etmək.
"Pişiyi quyruğundan çəkməmək" üçün sonuncudan başlayacağam: velosiped yardım proqramından istifadə edən adi istifadəçi üçün işləyir. AdmiLink, bunun üçün müəllifinə təşəkkür edirəm.

I. Konsol və kölgə RDP.

Ilə istifadə edildiyindən Server Meneceri konsolunun administrator hüquqları -> QuickSessionCollection -> maraqlandıran istifadəçinin sessiyasına klikləməklə, kontekst menyusundan Kölgə seçərək proqram təminatından istifadə qaydalarını öyrədən işçilər üçün, seçim deyil, başqa bir "taxta" üsul nəzərdən keçirildi, yəni:

1. Sessiyanın RDP id-sini tapın:

query user | findstr Administrator

və ya:

qwinsta | findstr Administrator 

Üstəlik"| findstr Administrator“Yalnız nəyi dəqiq bildiyiniz zaman rahat idi inzibatçı ehtiyacınız var və ya hər kəsin serverə daxil olduğunu görmək üçün yalnız birinci hissədən istifadə edin.

WinServer 2012R2-də qeyri-inzibatçının RDP istifadəçi seanslarına insan kölgəsi qoşulması üçün yardım proqramı

2. Domendə olmaq şərti ilə bu sessiyaya qoşulun qrup siyasəti "Uzaq Masaüstü Xidmətlərinin istifadəçi seansları üçün uzaqdan idarəetmə qaydalarını qurun" seçimi ən azı "İstifadəçi icazəsi ilə seansa nəzarət" seçimi ilə seçilir (daha):

mstsc /shadow:127

Nəzərə alın ki, siyahıda yalnız istifadəçi girişləri olacaq.

Təkrar edirəm ki, admin hüquqları olmadan aşağıdakıları əldə edəcəksiniz:

WinServer 2012R2-də qeyri-inzibatçının RDP istifadəçi seanslarına insan kölgəsi qoşulması üçün yardım proqramı

Ancaq müzakirə ediləcək proqramın ilkin düzəldilməsi üçün administrator hüquqları olan bir hesabdan istifadə etdim.

II. Proqram

Beləliklə, problem bəyanatı: istifadəçinin icazəsi ilə kölgə duyğusuna qoşulmaq üçün sadə qrafik interfeys yaratmaq, istifadəçiyə mesaj göndərmək. Seçilmiş proqramlaşdırma mühiti Lazarusdur.

1. Biz administratordan və ya yenidən konsol vasitəsilə “login” - “tam ad” istifadəçilərinin tam domen siyahısını əldə edirik:

wmic useraccount get Name,FullName 

heç kim bunu qadağan etmir:

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

Dərhal deyəcəyəm ki, bu faylı emal etməkdə problem olan Lazarus idi, çünki standart olaraq kodlaması UCS-2-dir, ona görə də onu adi UTF-8-ə əl ilə çevirməli oldum. Fayl strukturunda çoxlu nişanlar, daha doğrusu, proqramlı şəkildə işləməyə qərar verilən çoxlu boşluqlar var; gec-tez kodlaşdırma problemi həll olunacaq və fayl proqramlı şəkildə yenilənəcək.

Beləliklə, ideya proqramın istifadəçiləri üçün əlçatan olan bir qovluğa sahib olmaqdır, məsələn c:test, orada 2 fayl olacaq: birincisi login və tam adı ilə, ikincisi id_rdp və istifadəçilərin girişi ilə. Sonra, bu məlumatları bacardığımız qədər emal edirik :).

Bu vaxt, sessiyaların siyahısı ilə əlaqələndirmək üçün bu (giriş və tam ad) məzmunu bir sıraya köçürürük:

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;

“Çox kod” üçün üzr istəyirəm, aşağıdakı məqamlar daha qısa olacaq.

2. Əvvəlki abzasdakı eyni üsuldan istifadə edərək, siyahının StringGrid elementinə işlənməsinin nəticəsini oxuyuruq, mən isə “əhəmiyyətli” kod parçası verəcəyəm:

2.1 RDP seanslarının cari siyahısını bir faylda alırıq:

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 Faylı emal edin (yalnız əhəmiyyətli kod sətirləri göstərilir):

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. İstifadəçi və onun sessiya nömrəsi ilə xəttə klikləməklə birbaşa əlaqənin özü:

  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 düyməsinə klikləməklə çeşidləmə və istifadəçiyə və ya bütün istifadəçilərə mesajlar kimi bir neçə daha bəzək hazırlanıb.

WinServer 2012R2-də qeyri-inzibatçının RDP istifadəçi seanslarına insan kölgəsi qoşulması üçün yardım proqramı

→ Tam mənbə kodu görünə bilər burada

III. AdminLink-dən istifadə - gördüklərim:

AdminLink yardım proqramının yerinə istinad edən qısayol yaradır admilaunch.exe, və işə salma yardım proqramının şəxsi surəti AdmiRun.Exe istifadəçinin qovluğunda olan, məsələn vasya, növü C: İstifadəçilər WINDOWS. Ümumiyyətlə, hər şey o qədər də pis deyil: öz administrator vicdanınızı təmizləmək üçün qısa yol faylına və başqalarına giriş hüquqları ilə oynaya bilərsiniz.

Mənbə: www.habr.com

Добавить комментарий