Yrityksen karanteeniaikana ongelmaksi muodostui seuraava: sovellusohjelmistoja huoltavien ja konsultoivien asiantuntijoiden toimistokäyntejä on todellakin tarpeen minimoida, ja suoraan sanottuna käyttäjät käyttävät usein väärin asiantuntijoiden apua haluamatta syventyä. itse ongelma, he sanovat "he tulevat - he auttavat - he tekevät sen, mutta minä poltan / juon kahvia jne." Puhelinneuvonta palvelimen jakamisessa on tehokkaampaa, jos katsot etäruutua.
Polkupyörämme "keksinnön" jälkeen artikkelin aiheesta löytyi järkevää tietoa:
Kaikki alla olevat tiedot on tarkoitettu niille, jotka sietää normaalisti epänormaaleja perversioita halutun tuloksen saavuttamiseksi keksimällä tarpeettomia menetelmiä.
Jotta en "vetäisi kissaa pyrstöstä", aloitan viimeisestä: pyörä toimii tavalliselle käyttäjälle apuohjelmalla
I. Konsoli ja varjo RDP.
Käytöstä lähtien Server Manager -konsolin järjestelmänvalvojan oikeudet -> QuickSessionCollection -> napsauttamalla kiinnostavan käyttäjän istuntoa ja valitsemalla pikavalikosta Shadow henkilöstölle, joka opastaa ohjelmiston käyttöä, ei ole vaihtoehto, harkittiin toista "puista" menetelmää, nimittäin:
1. Selvitä istunnon RDP-tunnus:
query user | findstr Administrator
tai:
qwinsta | findstr Administrator
Lisäksi"| findstr Järjestelmänvalvoja"Se oli kätevää vain, kun tiesi mitä tarkalleen ylläpitäjä tarvitset tai käytä vain ensimmäistä osaa nähdäksesi kaikki palvelimelle kirjautuneet.
2. Muodosta yhteys tähän istuntoon, jos se on toimialueella ryhmäkäytännöt "Aseta etäohjaussäännöt etätyöpöytäpalveluiden käyttäjäistunnoille" -vaihtoehto on valittu, kun vähintään "Valvo istuntoa käyttäjän luvalla" on valittuna (
mstsc /shadow:127
Huomaa, että luettelo sisältää vain käyttäjätunnukset.
Toistan, että ilman järjestelmänvalvojan oikeuksia saat seuraavat:
Mutta käsiteltävän ohjelman alustavaan virheenkorjaukseen käytin tiliä, jolla on järjestelmänvalvojan oikeudet.
II. Ohjelmoida
Joten ongelman selvitys: luodaan jokin yksinkertainen graafinen käyttöliittymä, joka muodostaa yhteyden käyttäjän varjoaistiin hänen luvalla, viestin lähettäminen käyttäjälle. Ohjelmointiympäristöksi valittu Lazarus.
1. Saamme täydellisen verkkotunnusluettelon käyttäjistä "kirjautuminen" - "koko nimi" järjestelmänvalvojalta tai uudelleen konsolin kautta:
wmic useraccount get Name,FullName
kukaan ei kiellä tätäkään:
wmic useraccount get Name,FullName > c:testusername.txt
Sanon heti, että Lazaruksella oli ongelma tämän tiedoston käsittelyssä, koska oletuksena sen koodaus on UCS-2, joten minun piti vain muuntaa se manuaalisesti tavalliseksi UTF-8:ksi. Tiedostorakenteessa on paljon välilehtiä, tai pikemminkin paljon välilyöntejä, jotka päätettiin käsitellä ohjelmallisesti, ennemmin tai myöhemmin koodausongelma ratkeaa ja tiedosto päivitetään ohjelmallisesti.
Ajatuksena on siis olla ohjelman käyttäjien käytettävissä oleva kansio, esimerkiksi c:test, jossa on 2 tiedostoa: ensimmäisessä kirjautumistunnuksella ja koko nimellä, toisessa id_rdp:llä ja käyttäjien sisäänkirjautumisilla. Seuraavaksi käsittelemme näitä tietoja parhaamme mukaan :).
Sillä välin siirrämme tämän sisällön (kirjautumistunnus ja koko nimi) taulukkoon liittääksemme istuntoluetteloon:
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;
Pyydän anteeksi "paljon koodia", seuraavat kohdat ovat tiiviimpiä.
2. Käyttämällä samaa menetelmää edellisestä kappaleesta, luemme listan käsittelyn tuloksen StringGrid-elementtiin, kun annan "merkittävän" koodinpätkän:
2.1 Saamme nykyisen luettelon RDP-istunnoista tiedostona:
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 Käsittele tiedosto (vain merkittävät koodirivit näytetään):
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. Suora yhteys itse napsauttamalla riviä, jossa on käyttäjä ja hänen istuntonumeronsa:
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. Pari koristelua on tehty lisää, kuten lajittelu valintanappia painamalla ja viestit käyttäjälle tai kaikille käyttäjille.
→ Täysi lähdekoodi näkyy
III. AdminLinkin käyttäminen - mitä näin:
AdminLink luo pikakuvakkeen, joka viittaa apuohjelman sijaintiin admilaunch.exeja henkilökohtainen kopio käynnistysapuohjelmasta AdmiRun.Exe joka sijaitsee esimerkiksi käyttäjän kansiossa Vasja, tyyppi C:UsersvasyaWINDOWS. Yleensä kaikki ei ole niin huonosti: voit leikkiä pikakuvaketiedoston ja muiden käyttöoikeuksilla tyhjentääksesi oman järjestelmänvalvojan omantunnon.
Lähde: will.com