ఎంటర్ప్రైజ్ యొక్క నిర్బంధ వ్యవధిలో సమస్య ఈ క్రింది విధంగా మారింది: అప్లికేషన్ సాఫ్ట్వేర్పై సర్వీసింగ్ మరియు కన్సల్టింగ్ నిపుణులు కార్యాలయాల సందర్శనల సంఖ్యను తగ్గించడం నిజంగా అవసరం, మరియు స్పష్టంగా చెప్పాలంటే, వినియోగదారులు తరచుగా లోతుగా ఆలోచించకుండా నిపుణుల సహాయాన్ని దుర్వినియోగం చేస్తారు. సమస్య కూడా, వారు "వారు వస్తారు - వారు సహాయం చేస్తారు - వారు చేస్తారు, కానీ నేను పొగ త్రాగుతాను / కాఫీ తాగుతాను, మొదలైనవి." మీరు రిమోట్ స్క్రీన్ను వీక్షిస్తే సర్వర్ను భాగస్వామ్యం చేసేటప్పుడు టెలిఫోన్ సంప్రదింపులు మరింత ప్రభావవంతంగా ఉంటాయి.
మా సైకిల్ యొక్క "ఆవిష్కరణ" తర్వాత, వ్యాసం యొక్క అంశంపై సేన్ సమాచారం మారింది:
దిగువన ఉన్న సమాచారం అంతా వారి కోసం ఉద్దేశించబడింది అసాధారణమైన వక్రీకరణలను సాధారణంగా తట్టుకుంటుంది ఆశించిన ఫలితాన్ని పొందడానికి, అనవసరమైన పద్ధతులను కనిపెట్టడం.
“పిల్లిని తోకతో లాగకుండా”, నేను చివరిదానితో ప్రారంభిస్తాను: బైక్ యుటిలిటీని ఉపయోగించే సగటు వినియోగదారు కోసం పని చేస్తుంది
I. కన్సోల్ మరియు షాడో RDP.
తో ఉపయోగించడం నుండి సర్వర్ మేనేజర్ కన్సోల్ యొక్క నిర్వాహక హక్కులు -> QuickSessionCollection -> ఆసక్తి ఉన్న వినియోగదారు సెషన్పై క్లిక్ చేయడం ద్వారా, సందర్భ మెను నుండి షాడోని ఎంచుకోవడం ద్వారా సాఫ్ట్వేర్ను ఎలా ఉపయోగించాలో సూచించే సిబ్బంది కోసం, ఒక ఎంపిక కాదు, మరొక "చెక్క" పద్ధతి పరిగణించబడింది, అవి:
1. సెషన్ యొక్క RDP idని కనుగొనండి:
query user | findstr Administrator
లేదా:
qwinsta | findstr Administrator
అంతేకాకుండా "| findstr నిర్వాహకుడు"మీకు సరిగ్గా తెలిసినప్పుడు మాత్రమే ఇది సౌకర్యవంతంగా ఉంటుంది అడ్మినిస్ట్రేటర్ సర్వర్కి లాగిన్ అయిన ప్రతి ఒక్కరినీ చూడటానికి మీకు అవసరం లేదా మొదటి భాగాన్ని మాత్రమే ఉపయోగించండి.
2. డొమైన్లో అందించిన ఈ సెషన్కు కనెక్ట్ చేయండి సమూహ విధానాలు "రిమోట్ డెస్క్టాప్ సేవల యొక్క వినియోగదారు సెషన్ల కోసం రిమోట్ కంట్రోల్ నియమాలను సెటప్ చేయండి" ఎంపిక కనీసం "వినియోగదారు అనుమతితో మానిటర్ సెషన్" ఎంపికతో ఎంపిక చేయబడింది (
mstsc /shadow:127
జాబితా వినియోగదారు లాగిన్లను మాత్రమే కలిగి ఉంటుందని దయచేసి గమనించండి.
నిర్వాహక హక్కులు లేకుండా మీరు ఈ క్రింది వాటిని పొందుతారని నేను పునరావృతం చేస్తున్నాను:
కానీ చర్చించబడే ప్రోగ్రామ్ యొక్క ప్రాథమిక డీబగ్గింగ్ కోసం, నేను నిర్వాహక హక్కులతో కూడిన ఖాతాను ఉపయోగించాను.
II. కార్యక్రమం
కాబట్టి సమస్య ప్రకటన: వినియోగదారు యొక్క షాడో సెన్స్కి అతని అనుమతితో కనెక్ట్ చేయడానికి కొన్ని సాధారణ గ్రాఫికల్ ఇంటర్ఫేస్ను సృష్టించడం, వినియోగదారుకు సందేశాన్ని పంపడం. ఎంచుకున్న ప్రోగ్రామింగ్ వాతావరణం లాజరస్.
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. మునుపటి పేరా నుండి అదే పద్ధతిని ఉపయోగించి, మేము జాబితాను స్ట్రింగ్గ్రిడ్ మూలకంలోకి ప్రాసెస్ చేసిన ఫలితాన్ని చదువుతాము, అయితే నేను "ముఖ్యమైన" కోడ్ ముక్కను ఇస్తాను:
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, రకం సి:యూజర్వాస్యా విండోస్. సాధారణంగా, ప్రతిదీ చాలా చెడ్డది కాదు: మీరు మీ స్వంత అడ్మిన్ మనస్సాక్షిని క్లియర్ చేయడానికి షార్ట్కట్ ఫైల్ మరియు ఇతరులకు యాక్సెస్ హక్కులతో ఆడుకోవచ్చు.
మూలం: www.habr.com