Professional Documents
Culture Documents
Vilnius, 2020
e
TURINY
1. Įvadas. 9
1.1. Užduoties analizė......................................................................................................................9
1.2. Tikslas ir uždaviniai..................................................................................................................9
2. Analogų apžvalga 10
3. Programos kūrimo procesas 14
3.1. Funkciniai reikalavimai...........................................................................................................14
3.2. Nefunkciniai reikalavimai.......................................................................................................15
3.3. Panaudos atvejų diagrama ir scenarijai...................................................................................17
3.4. Veiklos diagramos...................................................................................................................25
3.4.1. Kalbos keitimo veiklos diagrama.................................................................................25
3.4.2. Kompiuterių vardų pateikimas juos įrašant ranka........................................................26
3.4.3. Kompiuterių vardus talpinančio tekstinio failo pasirinkimas.......................................27
3.4.4. Testavimo eiga su pateiktais duomenimis....................................................................28
3.4.5. Rezultatų suvestinė ir jos saugojimas...........................................................................29
3.5. Trumpas skyriaus apibendrinimas...........................................................................................30
4. Užduoties įgyvendinimas 31
4.1. Panaudotos bibliotekos............................................................................................................31
4.2. Programinis funkcijų išpildymas.............................................................................................33
4.2.1. Duomenų pasirinkimas ir panaudojimas.......................................................................33
4.2.2. WMI funkcionalumo panaudojimas.............................................................................34
4.2.3. IP adreso gavimas.........................................................................................................35
4.2.4. Kompiuterio vardo paruošimas be prierašų..................................................................36
4.2.5. Rankini reikšmių įvedimas...........................................................................................37
4.2.6. Csv failų generavimas...................................................................................................38
4.2.7. Rezultatų suvestinės forma...........................................................................................41
4.2.8. Rezultatų suvestinės formos išsaugojimas....................................................................41
4.2.9. Duomenų konflikto išvengimas....................................................................................42
4.2.10. Formos uždarymas, įspėjimų kontrolė..................................................................42
4.3. Trumpas skyriaus apibendrinimas...........................................................................................43
5. Programos veikimo patirinimas 44
6. Rezultatų apibendrinimas 53
Literatūros ir informacinių šaltinių sąrašas 54
Paveikslų turinys
[ESK-14-5.0LT] 7
e
13 pav. Failo pasirinkimo dialogo lango apsirašymas...................................................................33
14pav. Duomenų įtraukimas į simbolių masyvą...........................................................................33
15pav. Pagrindinis "try" blokas.....................................................................................................34
16pav. Pagrindinis "catch" blokas.................................................................................................35
17pav. IP adreso gavimas..............................................................................................................36
18pav. Vardų palyginimo metu atskiriamas domeno pavadinimas...............................................36
19pav. Rankinės reikšmių įvedimo funkcijos kodo fragmentas....................................................38
20pav. Stulpelių pavadinimų deklaravimas...................................................................................39
21pav. Ruošinys, kai kompiuteris atsako į savo vardą..................................................................39
22pav. Kai vardai nesutampa.........................................................................................................39
23pav. Kuomet nepavyksta gauti DNS vardo pagal IP adresą......................................................40
24pav. Kuomet nėra jokio atsako..................................................................................................40
25 pav. Rezultatų lentelės pildymas duomenimis.........................................................................41
26 pav. keliamės į "Home" klasėje esančią funkcją.....................................................................42
27 pav. Išvestinės saugojimas pasirinktoje lokacijoje...................................................................42
28 pav. Globalių kintamųjų nustatymas į nulinę reikšmę.............................................................42
29 pav. Formos išjungimas, iššokančių langų pranešimai.............................................................43
30 pav. Pagrindinis langas.............................................................................................................44
31 pav. Rankinio, kompiuterių vardų, įvedimo funkcija...............................................................45
32 pav. Aktyvuojamas testavimo pradžios mygtukas...................................................................45
33 pav. Rezultatų suvestinė...........................................................................................................46
34 pav. Pasirinkus lokaciją, failas išsaugomas, nuspaudus "OK" mygtuką.................................46
35 pav. Įspėjimo langas prieš išsaugant.........................................................................................47
36 pav. Įspėjimo langas po rezultatų išsaugojimo.........................................................................47
37 pav. Namų ekranas lietuvių kalba.............................................................................................48
38 pav. Failo pasirinkimo vaizdas lietuvių kalba..........................................................................48
39 pav. Testavimas su kompiuterių sąrašu....................................................................................49
40 pav. Failo pasirinkimas.............................................................................................................49
41 Pav. Failo pasirinkimas 2..........................................................................................................50
42 pav. Vyksta testavimas su įkeltu sąrašu....................................................................................50
43 pav. Suvestinė, po testavimo įkeliant dokumentą.....................................................................51
44 pav. Ataskaitos vaizdas, žiūrint per Microsoft Excel...............................................................52
Lentelių turinys
8
1. ĮVADAS.
Šio darbo tikslas yra sukurti įrankį, kurio pagalba būtų galima, turimą kompiuterių sąrašą,
patikrinti ir sužinoti kiek kompiuterių atsako per WMI užklausą į savo vardą ir kiek jų
neatsako. Neatsakiusių kompiuterių PING‘inimas gaunant jų IP adresą ir pagal adresą sužinoti,
kokį kompiuterio vardą gražina DNS serveris. Taip pat su programa galima matyti visai
neatsakančius įrenginius.
Tema aktuali, nes įmonėje, kurioje yra per 400 skirtingų įrenginių, vyksta daug senos
įrangos pakeitimo darbų, tačiau visi jie nėra utilizuojami ir vėliau yra vėl pajungiami į vidinį
tinką. Dalis įrenginių yra pervadinami, arba senų kompiuterių vardai perleidžiami naujiems,
todėl tokį didelį kiekį kompiuterių yra sunku peržiūrėti, kad visi turėtų teisingus vardus.
Pasitaikius neatitikimams į kompiuterius negalima įdiegti „silent update“ ar atlikti kitų
diagnostinių procesų.
Iki šiol naudojamas ne itin patogus „Power Shell“ metodas, kurio pagalba yra įklijuojamas
kodas ir gaunami minėti duomenys.
Tikslui pasiekti naudosiu c# programavimo kalbą ir Microsoft Visual Studio pasitelkiant
„Microsoft Windows Management Infrastructure“.
Programa turės grafinę vartotojo sąsają, bus galimybė įkelti sąrašą iš kompiuteryje
pasirinkto katalogo, taip pat įvesti pavienius, galimai klaidingus DNS įrašus turinčius
kompiuterių vardus. Testavimo rezultatai bus atvaizduojami tiek programoje, tiek
eksportuojami į Excel failą.
Tam, kad šis tikslas būtų realizuotas buvo iškelti šie uždaviniai:
Ši programa pasižymi daug didesniu funkcionalumu nei mano kurtas įrankis kuris yra
orientuotas tik į vieną užduotį. Ši programa apima labai plataus spektro įrenginių bei programų
stebėjimą, ko mano programa pasiūlyti deja kol kas negali. Atsivėręs šią programą tikrai ne
kiekvienas naudotojas žinos kaip teisingai programą nustatyti, kad būtų gaunami reikiami
rezultatai, kadangi didelis funkcijų kiekis gali kartu įnešti šiokį tokį chaosą.
Mano kurtas įrankis yra labai paprastas, bet kadangi yra orientuotas pagrindinės užduoties
atlikimui ir būtent tai ir daro, nei daugiau, nei mažiau. Mano kurtas produktas nereikalauja
instaliacijos proceso ir užima labai nedaug vietos diske.
Kitas įrankis papuolęs į mano akiratį, yra taip pat nemokamas- WMI Explorer 2.0. Pirmas
įspūdis paleidus šią programą yra daugybė langų, kas simbolizuoja ne tik funkcijų įvairovę bet
ir nemažą slenkstį kurį teks peržengti norint nepasimesti langų gausoj ir išsiakinti kaip
pagrindinius programos panaudojimo atvejus.
3 pav. WMIE 2.0 programos langas
Pirmas dalykas kurį išskirčiau, būtų labai aiškus SQL užklausų rašymo interfeisas. Galima
manyti, kad idėja yra šiek tiek skolintasi iš kito, duomenų bazių užklausoms vykdyti skirto
"SQL Server Management Studio" įrankio. Yra galimybė sukurtą SQL skriptą formatuoti
paspaudus tam skirta mygtuką apačioje. Ši ir prieš tai aptarta programa taip pat turi galimybę
jungtis prie serverio nuotoliniu būdų, kas taip pat yra svarus pranašumas jeigu lygintume su
mano kurta programa. Ši programa taip pat gali vykdyti "gilesnes" WMI užklausas bei geba
generuoti skriptus kitoms užklausas atliekančioms programos kaip kad PowerShell ar VBS,
tačiau tam reikalinga naujesnė PowerShell v2, tai galima priskirti ir prie šios programos
trūkumų. Programa yra patogi tuo, jog ji, kaip ir mano sukurta programa nereikalauja jokio
instaliacijos proceso, tai yra tiesiog paleidžia vos atsisiuntus. Norint atlikti tą pačią užduotį kuri
atliekama mano programos, tam yra reikalingas skriptas kurį teks parašyti patiems, bet tai kartu
atveria ir daugiau galimybių.
Trečioji programa dažniausiai randama visuose Windows kompiuteriuose. Tai PowerShell.
Kaip ir prieš tai aptarta programa, ši yra skirta vykdyti operacija aprašytas skripte, ką mano
kolegos darydavo iki šiol norint atlikti kompiuterių sąrašo testavimą. Tai yra labai universalus
įrankis, o internete yra gausybė forumų kuriuose yra dalinamasi patarimais ir pamokomis kaip
pasiekti tam tikrą funkcionalumą. Tai ko gero vienas universaliausių įrankių skirtas užklausų
kūrimui, tačiau šis įrankis neturi grafinės vartotojo sąsajos ir atliks tik tas užduotis kurios bus
aprašytos, taigi jeigu įrankis, tam tikrai užduočiai atlikti, bus naudojamas daugiau nei vieną
kartą, skriptą reikia saugoti diske, kad vėliau jį būtų galima vėl paleisti.
Taigi, viską apibendrinant galima teigti jog, mano kurtoje programoje tikrai yra daug vietos
funkcionalumo vystymui. Tačiau verta pabrėžti, kad programa buvo orientuota tik į vieną
pagrindinę funkciją, kuri ją ir atlieka, o tobulėti visada yra į kur.
Pagrindinėmis kitų programų stiprybėmis galėčiau laikyti gebėjimą jungtis prie serverio
nuotoliniu būdų, SQL užklausų vykdymo galimybes, programų palaikymą, dideles
bendruomenes kurios randa vis naujų įrankių panaudojimo būdų ir galimybę atlikti didelę dalį
tinklo diagnostikos užduočių
3. PROGRAMOS KŪRIMO PROCESAS
Pirma reikia nurodyti funkcinius reikalavimus t.y. kokiomis funkcijomis sistema pasižymės.
Toliau nurodomi funkciniai reikalavimai yra pagrindiniai arba būtinieji, be kurių sistema
negalėtų funkcionuoti ir būtų neišbaigta. Toliau pateikiamas funkcinių reikalavimų sąrašas:
1. Atsivėrus programą
• Pradiniai duomenys: darbuotojas pagrindiniame lange turi matyti du pagrindinius
mygtukus leisiančius sistemai pateikti duomenis tiek rankiniu būdu, tiek naršant failų katalogą.
Taip pat pagalbinį mygtuką kalbos keitimui.
• Veiksmai ir rezultatas: darbuotojas mato esančius variantus, esant reikalui kalbą galima
keisti tarp anglų ir lietuvių. Kadangi kompanija yra tarptautinė, anglų kalba yra nustatyta kaip
numatytoji.
2. Norint pradėti testavimą duomenis pateikiant juos įvedant klaviatūra arba įklijuojant iš
šaltinio
• Informacijos perdavimas: prieš suvedant kompiuterių vardus, darbuotojas pirmiausia turi
pasirinkti mygtuką „Manual Entry “ reiškiantį rankinį įvedimą. Atsivėrusiame lauke
vedami/įklijuojami kompiuterių vardai atskirti kableliais. Darbuotojas pradėti testavimą gali tik
tuomet kai laukas vardų įvedimui nėra tuščias.
• Veiksmai ir rezultatas: darbuotojas laukia kol vyksta užklausos, o joms pasibaigus,
naujame lange, yra atveriama suvestinė, kurioje yra galimas rikiavimas pagal 4 kriterijus.
• Formos uždarymas: darbuotojas paspaudęs formos uždarymo mygtuku dešiniajame
formos viršaus kampe, yra informuojamas jeigu formos suvestinė nebuvo išsaugota įrenginyje,
perspėjama, kad duomenys nebus išsaugoti. Ją išsaugojus eksportuojant į įrenginy, klausimas
nepasikartoja ir yra klausiama ar tikrai norima išjungti formą.
Nefunkciniai reikalavimai, tai reikalavimai, kurie nusako, kaip sistema turės veikti. Toliau
pateikiamas nefunkcinių reikalavimų sąrašas:
ID: UC01
ID: UC02
ID: UC03
aprašymas:
Naudotojas: Asmuo norintis atlikti kalbos pakeitimą programoje.
ID: UC04
Prieš - sąlygos 1. Naudotojas turi naudoti kompiuterį, kuris prijungtas prie to paties
tinklo, kaip ir testuojami įrenginiai.
ID: UC05
Prieš - sąlygos 1. Naudotojas turi naudoti kompiuterį, kuris prijungtas prie to paties
tinklo, kaip ir testuojami įrenginiai.
ID: UC06
Prieš - sąlygos 1. Naudotojas turi naudoti kompiuterį, kuris prijungtas prie to paties
tinklo, kaip ir testuojami įrenginiai.
ID: UC07
Prieš - sąlygos 1. Naudotojas turi naudoti kompiuterį, kuris prijungtas prie to paties
tinklo, kaip ir testuojami įrenginiai.
scenarijai:
3.4. Veiklos diagramos
Pirmoje veiklos diagramoje vaizduojamas kalbos keitimas. Numatytoji programos kalba yra anglų,
tačiau vienu paspaudimu, programą galima pritaikyti ir anglų kalba nekalbantiems specialistams. Kadangi
įmonė yra įsikūrusi ne tik Lietuvoje bet ir kitose šalyse, svarbu kad kalba nebūtų vienas tų barjerų neleisiančių
naudotis programa.
Kalbą galima keisti beveik iš kiekvieno programos lango, o pakeitus kalbą pasikeičia ne tik mygtukų
pavadinimai, bet ir iššokančių pranešimų tekstas (žr. 2 pav.).
Antrojoje veiklos diagramoje vaizduojamas kalbos keitimas kompiuterių vardų pateikimas juos įrašant
ranka Gana paprastas tačiau ir gana reikalingas reikšmių perdavimas jas įrašant ranka. Praktikos eigos metus,
testuojant pastebėjome jog yra labai nepatogu testuoti visą daugiau nei 400 šimtų kompiuterių sąrašą, kuomet
tereikia patikrinti tik kelis įrenginius, o kuriant atskirus tekstinių dokumentų failus, kurių greičiausiai vėliau
neprireiks, tapo ne tik neracionalu, bet ir bereikalinga, kuomet darbalaukyje, ar kitoje vietoje laikomi tekstiniai
dokumentai su pavienėmis reikšmėmis yra linkę lengviau pasimesti ar būti sumaišyti su kitais tekstiniais
dokumentais.
Taip kilo idėja padaryti galimybę jog norint atlikti testavimą tik su keliomis reikšmėmis, jas būtų
galima įvesti ranka, ar įklijuoti reikiamus kompiuterių vardus iš atitinkamo šaltinio. Procesas užtrunka
nepalyginamai trumpiau, o kai domina tik mažas kiekis prietaisų iš stambaus sąrašo yra gan paprasta juos
įklijuoti tiesiai į programą ir nesijaudinti dėl bereikalingai ant darbalaukio išdėstytų ir turbūt tik vieną kartą
panaudojamų tekstinių dokumentų (žr. 3 pav.).
8pav. Rankinis kompiuterių vardų įvedimas
Testavimas įvedant pavienius kompiuterių vardus vyksta taip pačiai, kaip ir pasirenkat duomenų
failą, tik duomenys jau nuskaitomi ne iš failo, bet iš teksto lauko kur buvo suvesti kompiuterių vardai.
Trečiojoje veiklos diagramoje vaizduojamas kompiuterių vardus talpinančio tekstinio failo pasirinkimas.
Norint pradėti darbą su programa, pirma reikia turėti tekstinį dokumentą. Iš pradžių buvo pritaikytas ganėtinai
nelankstus ir neefektyvus, direktorijos nurašymo metodas. Duomenims pasirinkti, norėjosi kažko paprasto ir
lengvai suprantamo. Nusprendėme, kad naršymas per katalogus yra pats patogiausiais metodas, bei
nereikalaujantis ypatingų įgūdžių. Pasirinktas būdas atrodė tiek estetiškai tvarkingas, tiek greitas.
Tam pasiekti naudojau dialogo langus, kas procesą ne vien paspartino, bet ir dėl savo gerai pažystamos
išvaizdos, failo pasirinkimą supaprastino (žr. 4 pav.).
9 pav. Failo, su kompiuterių vardais, pasirinkimas iš failų katalogo
Paleidus programą ir pasirinkus funkciją failui atidaryti atsiveria naujas langas, kuriame turime
mygtuką atverti failų katalogui ir pradėti testavimą. Failo pasirinkimas ir testavimo pradžia yra gludžiai susiję,
kadangi iškvietus failų katalogo funkcija ir pasirinkus reikia tekstinį dokumentą nedelsiant yra pradedamas
pagrindinis testavimas, apie kurį kalbėsime šiek tiek vėliau
Sistemai nuskaičius kompiuterių vardus iš pasirinkto tekstinio dokumento ar iš teksto lauko skirto
kompiuterių vardams įvesti, juos atskiriant kableliais, kiekvienas vardas yra talpinamas į vieną iš simbolių
eilutės (eilutės masyvo tipo) ląstelių. Tada vykstant pirmajai užklausai sužinoma ar užklaustu vardu
kompiuteris atsako ar ne, jeigu ne, kaip ir diagramoje pavaizduota, yra atliekami kiti atitinkami patikrinimai
nustatyti ar tai yra neteisingo DNS įrašo kaltė ar visgi tai yra susiję su kompiuterio nepasiekiamumu, kas
dažniausiai yra sukeliama kai kompiuteris yra išjungtas arba nėra prijungtas prie to paties tinklo prie kurio yra
prijungtas įrenginys atliekantis šį testavimą.
Testavimui pasibaigus yra pereinama prie rezultatų atvaizdavimo funkcinės dalies. (žr. 5 pav.).
3.4.5. Rezultatų suvestinė ir jos saugojimas
Penktojoje veiklos diagramoje vaizduojama rezultatų suvestinė ir jos saugojimas. Programa pabaigus testuoti ar
kompiuteriai atsako pagal savo vardą, suradus ne atitikmenis ir parengus rezultatus peržiūrai atveria naują
langą, kuriame visa informacija apie testuotus kompiuterius kartu su išvadomis, yra talpinama duomenų tinklelį
(angl. data grid view) .
Programos naudotojas neinicijuoja šios programinės dalies pradžios, tačiau atvėrus langą jis gali
rezultatus peržiūrėti. Taip pat duomenų tinklelis (angl. data grid view) turi galimybę jame pateiktus duomenis
rikiuoti pagal kiekvieną iš esamų stulpelių. Tarkim programos naudotojas pirma nori matyti tuos kompiuterius,
su kuriais atlikus testavimą, paaiškėjo jog yra konfliktas tarp originaliai užklausto vardo ir gauto vardo iš
domeną aptarnaujančio vardų serverio (angl. DNS-domain name server). Tokiu atveju yra spaudžiama ant
stulpelio viršuje esančio stulpelio reikšmę nusakančios etiketės, kuri šiuo atveju būtų „status“ reiškiančios
statusą, ir rezultatai yra surikiuojami taip, kad visi kompiuteriai kurie turėjo statusą „conflict“ reiškiantį
konfliktą bus sugrupuoti kartu.
Baigus žiūrėti rezultatus naudotojas gali išeiti iš šio, rezultatų pateikimui skirto, lango
paspausdamas viršaus dešinėje esantį „x“ mygtuką. Jeigu suvestinė nebus išsaugota, prieš uždarant programos
langą, programa naudotoją informuoja, kad rezultatai nebus automatiškai išsaugomi, o išėjus iš šio lango, jie
bus ištrinti.
Esant būtinybei, naudotojas nesirenka kad nori išeiti iškilusiame dialogo lange, renkasi išvestinės
eksportavimo funkciją spausdamas „export “ mygtuką ir pasirenkama lokacija kompiuterio atmintyje skirtą
saugoti sugeneruotam CSV formato failui. Tuomet galima grįžti prie programos lango, atvaizduojančio
rezultatus, išjungimo ir sutikus kad, kad langas bus išjungtas grįžtama į pagrindinį, testavimui skirtą langą iš
kurio buvome nukelti į ką tik uždarytą langą.
1. System.Windows.Forms;
2. System.Windows;
3. System.Management;
4. System.Management.Instrumentation.
12 pav. Bibliotekos
Suteikia prieigą prie gausaus informacijos rinkinio ir įvykių susijusių su sistema valdymo,
įrenginiai bei programos, dėka šios bibliotekos gali būti pritaikytos Windows valdymo instrumentacijai
(Windows Management Instrumentation). Programos ir paslaugos gali užklausti reikalingos valdymo
informacijos (pvz., kiek laisvos vietos liko diske, koks yra dabartinis procesoriaus panaudojimas, prie
kurios duomenų bazės yra prijungta tam tikra programa, ir daug daugiau), naudodamiesi klasėmis,
gautomis iš „ManagementObjectSearcher“ ir „ManagementQuery“ kurios yra aktyvinamos pridėjus šią
biblioteką. Taip pat yra galimybė matyti įvairius valdymo įvykius naudodami
„ManagementEventWatcher“ klasę. Paskirtoje aplinkoje prieinamus duomenis gali sudaryti tiek
valdomi, tiek nevaldomi komponentai.
Biblioteka „System.IO“
„System.IO“ pasižymi savo gebėjimu skaityti ir rašyti į failus ir duomenų srautus atitinkamą
informaciją, taip pat turi galimybę įgalinti paprastųjų failų ir katalogų palaikymą.
Biblioteka „System.Net“
„System.Net“ vardų sritis suteikia paprastą programavimo sąsają daugeliui šiandien tinkluose
naudojamų protokolų. „WebRequest“ ir „WebResponse“ klasės sudaro vadinamųjų jungiamųjų
protokolų, tinklo paslaugų diegimo, leidžiančio kurti programas, naudojančias interneto išteklius,
nesijaudinant dėl konkrečių atskirų protokolų detalių, pagrindą.
Klasės „System.Net“ vardų erdvėje gali būti naudojamos kuriant „Windows Store“ programas arba
darbalaukio programas.
Biblioteka „System.Net.Sockets“
„Socket“ klasėje pateikiamas gausus metodų ir savybių rinkinys tinklo ryšiui palaikyti. „Socket“
klasė leidžia atlikti tiek sinchroninį, tiek asinchroninį duomenų perdavimą, naudojant bet kurį iš ryšių
protokolų, išvardytų „ProtocolType“ sąraše, kurį, kaip ir didžiosios dalies su C# programavimu
susijusių klausimų, atsakymus, galima rasti oficialiame Microsoft C# programavimo kalbos palaikymo
puslapyje
„Socket“ klasė seka asinchroninių metodų .NET Framework pavadinimų modelį. Pvz., Sinchroninio
priėmimo metodas atitinka asinchroninį „BeginRecept“ ir „EndRecept“ metodus.
4.2. Programinis funkcijų išpildymas
Norint pradėti darbą su programa, pirma reikia turėti tekstinį dokumentą (txt formato). Iš pradžių
buvo pritaikytas ganėtinai nelankstus ir neefektyvus, direktorijos nurašymo metodas. Duomenims
pasirinkti, norėjosi kažko paprasto ir lengvai suprantamo. Nusprendėme, kad naršymas per katalogus yra
pats patogiausiais metodas, bei nereikalaujantis ypatingų įgūdžių. Pasirinktas būdas atrodė tiek estetiškai
tvarkingas, tiek greitas. Tam pasiekti naudojau dialogo langus, kas procesą ne vien paspartino, bet ir dėl
savo gerai pažystamos išvaizdos, failo pasirinkimą supaprastino.
Toliau, iš pasirinkto failo, reikia pasiimti duomenis. Tai padaryti yra sąlyginai paprasta. Iš
pasirinkto txt dokumento, kompiuterių vardus sudedame į simbolių masyvą. Tai vėliau padės kiekvieną iš vardų
traukti iš masyvo ir juos leisti per tolimesnius kodo fragmentus. Kode matote, kaip į „StringArray“ sutalpiname
visas eilutes iš „theDialog“. Taip buvo užvadintas procesas, kuomet atidarant dialogo langą pasirinkome failą.
Per kiekvieną ciklo iteraciją yra kreipiamasi į WmiCheck fikciją vis su nauja vardo reikšme.
Windows valdymo įrankio (Windows Management Instrumentation) algoritmas [2] yra skirtas
darbui „Windows“ operacinėse sistemose, ir atlieka nemažą dalį funkcijų vienai jų būnant užklausiant serverį
informacijos apie vidiniame tinkle esančius kompiuterius. Šį algoritmą, kaip ir minėjau anksčiau, naudojau
aptikti kompiuterius pagal jų tariamą vardą ir rasti neteisingus domeną aptarnaujančio vardų serverio (angl.
DNS-domain name server) įrašus. Tai yra vienas iš kodo skolinių paimtų iš oficialaus Microsoft C# blogo,
kuriame yra detalizuotos ir kitos Windows valdymo įrankio (Windows Management Instrumentation) funkcijos,
kurių, nenorėdamas išsiplės, šiame darbe neminėsiu.
Visą pagrindinę programos logiką dėliojau šioje „WmiCheck“ funkcijoje, kuri pagal atitinkamus
scenarijus, išsišakoja ir nukreipia duomenis į kitas, pagalbines funkcijas
Pirma yra bandoma gauti atitinkamo kompiuterio IP adresas[5]. Gavus adresą, einame į kita funkciją
„DNSnameSep“. Tačiau jeigu IP adreso nepavyksta gauti, Catch dalyje esanti funkcija, programą nuveda į
„noIP“ funkciją kur yra registruojamas įrenginio nepasiekiamumas, dažniausiai dėl jo buvimo išjungtu arba
atjungtu nuo tinklo.
17pav. IP adreso gavimas
Tai pirminis būdas tikrinant kompiuterio vardą, kadangi iš čia toliau einant į funkciją
„DNSnameSep“ mes galime ne tik sužinoti ar įrenginys neatsako užklaustas IP adresu, bet atlikti kita naudinga
vardo paruošimo, pirminiam tikrinimui, funkciją.
Nors algoritmas yra originaliai sukurtas pačio „Microsoft“, pastebėjau kelis trūkumus. Jeigu
kompiuteris turi „.odin.local“ prierašą, gale savo vardo, šis algoritmas teigia, kad vardai nėra vienodi. Taigi, dėl
šios priežasties pasitelkiau papildomą metodą kompiuterių vardų tikrinimui.
Kaip jau minėjau kartais domeną aptarnaujančio vardų serverio (angl. DNS-domain name server)
serveris gražindamas vardą kartu paima ir prierašą „odin.local.“. Iš pat pradžių teko ilgai ieškoti ir sukti galvą
kas galėtų iššaukti tokį rezultatą. Pasikonsultavus su praktikos vadovu, paaiškėjo, kad vardai yra vienodi, bet
ateinantys su prierašu. Buvo įgyvendinta priemonė šiai problemai išspręsti. Gale reikšmės gavimo yra
pridedama „Split“ operacija, ir nurodoma kad tai yra masyvas ir imti reikšmę reikia pačia pirmą. Yra paskutinį
kartą patikrinama kad taip, šis gautas ir originaliai užklaustas, vardai yra skirtingi ir programos veikla toliau
tęsiama „conflict“ funkcijoje kurioje yra registruojamas įrenginio vardų neatitikimas, IP adresas bei statusas
„CONFLICT“
Taip pat verta paminėti, kad tuo atveju kai nėra gaunamas domeną aptarnaujančio vardų serverio
(angl. DNS-domain name server) vardas, nors prieš tai ir pavyko gauti IP adresą, programa catch dalyje palieka
DNSnameSep funkciją ir išeina į nodnsName kur yra registruojamas įrenginio nepasiekiamumas su IP adreso
prierašu.
Štai visi galimi scenarijai, ir funkcijos į kurias išeinama norint nusakyti testavimo rezultatus.
Gana paprastas tačiau ir gana reikalingas reikšmių paėmimas jas įrašant ranka. Praktikos eigos
metus, testuojant pastebėjome jog yra labai nepatogu testuoti visą daugiau nei 400 šimtų kompiuterių sąrašą,
kuomet tereikia patikrinti tik kelis įrenginius. Taip kilo idėja padaryti galimybę įvesti ranka, ar įklijuoti
reikiamus kompiuterių vardus. Procesas užtrunka nepalyginamai trumpiau, o kai domina tik mažas kiekis
prietaisų iš stambaus sąrašo yra gan paprasta juos įklijuoti tiesiai į programą ir nesijaudinti dėl bereikalingai ant
darbalaukio sėdinčių vieną kartą panaudotų „txt“ failų.
19pav. Rankinės reikšmių įvedimo funkcijos kodo fragmentas
Taip atrodo kodas kuomet tėra tik apsirašoma ką programa darys su įvestu tekstu.
Taip pat matome kaip globalus kintamasis pasiima reikšmę ją pernešdamas į funkciją žemiau, kuri, kaip jau
aptarta Browse funkcija, atlieka, labai panašią jei ne tą pačią, vardų padavimo pagrindinei „WmiCheck“
funkcijai, užduotį. Tik šį kartą įvesti vardai yra talpinami į simbolių masyvą prieš tai išfiltravus tarpus, o
kablelius naudojant kaip atskirties tašką, ties kuriuo programa žino, kad tolimesni simboliai po kablelio bus
talpinami jau kitoje, simbolių masyvo ląstelėje.
Principe viskas vyksta taip pačiai, tik duomenys jau nuskaitomi ne iš failo, net iš teksto lauko kur
buvo suvesti kompiuterių vardai
Galima pastebėti, kas tiek šioje tiek jau aptartoje „Browse“ funkcijoje prieš pat „return“ yra dar vienas
išsukimas iš šios funkcijos. Žemiau kalbėsime apie funkcijas atliekamas atvėrus kitos klasės (Results.cs) formą,
kuo ji naudinga ir kaip ji buvo įgyvendinta.
Pratestavus visus įrenginius, yra kuriama viso proceso ataskaita/išklotinė[3]. Ataskaitai sukurti
naudojau CSV formatą, kadangi, atsidarius failą ar per „Microsoft Excel“ ar per „LibreOffice“ yra labai patogu
gautus duomenis rūšiuoti, tiek pagal pavadinimus, tiek pagal statusą. Apsibrėžiau, kad failą sudarys 4 stulpeliai:
CsvOut.AppendLine("Target" + "," + "Real name" + "," + "IP address" + "," + " Status");
Informacija atlikus tikrinimus per visus 4 scenarijus yra skirtinga. Štai kaip įrašymas. Pabrėžiu, kad
kableliai naudojami informacijai talpinti atskiruose langeliuose, nėra vienintelis metodas, galima naudoti ir kiti
simboliai, ar tarpai. Tereikia atsidarius šia ataskaitą vienoje iš mano pateiktų skaitymo programų pasirinkti, kad
toks ir toks simbolis apibrėžia reikšmės pabaigą ir sekančios pradžią. Rekomenduoju naudoti kablelius nes tai
dažniausiai yra numatyta skirstymų reikmė.
Toks spausdinimo ruošinys yra naudojamas kai kompiuterių vardai atitinka ir jis yra sutinkamas
pačio pirminio tikrinimo sąlygos viduje.
Kai atsakas nėra toks kokio buvo tikimasi, veiksmas persikelia į „IPAddressas“. Gaunamas IP ir
perduoda į „DNSnameSep“. Net po vardų sutrumpinimo bei jų pavertimo tik mažosiomis raidėmis, jiems
neatitikus keliamės į funkciją „conflict“, kur mus pasitiks jau atroji ruošinio išvestis. Štai kas į CSV failą bus
įrašyta, antruoju atveju:
Kai į kompiuterį kreipiamasi su IP adresu ir klausiama, kam jis priklauso bet dėl kažkokios
priežasties vardas nėra grąžinamas iš domeną aptarnaujančio vardų serverio (angl. DNS-domain name server),
tuomet, kai nukeliausime į „nodnsName“ funkciją, į mūsų ataskaitą bus įrašoma štai tokia eilutė.
23pav. Kuomet nepavyksta gauti DNS vardo pagal IP adresą
Ir paskutinysis scenarijus. Kai užklausus koks IP adresas yra atitinkamo kompiuterio, negauname jokio
teigiamo atsako funkcija „noIP“ pasirūpins kad, mūsų ataskaitoje atsirastų štai tokia eilutė
Taigi, kai programa atliko didžiąją dalį darbo, einame ties rezultatų suvestinės lango, kuriame
sugeneruotos lentelės viduje bus talpina testavimo rezultatų informacija.
CSV failo išsaugojimas, kai jau minėjau yra skirtas tam, jeigu gauti rezultatai yra reikalingi ir po
rezultatų suvestinės peržiūros. Tam taip pat buvo pasitelktas dialogo langas. Kai ir su pirmuoju failų katalogo
langu, naudotu pasirinkti failui, čia tereikia pasirinkti lokaciją kur bus saugoma paruošta ataskaita.
Tereikia pasirinkti direktorija, pavyzdžiui kad ir „Desktop“ ir failas atsiranda jūsų darbalaukyje.
Failo pavadinimą sudarys žodelis „out“, simbolizuojantis „output“ (liet. išvestis) bei tos dienos data ir laikas
sekundžių tikslumu, taip bus išvengta failo perrašymo jeigu bus nuspręsta saugoti failą toje pačioje vietoje kur
ir prieš tai.
26 pav. keliamės į "Home" klasėje esančią funkcją
Testuojant susidurta su menka problema, kuomet nebuvo galima išgauti IP adreso ar domeną
aptarnaujančio vardų serverio (angl. DNS-domain name server) vardo, likdavo senos reikšmės globaliuose
kintamuosiuose[8], nuo prieš tai testuotų kompiuterių vardų. Nepastebėjus problemos ataskaita būdavo
gaunama klaidinga, teigianti gavusi vienokį ar kitokį vardą ar adresą, jau priklausantį praeitiems testų
rezultatams. To išvengti padeda paprastas reikšmių nuėmimas. Tai yra daroma po kiekvieno scenarijaus
išvesties.
Prieš uždarant formą, naudotojas yra informuojamas, kad palikus formą, rezultatai yra ištrinami,
pastebėjus, jog suvestinė nebuvo išsaugota, naudotojas yra perspėjamas apie negrįžtamą duomenų praradimą.
Yra siūloma duomenis išsaugoti, naudojant mygtuką „Eksportuoti“.
Duomenims jau esant išsaugotiems, naudotojas prieš išjungdamas formą, yra paklausiamas ar tikrai nori
išeiti iš formos. Įspėjimų žinutės keičiasi priklausomai nuo naudojamos kalbos ir duomenų saugojimo.
29 pav. Formos išjungimas, iššokančių langų pranešimai
Pagrindiniame lange galime matyti funkcijas rankiniam vardų įvedimui, taip pat funkciją testavimui atlikti
su jau iš anksto paruoštu vardų sąrašu. Jeigu kompiuteris nėra tinkle registruotas kaip turintis administratoriaus
teises, turime pasirūpinti, kad tiek vedant vardus su „Manual entry“ funkcija, tiek juos įkeliant iš jau
sugeneruoto sąrašo, kiekvienas iš vardų turės domeno pavadinimą. Vilniaus kolegijoje naudojami kompiuteriai
naudoja „ad.viko.lt“, tad kompiuterio vardas turėtų atrodyti taip- „EIF-D-S-205-16.ad.viko.lt“.
Taip pat galite pastebėti mygtuką esantį apatiniame, kairėje esančiame kampe su užrašu,
simbolizuojančiu, kokia kalba programa gali veikti.
31 pav. Rankinio, kompiuterių vardų, įvedimo funkcija
Pasirinkus „Manual Enry“. formos vaizdas yra perpaišomas, matome lauką informacijos
suvedimui. Taip pat viršuje esantis užrašas informuoja, kad reikšmes reikia atskirti kableliais.
Pabaigus ties informacijos įvedimu galime spausti atsiradusį mygtuką „Start Test“. Jis yra
aktyvuojamas kai pradedame rašyti teksto įvedimo laukelyje.
Programai atlikus savo darbą, naudotojui yra atveriamas naujas langas. Jame yra vaizduojami
duomenys, gauti testavimo, metu. Visi duomenys yra talpinami į lentelę, kurioje patogiai galima juos išfiltruoti
[7].
Formoje galime pastebėti, informacijai išsaugoti skirtą mygtuką „Export“. Jo pagalba, galime ir
išjungus rezultatų lentelės langą, rezultatus peržvelgi išsaugotame faile. Norint išsaugoti, spaudžiame mygtuką
„Export“, tada atsivėrusiame dialogo lange pasirinkame norimą saugojimo lokaciją ir spaudžiame „OK“
Sistemai pamačius, kad forma visgi buvo išsaugot, naudotoją pasitinka, šiek tiek kitokia, žinutė,
klausianti ar tikrai norima išeiti iš rezultatų peržiūros lango, nieko neminint apie rezultatų praradimą.
Formą paliekame, nuspaudę „Yes“ mygtuką. Atsirandame lange, iš kurio buvome nukelti į
rezultatų peržiūros langą. Šiuo atveju esame rankinio kompiuterių vardų įvedimo funkcijos lange. Jame galime
įvesti kitus kompiuterių vardus, taip pat jeigu naudotojas nori, galima grįžti į namų ekraną, iš kur galime patekti
į kita funkciją „Browse file“ reiškiančią, failo su kompiuterių vardais įkėlimas. Taip pat galime pakeisti kalbą į
lietuvių.
37 pav. Namų ekranas lietuvių kalba
Galime kalbą keisti ir šioje formoje. Dėl vientisumo pakeiskime į atgal į anglų kalbą.
39 pav. Testavimas su kompiuterių sąrašu
Paspaudus ant „Browse and start“ iššoka naujas langas kur pasirenkame failą norima testuoti.
Testavimo metu, esančiame teksto lauke buvo taip pat galima matyti progresą, pagal tai kiek
kompiuterių vardų jau praėjo testavimą.
O po testavimo, programa, kaip ir prieš tai, atveria testavimo rezultatų suvestinę
43 pav. Suvestinė, po testavimo įkeliant dokumentą
Metas apžvelgti gautą ataskaitą kuri buvo išsaugota po testavimo. Atidaryti, sugeneruota failą,
naudojant „Microsoft Excel“ arba tos programos, nemokamai leidžiamą parsisiųsti, alternatyvą „LibreOffice“.
Praktikos darbo rengimo metu keltas tikslas bei kelti uždaviniai sėkmingai įgyvendinti, t. y.,
sėkmingai sukurta programa, leidžianti atlikti kompiuterių pasiekiamumą tinkle kreipiantis į juos vardu.
Siekiant įgyvendinti šį tikslą sėkmingai įvykdyti tokie uždaviniai:
1. Išanalizuoti reikalavimai keliami šiai programai;
2. Atlikta užduoties analizė (t. y., nubrėžtos panaudos atvejų bei veiklos diagramos);
3. Buvo laikomasi terminų ir atlikti nutarti patobulinimai, kad programa būtų visapusiškai
išbaigta;
4. Funkciniai bei ne funkciniai reikalavimai įgyvendinti;
5. Sukurta programa atitinkanti tiek mano tiek programą naudosiančių darbuotojų lūkesčius;
Literatūros ir informacinių šaltinių sąrašas