Аж ахуйн нэгжийн хорио цээрийн үеийн асуудал нь дараах байдалтай байв: хэрэглээний програм хангамжийн талаар үйлчилгээ үзүүлж, зөвлөгөө өгдөг мэргэжилтнүүдийн оффис руу очих тоог багасгах нь үнэхээр чухал бөгөөд ний нуугүй хэлэхэд хэрэглэгчид нарийн ширийн зүйлийг судлах хүсэлгүйгээр мэргэжилтнүүдийн тусламжийг урвуулан ашигладаг. Асуудал нь өөрөө "тэд ирнэ - тэд туслах болно - тэд үүнийг хийх болно, гэхдээ би тамхи татах/кофе уух гэх мэт" гэж хэлдэг. Хэрэв та алсын дэлгэцийг харвал сервер хуваалцах үед утсаар зөвлөгөө өгөх нь илүү үр дүнтэй байдаг.
Манай унадаг дугуйг "шинэ бүтээсний" дараа нийтлэлийн сэдвийн талаархи эрүүл ухаантай мэдээлэл гарч ирэв.
Доорх бүх мэдээлэл нь хүмүүст зориулагдсан болно хэвийн бус гажуудлыг хэвийн хэмжээнд тэсвэрлэдэг шаардлагагүй аргуудыг зохион бүтээж, хүссэн үр дүндээ хүрэх.
"Муурыг сүүлнээс нь татахгүйн тулд" би сүүлчийнхээс эхэлье: унадаг дугуй нь энгийн хэрэглэгчдэд зориулагдсан.
I. Консол ба сүүдэр RDP.
-тай хамт хэрэглэснээс хойш Server Manager консолын администраторын эрх -> QuickSessionCollection -> сонирхсон хэрэглэгчийн сесс дээр дарж контекст цэснээс Shadow-г сонгоно. програм хангамжийг хэрхэн ашиглах талаар зааварчилгаа өгч буй ажилтнуудад зориулсан, сонголт биш, өөр "модон" аргыг авч үзсэн, тухайлбал:
1. Сеансын RDP id-г олоорой:
query user | findstr Administrator
эсвэл:
qwinsta | findstr Administrator
Дээрээс нь "| findstr Администратор"Чи яг юу болохыг мэдсэн үед л тохиромжтой байсан Администратор Танд хэрэгтэй, эсвэл хүн бүр серверт нэвтэрсэн эсэхийг харахын тулд зөвхөн эхний хэсгийг ашиглана уу.
2. Домэйн дотор байгаа тохиолдолд энэ сессэд холбогдоно уу бүлгийн бодлого "Алсын ширээний үйлчилгээний хэрэглэгчийн сессийн алсын удирдлагын дүрмийг тохируулах" сонголтыг дор хаяж "Хэрэглэгчийн зөвшөөрөлтэй сессийг хянах" сонголтыг сонгосон (
mstsc /shadow:127
Жагсаалт нь зөвхөн хэрэглэгчийн нэвтрэх мэдээллийг агуулна гэдгийг анхаарна уу.
Админ эрхгүйгээр та дараах зүйлийг авах болно гэдгийг би давтан хэлье.
Гэхдээ хэлэлцэх програмыг урьдчилан дибаг хийхийн тулд би администраторын эрхтэй данс ашигласан.
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. Радио товчлуур дээр дарж эрэмбэлэх, хэрэглэгч эсвэл бүх хэрэглэгчдэд илгээх мессеж зэрэг хэд хэдэн чимэглэлийг нэмж хийсэн.
→ Бүрэн эх кодыг харж болно
III. AdminLink ашиглах - миний харсан зүйл:
AdminLink нь хэрэгслийн байршлыг заадаг товчлол үүсгэдэг admilaunch.exe, болон эхлүүлэх хэрэгслийн хувийн хуулбар AdmiRun.Exe жишээлбэл, хэрэглэгчийн хавтсанд байдаг вася, төрөл C: Хэрэглэгчид WINDOWS. Ерөнхийдөө бүх зүйл тийм ч муу биш юм: та өөрийн админ ухамсрыг цэвэрлэхийн тулд товчлолын файл болон бусад хүмүүст хандах эрхээр тоглож болно.
Эх сурвалж: www.habr.com