مشکل در طول دوره قرنطینه این شرکت به شرح زیر است: واقعاً لازم است تعداد بازدید از دفاتر توسط متخصصانی که در زمینه نرم افزارهای کاربردی خدمات و مشاوره می دهند به حداقل برسد و صادقانه بگوییم، کاربران اغلب بدون اینکه بخواهند در این زمینه تحقیق کنند از کمک متخصصان سوء استفاده می کنند. خود مسئله، آنها می گویند "آنها می آیند - کمک می کنند - آنها این کار را می کنند، اما من سیگار می کشم / قهوه می خورم و غیره." مشاوره تلفنی هنگام اشتراک گذاری سرور در صورت مشاهده صفحه از راه دور مؤثرتر است.
پس از "اختراع" دوچرخه ما، اطلاعات منطقی در مورد موضوع مقاله به دست آمد:
تمام اطلاعات زیر برای کسانی است که انحرافات غیر طبیعی را به طور معمول تحمل می کند برای به دست آوردن نتیجه مطلوب، روش های غیر ضروری را ابداع کرد.
برای اینکه "گربه را از دم نکشم"، با آخرین مورد شروع می کنم: دوچرخه برای کاربر معمولی با استفاده از ابزار کار می کند.
I. کنسول و سایه RDP.
از آنجایی که استفاده با حقوق سرپرست کنسول مدیر سرور -> QuickSessionCollection -> با کلیک بر روی جلسه کاربر مورد نظر، انتخاب Shadow از منوی زمینه برای پرسنلی که نحوه استفاده از نرم افزار را آموزش می دهند، یک گزینه نیست، روش "چوبی" دیگری در نظر گرفته شد، یعنی:
1. شناسه RDP جلسه را بیابید:
query user | findstr Administrator
یا:
qwinsta | findstr Administrator
علاوه بر این "| مدیر findstr«فقط زمانی راحت بود که میدانستی دقیقاً چیست مدیر شما نیاز دارید، یا فقط از قسمت اول استفاده کنید تا همه افراد وارد شده به سرور را ببینید.
2. به این جلسه متصل شوید، مشروط بر اینکه در دامنه سیاست های گروه گزینه "تنظیم قوانین کنترل از راه دور برای جلسات کاربر از خدمات دسکتاپ از راه دور" با حداقل گزینه "مانیتور جلسه با مجوز کاربر" انتخاب شده است (
mstsc /shadow:127
لطفاً توجه داشته باشید که لیست فقط شامل ورود کاربران خواهد بود.
تکرار می کنم که بدون حقوق ادمین موارد زیر را دریافت خواهید کرد:
اما برای اشکال زدایی اولیه برنامه که مورد بحث قرار خواهد گرفت، از یک حساب کاربری با حقوق مدیر استفاده کردم.
II. برنامه
بنابراین بیان مشکل: ایجاد یک رابط گرافیکی ساده برای اتصال به حس سایه کاربر با اجازه او، ارسال پیام به کاربر. محیط برنامه نویسی انتخاب شده Lazarus است.
1. لیست دامنه کامل کاربران "ورود به سیستم" - "نام کامل" را از مدیر یا دوباره از طریق کنسول دریافت می کنیم:
wmic useraccount get Name,FullName
هیچ کس حتی این را منع نمی کند:
wmic useraccount get Name,FullName > c:testusername.txt
من فوراً می گویم که Lazarus بود که با پردازش این فایل مشکل داشت ، زیرا به طور پیش فرض رمزگذاری آن UCS-2 است ، بنابراین من فقط مجبور شدم آن را به صورت دستی به UTF-8 معمولی تبدیل کنم. تعداد زیادی تب در ساختار فایل یا بهتر است بگوییم فضاهای زیادی وجود دارد که تصمیم گرفته شد آنها را به صورت برنامه ای پردازش کنیم؛ دیر یا زود مشکل رمزگذاری حل می شود و فایل به صورت برنامه ای به روز می شود.
بنابراین، ایده این است که یک پوشه در دسترس کاربران برنامه داشته باشیم، به عنوان مثال c:test، که در آن 2 فایل وجود داشته باشد: اولی با login و نام کامل، دومی با 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. چند تزیین دیگر مانند مرتب سازی با کلیک بر روی دکمه رادیویی و پیام هایی به کاربر یا همه کاربران ساخته شده است.
→ کد منبع کامل قابل مشاهده است
III. با استفاده از AdminLink - آنچه من دیدم:
AdminLink میانبری ایجاد می کند که به مکان ابزار اشاره می کند admilaunch.exeو یک کپی شخصی از ابزار راه اندازی AdmiRun.Exe که به عنوان مثال در پوشه کاربر قرار دارد وایا، نوع ج: کاربران ویندوز. به طور کلی، همه چیز خیلی بد نیست: شما می توانید با حقوق دسترسی به فایل میانبر و دیگران بازی کنید تا وجدان مدیریت خود را پاک کنید.
منبع: www.habr.com