Apuohjelma ihmisen varjoyhteydelle ei-järjestelmänvalvojalta RDP-käyttäjäistuntoon WinServer 2012R2:ssa

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.

Apuohjelma ihmisen varjoyhteydelle ei-järjestelmänvalvojalta RDP-käyttäjäistuntoon WinServer 2012R2:ssa

Polkupyörämme "keksinnön" jälkeen artikkelin aiheesta löytyi järkevää tietoa: RDS Shadow – varjoyhteys RDP-käyttäjäistuntoihin Windows Server 2012 R2:ssa tai Etuoikeutettu käyttäjän varjotila Windows-palvelimessa tai RDP-istuntojen hallinnan delegointi. Kaikkiin niihin liittyy konsolin käyttö, jopa yksinkertaisen dialogin elementtien kanssa.

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 AdmiLink, josta kiitos sen kirjoittajalle.

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.

Apuohjelma ihmisen varjoyhteydelle ei-järjestelmänvalvojalta RDP-käyttäjäistuntoon WinServer 2012R2:ssa

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 (lisää):

mstsc /shadow:127

Huomaa, että luettelo sisältää vain käyttäjätunnukset.

Toistan, että ilman järjestelmänvalvojan oikeuksia saat seuraavat:

Apuohjelma ihmisen varjoyhteydelle ei-järjestelmänvalvojalta RDP-käyttäjäistuntoon WinServer 2012R2:ssa

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.

Apuohjelma ihmisen varjoyhteydelle ei-järjestelmänvalvojalta RDP-käyttäjäistuntoon WinServer 2012R2:ssa

→ Täysi lähdekoodi näkyy täällä

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

Lisää kommentti