Кәсіпорынның карантиндік кезеңіндегі мәселе келесідей болды: қолданбалы бағдарламалық қамтамасыз ету бойынша қызмет көрсететін және кеңес беретін мамандардың кеңселерге бару санын барынша азайту керек, ал шынын айтқанда, пайдаланушылар мамандардың көмегіне жиі жүгінгісі келмей, теріс пайдаланады. мәселенің өзінде олар «олар келеді - олар көмектеседі - олар мұны істейді, бірақ мен темекі шегемін/кофе ішемін және т.б.» дейді. Серверді ортақ пайдалану кезінде телефон арқылы кеңес алу қашықтағы экранды қарасаңыз тиімдірек болады.
Біздің велосипедтің «өнертабысы» болғаннан кейін мақаланың тақырыбы бойынша дұрыс ақпарат пайда болды:
Төмендегі барлық ақпарат кімге арналған әдеттен тыс бұзылуларға шыдайды қажет емес әдістерді ойлап тауып, қажетті нәтижеге қол жеткізу.
«Мысықты құйрығынан тартпау» үшін мен соңғысынан бастайын: велосипед утилитаны пайдаланатын қарапайым пайдаланушы үшін жұмыс істейді.
I. Консоль және көлеңкелі RDP.
бірге қолданғаннан бері Server Manager консолінің әкімші құқықтары -> QuickSessionCollection -> қызықты пайдаланушының сеансын басу арқылы контекстік мәзірден Көлеңке параметрін таңдаңыз. бағдарламалық құралды пайдалануды нұсқайтын персоналға арналған, опция емес, басқа «ағаш» әдісі қарастырылды, атап айтқанда:
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
Мен бірден айтамын, бұл файлды өңдеуде Лазарус болды, өйткені әдепкі бойынша оның кодтауы 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 ол, мысалы, пайдаланушы қалтасында орналасқан vasya, түрі C: Пайдаланушылар WINDOWS. Жалпы алғанда, бәрі соншалықты жаман емес: сіз өзіңіздің әкімші ар-ұжданыңызды тазарту үшін төте жол файлына және басқаларға кіру құқықтарымен ойнай аласыз.
Ақпарат көзі: www.habr.com