Problémom počas karanténneho obdobia podniku sa stal nasledujúci: je skutočne potrebné minimalizovať počet návštev kancelárií špecialistov, ktorí obsluhujú a konzultujú aplikačný softvér, a úprimne povedané, používatelia často zneužívajú pomoc špecialistov bez toho, aby sa chceli ponoriť do samotný problém, hovoria „prídu – pomôžu – urobia to, ale ja budem fajčiť/piť kávu atď.“ Telefonická konzultácia pri zdieľaní servera je efektívnejšia, ak si prezeráte vzdialenú obrazovku.
Po „vynáleze“ nášho bicykla sa objavili rozumné informácie k téme článku:
Všetky nižšie uvedené informácie sú určené pre tých, ktorí normálne toleruje abnormálne zvrátenosti na získanie požadovaného výsledku, vymýšľanie nepotrebných metód.
Aby som „neťahal mačku za chvost“, začnem tým posledným: bicykel funguje pre bežného užívateľa pomocou utility
I. Konzolový a tieňový RDP.
Od používania s administrátorské práva konzoly Server Manager -> QuickSessionCollection -> kliknutím na reláciu používateľa, o ktorú máte záujem, výberom položky Shadow z kontextovej ponuky pre personál, ktorý bude poučovať o používaní softvéru, nie je možné, zvažovala sa iná „drevená“ metóda, a to:
1. Zistite ID RDP relácie:
query user | findstr Administrator
alebo:
qwinsta | findstr Administrator
Navyše"| findstr správca„Bolo to pohodlné, len keď ste vedeli, čo presne správca potrebujete, alebo použite iba prvú časť, aby ste videli všetkých prihlásených na server.
2. Pripojte sa k tejto relácii za predpokladu, že v doméne skupinové politiky Je vybratá možnosť „Nastaviť pravidlá vzdialeného ovládania pre používateľské relácie služieb vzdialenej pracovnej plochy“ a vybratá aspoň možnosť „Monitorovať reláciu s povolením používateľa“ (
mstsc /shadow:127
Upozorňujeme, že zoznam bude obsahovať iba prihlásenia používateľov.
Opakujem, že bez práv správcu získate nasledovné:
Ale na predbežné ladenie programu, o ktorom sa bude diskutovať, som použil účet s právami správcu.
II. Program
Takže vyhlásenie o probléme: vytvorenie nejakého jednoduchého grafického rozhrania na pripojenie k tieňovému zmyslu používateľa s jeho povolením a odoslanie správy používateľovi. Zvoleným programovacím prostredím je Lazarus.
1. Úplný zoznam domén používateľov „login“ – „celé meno“ dostaneme od administrátora alebo znova cez konzolu:
wmic useraccount get Name,FullName
ani toto nikto nezakazuje:
wmic useraccount get Name,FullName > c:testusername.txt
Hneď poviem, že problém so spracovaním tohto súboru mal práve Lazarus, keďže štandardne je jeho kódovanie UCS-2, takže som ho musel ručne previesť na bežné UTF-8. V štruktúre súborov je veľa záložiek, alebo skôr veľa medzier, ktoré bolo rozhodnuté spracovať programovo, skôr či neskôr sa problém s kódovaním vyrieši a súbor sa programovo aktualizuje.
Ide teda o to, aby bol priečinok prístupný používateľom programu, napríklad c:test, v ktorom budú 2 súbory: prvý s prihlasovacím menom a celým menom, druhý s id_rdp a prihlásením používateľov. Ďalej tieto údaje spracovávame najlepšie ako vieme :).
Medzitým, aby sme sa priradili k zoznamu relácií, prenesieme tento obsah (prihlasovacie meno a celé meno) do poľa:
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;
Ospravedlňujem sa za „veľa kódu“, nasledujúce body budú stručnejšie.
2. Rovnakým spôsobom z predchádzajúceho odseku prečítame výsledok spracovania zoznamu do prvku StringGrid, pričom uvediem „významný“ kúsok kódu:
2.1 Dostávame aktuálny zoznam relácií RDP v súbore:
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 Spracujte súbor (uvedené sú len významné riadky kódu):
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. Samotné priame pripojenie kliknutím na riadok s používateľom a jeho číslom relácie:
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. Urobilo sa niekoľko ďalších dekorácií, ako je triedenie kliknutím na prepínač a správy pre používateľa alebo všetkých používateľov.
→ Môžete vidieť úplný zdrojový kód
III. Používanie AdminLink – čo som videl:
AdminLink generuje skratku, ktorá odkazuje na umiestnenie pomôcky admilaunch.exea osobnú kópiu spúšťacieho nástroja AdmiRun.Exe ktorý sa nachádza napríklad v priečinku používateľa Vasya, typ C: Používatelia používajú WINDOWS. Vo všeobecnosti nie je všetko také zlé: môžete sa pohrať s prístupovými právami k súboru skratiek a iným, aby ste si vyčistili svedomie správcu.
Zdroj: hab.com