Conectarea resurselor de rețea în modul automat

Conectarea resurselor de rețea în modul automat

Alegerea limbajului de programare

Notă: script-urile pe care le-ați creat mai devreme în VBScript, Jscript pot fi ușor rescrise sub KIXtart. Toate exemplele din acest articol vor fi în limba KIXTart.







Sursa de informații este un fișier sau o bază de date?

Pentru a conecta cu succes o resursă de rețea, utilizatorul trebuie să cunoască numele unității de rețea cu care va fi asociată resursa și calea UNC a resursei atașate la rețea. Este recomandabil ca descrierea sa să corecteze numele discului în dosarul "My Computer". Există o întrebare logică - unde este mai bine să stocați aceste informații? Este posibil într-un fișier text situat în directorul Netlogon sau într-un anumit depozit, de exemplu, în Active Directory (în continuare AD). Am folosit ambele opțiuni și, în cele din urmă, alegerea a căzut asupra lui AD. Au fost destul de puține motive pentru a muta datele dintr-un fișier text în AD, de exemplu, ușurința de întreținere, reducerea codului etc.

Principiul funcționării scenariului

Pentru a stoca informații în AD despre resursele conectate, a fost utilizat un obiect standard SharedFolder, care a inclus informații despre litera la care este conectată resursa de rețea; Calea UNC către resursa de rețea; descrierea resursei de rețea, care apare în directorul "My Computer"; Numele grupului de securitate al cărui membri va fi conectat resursa.

Să descriem mecanismul de conectare a uneia dintre resursele de rețea, pe un exemplu de director general al diviziei "Otdel1". Lăsați dosarul are următoarea cale de rețea - «EsmiraldaWork $ Otdel1», conectat la unitatea „K“ și o descriere a „Serviciul Files“ (a se vedea figura 1 ..). În AD, în orice OU, de exemplu "Partajări", creați obiectul "Partajare folder" (a se vedea Figura 2). În orice altă unitate, creați grupuri de securitate ale căror nume se potrivesc cu adresa URL a resurselor de rețea după ultimul "punct". În exemplul de mai sus, grupul care corespunde discului montat ar trebui să fie numit "Otdel1". Membrii acestui grup va fi conectat la o resursă de rețea cu condiția ca acesta va fi adăugat la fila de securitate «Otdel1» folderul cu permisiuni corespunzătoare pentru a accesa dosarul. Dacă doriți să faceți mai multe niveluri diferite de acces, puteți utiliza prefixul în numele grupului.

Figura 1. Exemplu de modificare a descrierii unei unități de rețea în dosarul "Computerul meu"

Figura 2. Proprietățile obiectului partajat în Active Directory

Notă: dacă resursa ar trebui să fie disponibilă tuturor utilizatorilor rețelei, trebuie să adăugați un grup de "utilizatori de domeniu" în grupul de resurse corespunzător cu drepturile corespunzătoare.

Script de conectare pentru unitatea de rețea

Scenariul poate fi împărțit condiționat în mai multe părți logice:

  • Identificați lista grupurilor la care aparține utilizatorul curent;
  • conectarea la AD și citirea valorilor câmpurilor corespunzătoare;
  • Deconectați toate discurile din rețea procesate de script;
  • conectați unitățile de rețea necesare;
  • Corectarea descrierii unităților de rețea în dosarul "My Computer".

Determinarea apartenenței la grupurile de securitate relevante

Definiția calității de membru în grupurile de securitate corespunzătoare este implementată utilizând funcția încorporată EnumGroup ():

Până la Len ($ Group) = 0

Lista de grupuri returnată de această funcție (variabila $ Group) are următorul șablon: DOMAINGROUP. Deoarece în grupurile AD sunt stocate fără prefix (în acest caz, prefixul este numele de domeniu scurt), atunci lista de grupuri care rezultă trebuie să fie convertită. Rezultatul este recomandat să fie scris în aceeași variabilă, adică GROUP:

Conectați-vă la AD și citiți valorile câmpurilor corespunzătoare

Conectarea la AD este implementată folosind conexiunea ADODB:

$ strADSQuery = "SELECT cuvinte cheie, nume, descriere, cn, uncname FROM" "+ $ domain_ +" 'WHERE objectClass =' ​​volum '"

$ objConnection.Open ("Active Directory Provider")

Căutarea obiectelor necesare se realizează cu ajutorul interogării SQL. Filtrul specifică ObjectClass = 'volume':

"SELECT uname, cuvinte cheie, descriere, cn FROM" "+ $ domain +" 'WHERE objectClass =' ​​volum '"

unde $ domain este numele domeniului curent, care este determinat prin citirea directorului global RootDSE. Pentru a le citi, drepturile utilizatorului mediu sunt suficiente. Domeniul $ variabil are forma "DC = domain, DC = com":

$ domain = "LDAP: //" + $ rootDSE_.Get ("defaultNamingContext")

Citirea unui câmp corespunzător tipului de date "șir" se face după cum urmează:

Dacă tipul de date este o matrice:

Pentru fiecare $ Val_Element în $ Val_Array

Scriptul utilizează câmpurile, descrierile și tipul de date care sunt listate în Tabelul 1 (a se vedea Figura 2).

Tabelul 1. Descrierea câmpului Obiect partajat

pentru fiecare $ ds din $ dss

utilizați $ ds_s + ":" / delete / persistent

unde variabila $ ds_s conține valoarea câmpului, descriere - litera pe care este montat discul. Datorită acestui mecanism, scriptul gestionează numai acele unități de rețea care sunt utilizate de administratorul de sistem în AD.







Conectarea unităților de rețea necesare

Discurile sunt conectate prin algoritm:

Mai întâi, se determină informațiile necesare pentru conectarea unității de rețea, și anume litera pe care este montat discul (câmpul de descriere); Calea resursei UNC (câmpul UNCName); grup al cărui membri vor fi conectați la resursă (câmpul cn).

Este probabil ca cititorul să aibă o întrebare firească: de ce folosiți câmpul cn, când numele grupului apare în calea resurselor UNC? Citirea câmpului CN este vitală. Faptul este că resursa de rețea poate fi de două tipuri: generală și individuală. Dăm două exemple. În primul caz, directorul de schimb general este conectat, să îl numim "Exchange". Pe baza acestui dosar, care au acces, la numit «Exchange», grupul de securitate corespunzătoare - «schimb» și deoarece include toți utilizatorii din acest grup, atunci un membru al acestui grup este grupul de «Domeniu Utilizatori». În al doilea caz, trebuie să conectăm directorul de domiciliu al fiecărui utilizator. Pentru a face acest lucru, creați un dosar, de exemplu, «HomeDirs» și să creați subfoldere, ID-ul de utilizator corespunzător. Situația sa schimbat - calea de rețea către directorul nu poate fi utilizat, cu toate acestea există câmpul CN - numele resursei, în cazul în care puteți scrie în jos toate informațiile necesare: numele de utilizator și grupul de securitate corespunzătoare (a se vedea figura 2 ..).

Deci, după ce ați determinat cele trei câmpuri obligatorii, aflați dacă utilizatorul aparține resursei corespunzătoare grupului de securitate și, dacă verificarea are succes, continuați să conectați resursa folosind unul dintre cei doi algoritmi. Alegerea algoritmului depinde de prezența logului în valoarea citită a NC.

Discul este conectat folosind comanda de utilizare:

; elementele din matricea $ usergroup_name [] sunt grupuri ale căror utilizatori curent este membru

pentru $ t = 0 până la ubound ($ usergroup_name)

; Criteriul de personalizare este calitatea de membru

; în grupurile listate PersonalGroup1 ... 3

dacă instr (ucase ($ group_b), ucase ("PersonalGroup1")))<>0 sau instr (ucase ($ group_b), ucase ("PersonalGroup2")))<>0 sau instr (ucase ($ group_b), ucase ("PersonalGroup3"))<>0

utilizați $ ds_s + ":" $ uncname

dacă @ eroare = 5; eroare de acces la resursă

$ Error_message = $ error_message + "nu a reușit să se conecteze unitatea" + $ ds_s + "resursă" + $ cn + CHR (13)

utilizați $ ds_s + ":" $ uncname

dacă @ eroare = 5; eroare de acces la resursă

$ error_message = $ error_message + "Nu am putut monta + $ ds_s +" unitate la resursă "+ $ cn + chr (13)

Corectarea descrierilor discurilor din directorul "My Computer"

Mecanismul de redenumire a unităților de rețea din folderul My Computer este cel mai bine executat după procesul de conectare a unităților de rețea în sine. Cititorul poate avea o întrebare naturală: "De ce este absolut necesar?". Există mai multe motive. Iată câteva dintre ele: imaginați-vă că aveți o lungă cale de rețea - literele de unitate nu sunt vizibile. Sunt de acord că este incomod. În al doilea rând, în anumite situații, utilizatorul nu are nevoie să știe unde este localizată resursa. În al treilea rând, permiteți utilizatorului să citească căi non-UNC pe discuri, dar numele lor obișnuite: "Fișierele mele unitate" sau "Proiectele mele". Imediat îi devine clar ce înseamnă discul. Crede-mă, nu toți utilizatorii corespund termenului "utilizator experimentat". Acest lucru se datorează faptului că conexiunea pe disc necesită timp, care depinde de locația stației de lucru, de încărcarea serverului și de alți factori. Nu este posibil să se calculeze exact acest lucru, deci pentru a accelera scriptul, este mai bine să împărțiți blocurile de conectare pe disc și să modificați descrierea utilizând funcția de întârziere. Funcția se bazează pe un interval de timp de calcul, folosind noi @Ticks macro, care returnează numărul de milisecunde, deoarece boot determinat diferența de fus orar - în timpul intervalul de timp menționat, întârzieri, se efectuează de bucla:

$ Q = @Ticks + $ delay_size * 1000; x este numărul de secunde de întârziere

Până la @Ticks> = $ Q

Luați în considerare fiecare mecanism pentru conectarea unităților de rețea separat. Să începem cu Windows XP, pentru că acolo este cel mai clar și simplu.

Redenumirea descrierilor unităților de rețea pentru Windows XP

mount drive-uri punct de rețea sunt organizate în felul următor: în HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerMountPoints2 de subdosar pentru unitățile de rețea sunt subsecțiuni cu nume, care sunt organizate în conformitate cu principiul: „## numele serverului # numele directorului partajat la care podpapka1 # #. # subfolderX ". In fiecare dintre aceste subfoldere sunt 3 parametri obligatorii, a patra - _LabelFromReg are nevoie, de asemenea, să fie creat (a se vedea figura 3 ..).

Figura 3. Un fragment de registru care descrie punctele de montare ale unităților de rețea (Windows XP)

Pentru a schimba numele unei unități de rețea în folderul Computerul meu, trebuie să modificați valoarea variabilei șir _LabelFromReg.

Pentru a determina variabila $ key_path, trebuie să calculați numele dosarelor, calea UNC: trebuie să înlocuiți caracterul "" cu "#":

Este timpul să evidențiem această problemă din punct de vedere al programării. Deci, am considerat transformarea unui singur simbol, dar expresia constă dintr-un set de simboluri care trebuie transformate în mod consecvent:

Pentru $ c = 1 la Len ($ keyw_s)

În acest exemplu, trecerea de la simbol la simbol este realizată utilizând bucla For ... Next și o combinație a funcțiilor Stânga și Dreapta. În cele din urmă, variabila simbolului $ este un număr hexazecimal (HEX).

Acum este necesar să obțineți separat primul și al doilea caracter din fiecare dintre numerele HEX și cu primul caracter în cazul în care codul său ASCII este mai mare de 128, efectuați conversia (a se vedea tabelul 3). Primul caracter și al doilea caracter sunt definite după cum urmează:

Să începem implementarea algoritmului pentru conversia primului caracter al unui număr hexazecimal. Este recomandabil să folosiți sistemul de pavilion și instrucțiunea select ... case.

Iată un exemplu de conversie a primei litere a expresiei - "C". Așa cum a fost definit anterior, acest simbol corespunde D1 valoarea hexazecimală, pornind de la tabelul 2, D trebuie să fie transformată în două, iar numărul în sine, în 21:

În acest caz, se utilizează numai instrucțiunea select ... case. Sistemul de pavilion este utilizat pentru a determina algoritmul de transformare, în funcție de codul HEX al simbolului:

Al doilea octet al caracterului este determinat de codul caracterului ASCII:

Din moment ce linia de descriere poate avea doar 32 de caractere și numai partea care este scris este actualizată, pentru a evita lăsarea "cozilor", toate celelalte caractere trebuie să fie zero:

Pentru $ r = 1 până la 32-len ($ keyw_s)

Și, în cele din urmă, atingerea finală - scrierea valorilor corespunzătoare în registru:

WriteValue ($ keyw_path + "" + $ ds_s + "\ _ LabelFromReg", "Cache", $ t, "REG_BINARY")

WriteValue ($ keyw_path + "" + $ ds_s + "\ _ LabelFromReg", "Versiune", $ r_w1 + 1, "REG_DWORD")

WriteValue ($ keyw_path + "" + $ ds_s + "\ _ GVI", "Versiune", $ r_w2 + 1, "REG_DWORD")

În acest exemplu, versiunea este incrementată în secțiunile _LabelFromReg și _GVI.

Acum rămâne să predați scriptul pentru a determina pe ce sistem de operare se execută și descrierea conexiunii unităților de rețea va fi terminată.

Tipul unui anumit sistem din KIXTart este definit folosind macrocomanda @PRODUCTTYPE.

Tabelul 4. Lista valorilor returnate prin macrocomanda @ProductType







Articole similare

Trimiteți-le prietenilor: