Lange versie
Na lang zwoegen is een redelijk groot script van me af - een leuke mix van Powershell, (de hoofdcode), C# (om een class aan te maken), SQL (om... SQL data op te vragen
) en VBA. Voor dat laatste dank aan enkele tips van F_J_K trouwens. Het is wederom voor VBA dat ik me tot GoT wend.
Alvorens het script in productie te nemen zou ik nog één ding willen veranderen dat het iets gebruiksvriendelijker maakt. Eerst even kort schetsen wat er in dat Excel-document zit (of toch het gedeelte relevant voor dit verhaal): drie werkbladen met daarop een dropbox die respectievelijk gepackagete software toont, toegelaten ongepackagete software en niet toegelaten ongepackagete software.
Een voorbeeld van de lijst met packages:

Wanneer op een waarde geklikt wordt in de dropbox dan wordt weergegeven welke gebruiker/machine enz. die software geïnstalleerd heeft. Nu is het zo dat die gebruikers enkel opgelijst worden voor de niet-gepackagete software. Voor de gepackagete software wordt dit niet gedaan aangezien dit een de facto dump van de SQL DB in het Excelbestand zou zijn. We willen enkel voor de niet-gepackagete software weten wie/wat/waar én daarnaast ook voor de gepackagete software waar specifiek aangegeven is dat we het wel willen weten. Concreet voorbeeld: van Office willen we niet weten welke gebruikers dit hebben (alle 20 000 immers) maar van pakweg AutoCAD wel.
Concreet: er is een kolom A met daarin een lijst van packages. Momenteel nog overzichtelijk (200 of zo) in de toekomst niet (1000+). Er is een kolom B met daarin een waarde True of False die bepaald of de gebruikersgegevens die bij dat package horen opgevraagd worden op de SQL DB of niet. Op een ander werkblad staat een dropbox waar ik een package kan kiezen en dan zie ik de gebruikersgegevens wanneer ik een package aanklik waarvan de kolom B waarde op True staat. Dat werkt dus allemaal zoals het hoort - want daar schuilt mijn PoSh-script achter die de SQL ondervraagt alvorens het Exceldocument aan te maken. Voor de SQL query is die kolom B niet nodig, neen, ik wil die voor wat anders gebruiken: nl. om mijn dropbox te filteren, zodat enkel de packages zichtbaar zijn waarvoor een waarden bestaan, dwz. waar de waarde in kolom B = True
tl;dr
Het is een heel verhaal en misschien niet helemaal duidelijk, maar het is niet zo vanzelfsprekend om een script van 3000 lijnen in een specifieke omgeving kort samen te vatten.
Mijn dropbox wordt als volgt gevuld:
En ik wil hier enkel de A's overhouden die in kolom B een waarde hebben die gelijk is aan TRUE.
Noot: Ik heb een hekel aan het vervoegen van het Engelse werkwoord packagen in het Nederlands, maar verpakken klinkt in de context van software distribution toch bizar.
Na lang zwoegen is een redelijk groot script van me af - een leuke mix van Powershell, (de hoofdcode), C# (om een class aan te maken), SQL (om... SQL data op te vragen
Alvorens het script in productie te nemen zou ik nog één ding willen veranderen dat het iets gebruiksvriendelijker maakt. Eerst even kort schetsen wat er in dat Excel-document zit (of toch het gedeelte relevant voor dit verhaal): drie werkbladen met daarop een dropbox die respectievelijk gepackagete software toont, toegelaten ongepackagete software en niet toegelaten ongepackagete software.
Een voorbeeld van de lijst met packages:

Wanneer op een waarde geklikt wordt in de dropbox dan wordt weergegeven welke gebruiker/machine enz. die software geïnstalleerd heeft. Nu is het zo dat die gebruikers enkel opgelijst worden voor de niet-gepackagete software. Voor de gepackagete software wordt dit niet gedaan aangezien dit een de facto dump van de SQL DB in het Excelbestand zou zijn. We willen enkel voor de niet-gepackagete software weten wie/wat/waar én daarnaast ook voor de gepackagete software waar specifiek aangegeven is dat we het wel willen weten. Concreet voorbeeld: van Office willen we niet weten welke gebruikers dit hebben (alle 20 000 immers) maar van pakweg AutoCAD wel.
Concreet: er is een kolom A met daarin een lijst van packages. Momenteel nog overzichtelijk (200 of zo) in de toekomst niet (1000+). Er is een kolom B met daarin een waarde True of False die bepaald of de gebruikersgegevens die bij dat package horen opgevraagd worden op de SQL DB of niet. Op een ander werkblad staat een dropbox waar ik een package kan kiezen en dan zie ik de gebruikersgegevens wanneer ik een package aanklik waarvan de kolom B waarde op True staat. Dat werkt dus allemaal zoals het hoort - want daar schuilt mijn PoSh-script achter die de SQL ondervraagt alvorens het Exceldocument aan te maken. Voor de SQL query is die kolom B niet nodig, neen, ik wil die voor wat anders gebruiken: nl. om mijn dropbox te filteren, zodat enkel de packages zichtbaar zijn waarvoor een waarden bestaan, dwz. waar de waarde in kolom B = True
tl;dr
Het is een heel verhaal en misschien niet helemaal duidelijk, maar het is niet zo vanzelfsprekend om een script van 3000 lijnen in een specifieke omgeving kort samen te vatten.
Mijn dropbox wordt als volgt gevuld:
Visual Basic .NET:
1
| ddlSelectPackage.ListFillRange = "'Packages Data'!$A$2:$A$" & intLastRow |
En ik wil hier enkel de A's overhouden die in kolom B een waarde hebben die gelijk is aan TRUE.
Noot: Ik heb een hekel aan het vervoegen van het Engelse werkwoord packagen in het Nederlands, maar verpakken klinkt in de context van software distribution toch bizar.