Problémem v době karantény podniku se stal následující: je skutečně nutné minimalizovat počet návštěv kanceláří specialistů, kteří obsluhují a konzultují aplikační software, a upřímně řečeno, uživatelé často zneužívají pomoc specialistů, aniž by se chtěli ponořit do samotný problém, říkají „přijdou – pomůžou – udělají to, ale já budu kouřit/pít kávu atd.“ Telefonická konzultace při sdílení serveru je efektivnější, pokud se díváte na vzdálenou obrazovku.
Po „vynálezu“ našeho kola se objevily rozumné informace na téma článku:
Všechny níže uvedené informace jsou určeny těm, kteří normálně toleruje abnormální zvrácenosti k dosažení požadovaného výsledku, vymýšlení zbytečných metod.
Abych „netahal kočku za ocas“, začnu tím posledním: kolo funguje pro běžného uživatele pomocí utility
I. Konzolový a stínový RDP.
Od použití s administrátorská práva konzoly Správce serveru -> QuickSessionCollection -> kliknutím na relaci uživatele, který vás zajímá, výběrem možnosti Shadow z kontextové nabídky pro personál poučující, jak software používat, není možnost, byla zvažována jiná „dřevěná“ metoda, a to:
1. Zjistěte ID RDP relace:
query user | findstr Administrator
nebo:
qwinsta | findstr Administrator
Navíc "| findstr správce„Bylo to pohodlné, jen když jste věděli, co přesně Správce potřebujete, nebo použijte pouze první část, abyste viděli všechny přihlášené k serveru.
2. Připojte se k této relaci za předpokladu, že v doméně skupinové zásady Je vybrána možnost „Nastavit pravidla vzdáleného řízení pro uživatelské relace služby Vzdálená plocha“ s vybranou alespoň možností „Monitorovat relaci s oprávněním uživatele“ (
mstsc /shadow:127
Upozorňujeme, že seznam bude obsahovat pouze přihlášení uživatelů.
Opakuji, že bez práv správce získáte následující:
Ale pro předběžné ladění programu, o kterém bude řeč, jsem použil účet s právy správce.
II. Program
Takže prohlášení o problému: vytvoření nějakého jednoduchého grafického rozhraní pro připojení ke stínovému smyslu uživatele s jeho svolením a odeslání zprávy uživateli. Zvoleným programovacím prostředím je Lazarus.
1. Úplný seznam domén uživatelů „přihlašovací“ – „celé jméno“ získáme od administrátora nebo znovu přes konzoli:
wmic useraccount get Name,FullName
ani tohle nikdo nezakazuje:
wmic useraccount get Name,FullName > c:testusername.txt
Hned řeknu, že to byl Lazarus, kdo měl problém se zpracováním tohoto souboru, protože jeho kódování je standardně UCS-2, takže jsem ho musel ručně převést na běžné UTF-8. Ve struktuře souborů je spousta záložek, respektive mnoho mezer, které bylo rozhodnuto zpracovat programově, dříve nebo později bude problém s kódováním vyřešen a soubor bude programově aktualizován.
Myšlenka je tedy mít složku přístupnou uživatelům programu, například c:test, ve které budou 2 soubory: první s loginem a celým jménem, druhý s id_rdp a přihlášením uživatelů. Dále tato data zpracováváme, jak nejlépe umíme :).
Mezitím, abychom se přidružili k seznamu relací, přeneseme tento obsah (přihlašovací jméno a celé jméno) do pole:
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;
Omlouvám se za „spoustu kódu“, následující body budou stručnější.
2. Stejnou metodou z předchozího odstavce přečteme výsledek zpracování seznamu do prvku StringGrid, přičemž uvedu „významný“ kus kódu:
2.1 Obdržíme aktuální seznam relací RDP v souboru:
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 Zpracujte soubor (jsou uvedeny pouze významné řádky 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é přímé připojení kliknutím na řádek s uživatelem a jeho číslem relace:
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. Bylo vytvořeno několik dalších dekorací, jako je řazení kliknutím na přepínač a zprávy pro uživatele nebo všechny uživatele.
→ Lze vidět úplný zdrojový kód
III. Použití AdminLink – co jsem viděl:
AdminLink generuje zástupce, který odkazuje na umístění nástroje admilaunch.exea osobní kopii spouštěcího nástroje AdmiRun.Exe který se nachází například ve složce uživatele Vasya, typ C:UsersvasyaWINDOWS. Obecně platí, že ne všechno je tak špatné: můžete si pohrát s přístupovými právy k souboru zástupce a dalšími, abyste si vyčistili svědomí správce.
Zdroj: www.habr.com