Yksinkertainen AutoPilotin laitteiden listauksen tekeminen
Hieman teknisempää kikkaretta tällä kertaa. Intune on yleisesti oikein mukava ja toimiva laitos, mutta siitä on hienoisen vaikeaa saada välillä dataa irti GUI:n kautta.
Esimerkiksi täyden AutoPilotin laitelistauksen arvioiminen ja konfigurointi voi usein olla haastavaa, ja tässä käännytään herkästi partnerien sovellusten puoleen.
Lopulta datan kaivaminen on kuitenkin nykyisen Graph API:n kautta helpottunut:
Use the Microsoft Graph API – Microsoft Graph | Microsoft Docs
Graph API:n kautta kaikenkarvaisen kiinnostavan datan kaivaminen Intunesta onnistuu mukavasti paikallisen tietokoneen, PowerShellin ja sen soveltuvien moduulien kautta.
Jos esimerkiksi yritys haluaa nimetä kaikki laitteensa juoksevalla numerolla, voi Intunesta löytyä tämä tieto nopeastikin. Tässä on yksi pienoinen caveat.
GUI ei näytä AutoPilotin alla olevia laitteita, jotka odottavat käyttäjän enrollausta. Tai niiden nimiä.
Eli jos yritykseen tulee lyhyellä aikavälillä muutama rekry ja laitteet laitetaan AutoPilottiin manuaalisesti .csv -tiedostoista tai automaattisesti laitetoimittajan järjestelmän kautta, niin voi kahdelle tietokoneelle potentiaalisesti tulla sama device name, kun laitteita nimetään UI:n kautta. Tähän siis ei ole ennalta mitään mukavaa keinoa (laitteiden “Display Name” -arvon määrittelyyn siis). Se pitää tehdä joko GUI:n kautta yksitellen jokaiselle laitteelle, PowerShellin kautta tai vasta jälkeenpäin. Jälkeenpäin laitelistaus näyttää kuitenkin lähinnä anaaliselta sarjanumerosekamelskalta jos nimeämistä ei tehdä ennalta.
Toki, jos nimi randomisoidaan suoraan AutoPilotin Enrollmentin aikana, (Device Name Template) ei tätä ongelmaa pitäisi edes ilmetä. Pidän kuitenkin valitettavasti järjestyksestä (edes jossain määrin) ja juokseva numero tietokoneilla kuuluu ns. “pet peeve” -asioihini.
Tästä suivaantuneena väänsikin siis seuraavanlaisen PowerShellin turauksen.
Intune - AutoPilot -laitelistaus
Avataanpa hieman mitä ym. kikkare tekee.
Eli ihan alussa määritetään kaksi moduulia, jotka ovat vaadittuja näiden Graph API -kyselyiden tekemiseen. Ihan vain variable -tietoihin, eli skriptin sisälle arvoihin. Laiska kun olen, niin en jaksa manuaalisesti monta kertaa näitä arvoja kirjoittaa skriptiin.
Kyseessä on siis kohta:
Seuraavaksi yksinkertainen if/else -rakenne tarkistaa ovatko kyseiset moduulit olemassa ym. powershellin sessiossa, tai käyttäjällä saatavilla:
Kun tarkistus ja/tai lataus on tehty, otetaan kyseiset modulit vielä varmuuden vuoksi päälle importin kautta, jos latausta ei tarvitse suorittaa tai ne on jo ladattu aiemmin:
Tässä vaiheessa päästään vasta skriptin ns. “suorittavaan” osaan, eli se miksi varten tämä kikkare tehtiin. Ym. asiat olivat vain vaatimuksia että nämä arvot saadaan edes ulos.
Seuraava vaatimus onkin sitten vähintään Intune Administrator -tasoinen tunnus, jotta nämä Graph API:n tiedot voidaan ladata ulos. En nyt juuri mene takuuseen, pitääkö Graph API callit vielä erikseen sallia / Admin Consentata Azuren puolella (Enterprise Applications). Jos vaaditaan, niin sitten tämä pitää vielä tehdä esivalmisteluna. Alla lisätietoa asiasta:
How to use Azure AD to access Intune APIs in Microsoft Graph – Microsoft Intune | Microsoft Docs
Mutta, jatketaan sillä oletuksella, että oikeudet ja tunnus on järjestetty käyttöönne.
Prosessi jatkuu sillä, että skripti yhdistää itsensä määriteltyyn tenanttiin, josta tiedot haetaan. Määritys tapahtuu täysin käyttäjätunnuksen kautta, eli O365:n tunnusten kautta. “Connect-MSGraph” -siis pompauttaa esiin normaalin O365:n kirjautumisikkunan, jonka kautta soveltuva tunnus ilmoitetaan PowerShellille:
Kun tämä yhdistäminen on tehty, päästään viimein siihen kohtaan, jossa aktuaalista dataa haetaan.
Do diin, eli tässä käytetään Microsoftin PowerShellin “AutoPilot” -moduulin osaa “get-autopilotdevice” -kohtaa. Hauskuus tässä on se, että “Display Name” -arvo tulee näkyviin vasta -expand -kohdan kautta. Ja tässäkin on toinen hassunhauska piirre. Arvo ei näy kuin vasta 1-2 AutoPilotin synkronoinnin jälkeen. Näissä taasen on 15 minuutin viive, jolloin synkronointeja voidaan ajaa. Kyseessä on Microsoftin taustajärjestelmän asetus, jota ei voida muuttaa.
Noh, nimeäminen on siis tämän kautta PowerShellissä hieman haastavaa. Mutta tähänkin olen pyöräyttänyt powershellin kikkareen toimimaan vieressä. Sen kautta vaikka sadan laitteen juoksevan numeron pohjalta tehtävä nimeäminen onnistuu. Mutta ei siitä tässä enempää.
Tässä kohtaa data saadaan jo auki-olevaan PowerShell -ikkunaan. Siinä sen pläräys on kuitenkin hieman vaivalloista, jos laitteita on enemmän kuin viisi kappaletta:
Yllä olevasta kuvasta on blokattu laitetietoja pois, mutta ainakin tämä antaa kuvan miltä näkymä potentiaalisesti näyttää.
Jos tämä on ainoa tarve, niin muuta skriptissä ei tarvitsekaan sitten määritellä.
Lisätietoa WindowsAutoPilotIntune -moduulin sisällöstä löytyy seuraavan linkin alta:
PowerShell Gallery | WindowsAutoPilotIntune.psm1 5.0
Jos kuitenkin halutaan esimerkiksi juoksen numeron määrittelyn tarkistuksia tulille, niin ne selviävät esimerkiksi hyvinkin yksinkertaisesti seuraavalla skriptillä kun yhteys on tulilla:
Tämä yksinkertainen variantti tulostaa viimeisimmät viisi nimettyä laitetta PowerShellin “Out-Gridview” -näkymään. Eli erilliseen ikkunaan. Se voi aueta muiden ikkunoiden alle tietokoneella, mutta näkyy PowerShellin aliprosessina Windowsissa.
Tässä näkymässä tietoja voidaan nopeasti jaotella ja filteröidä (toimii itse asiassa todella hyvin tuo filteröinti, testatkaa!).
Ja sitten vielä itse skriptissäkin oleva Wanha kunnon .csv -export!
Tällä listaus saadaan .csv -muotoiseen tiedostoon, joka voidaan sitten tallentaa haluttuun lokaatioon tietokoneella.
Tämä toiminnallisuus on hyödyllisimmillään, jos “select-object” -lauseke jätetään kokonaisuudessaan pois ja kaikki AutoPilotin data tulostitaan .csv -tiedostoon.
Eli kun halutaan kattava laitelistaus ja laitetieto kasaan. Samalla myös selviää hyvin, mitä kaikkia attribuutteja AutoPilot pitää Graph APIn alla piilossa.
Eiköhän tämä riitä tälle kertaa.
Paskaa spagettiskriptiä pukkaa, mutta ainakin se toimii (jollain asteella)!
PS. Emme ota mitään vastuuta näistä turauksista, käyttäkää omalla vastuulla yms. yms. öms.