Basic version control for your enterprise powershell scripts
In lumea celor ce scriu cod in mod profesional, version control e ceva uzual si pentru care exista solutii. In schimb pentru cei care nu scriem cod zi de zi sunt momente cand e dificil sa gestionam versiunile scripturilor.
Scenariul e de genul: am scris un script care in spate executa cateva actiuni si care a ajuns sa fie distribuit mai multor sysadmini din organizatie. Scriptul ajunge sa fie stocat pe un share, cateodata chiar distribuit pe email si in final ajunge pe desktop-ul unui sysadmin sau poate si pe un server de unde il ruleaza.
Intre timp cel ce l-a scris a mai adaugat cate ceva la script sau poate a corectat un bug. Cum putem sa facem in asa fel ca cel ce ruleaza scriptul sa fie informat ca exista o versiune mai recenta si sa o downloadeze dintr-un repository central?
Sincer nu e nimic nou sau complex in toata chestia asta, ci doar mai mult un sfat despre cum ai putea sa implementezi o solutie basic la aceasta problema.
Asa ca in opinia mea cea mai simpla varianta ar fi ca scriptul sa verifice o locatie accesibila de peste tot din companie. Se poate face si web based, dar cum discutam de ceva foarte simplu si in contextul unui sysadmin care part time mai face si cate un script cel mai simplu ar fi ca versiunea curenta sa fie stocata ca si valoare numerica intr-un fisier text stocat intr-un share.
Folosim Get-Content ca sa citim continutul fisierului text. In cel mai simplu scenariu, fisierul va contine doar o valoare numerica. Putem sa complicam lucrurile si sa tinem mai multe valori in acest fisier si pe baza lor sa luam decizii, dar va las pe voi sa va imaginati scenarii.
$currentversion = Get-Content \\Server\Share\appcurrentversion.txt
In script va exista si o variabila $ScriptVersion ce va tine versiunea scriptului. Dupa ce citim $currentversion din retea, trebuie doar sa comparam valorile cu ceva de genul:
$scriptversion -le $currentversion
Luand exemplul de mai sus, daca valoarea stocata in script $scriptversion e mai mica decat cea din retea $currentversion putem lua anumite decizii, gen sa terminam executia scriptului sau sa il lasam sa continue dar sa informam uitilizatorul ca exista o versiune mai noua si sa ii spunem de unde sa o ia.
Logica asta o putem pune foarte usor intr-o functie pe care mai apoi sa o portam la toate scripturile ce vor fi distribuite in companie.