Az elmúlt években számos Intune bevezetési projektben vettem részt, és van néhány visszatérő probléma, amibe több esetben is belefutunk. Az egyik leggyakoribb akkor derül ki, amikor a compliance policy-kat kezdjük élesíteni: a gépek egy részén nincs bekapcsolva a Secure Boot vagy más fontos BIOS beállítás.
Ilyenkor jön a kellemetlen felismerés, hogy ezeknek a módosítása csak manuálisan, gépenként a BIOS-ban lehetséges – ami egy nagyobb környezetben rendkívül időigényes és nehezen skálázható feladat.
A másik tipikus helyzet a BIOS jelszavak kezelése. Sok szervezetnél ugyan használnak BIOS/HDD jelszót, de annak nyilvántartása egy Excel fájlban történik, ami nemcsak nehezen kezelhető, hanem biztonsági szempontból is problémás megoldás.
Szerencsére Dell eszközök esetében létezik egy jóval modernebb megközelítés. (A post csak a Dell megoldását tárgyalja, de Lenovo, HP, Surface is rendelkezik hasonló megoldásokkal.)
A Dell Endpoint Configure segítségével lehetőségünk van BIOS beállítások és jelszavak központi menedzsmentjére, amelyet Microsoft Intune-al integrálva teljesen automatizált módon is kezelhetünk.
Nézzük meg, milyen lépések mentén tudjuk bevezetni a Dell Endpoint Configure megoldást!
Ebben a cikkben végigmegyünk az alábbi lépéseken:
- Előfeltételek (.NET, Dell toolok)
- Dell Endpoint Configure telepítése
- BIOS konfiguráció létrehozása (.cctk)
- Policy deploy Intune-ból
- Jelszó kezelés és lekérdezés
- Troubleshooting és deep dive
Az alábbi komponensekre lesz szükségünk:
- .Net runtime 8.x a klienseken.
- Dell Configure: amivel a .cctk konfig fájlt létrehozzuk.
- Dell Endpoint Configure: ami feldolgozza ezt a konfig fájlt a klienseken.
Illetve készítenünk kell egy konfigurációs profilt is, amivel az Intune-ból tudjuk deployolni a Dell Configure-al létrehozott .cctk fájlt.
Fontos, hogy a klienseken legyen telepítve a .Net runtime 8.x, különben sikertelen lesz a Dell Endpoint Configure deployment.
A .Net runtime telepítését több módon is el tudjuk végezni. Én remediation scriptet használtam a demo során, de akár a Microsoft Win32 Content Prep Tool segítségével is készíthetünk win32 telepítő csomagot. Az utóbbi ütemezhetőbb, Autopilot esetén jobb megoldás.
Igaz a példában a winget user context-ben fut, ezért működik a remediation script, más futtatási környezetben (pl. system context vagy Autopilot) a működés nem garantált.
.Net runtime 8.x deployment
Proactive remediation script
- Készítsünk egy remediation scriptet az Intune portálon
- Device -> Scripts and remediations -> Create
- Adjunk egy nevet, és egy leírást a remediation scripthez.
- A detection script a sharedhost registry kulcsot használja, mivel ez minden .NET telepítésnél jelen van. Ez azonban nem a konkrét runtime verziót jelöli, hanem a host komponenst!
Detection script:
- A detection script a sharedhost registry kulcsot használja, mivel ez minden .NET telepítésnél jelen van. Ez azonban nem a konkrét runtime verziót jelöli, hanem a host komponenst!
# .NET Runtime 8 detection$dotnetKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost" -Name "Version" -ErrorAction SilentlyContinueif ($dotnetKey -and $dotnetKey.Version -like "8.*") { Write-Output "Installed: .NET Runtime version $dotnetKey.Version" exit 0}else{ Write-Output "Not Installed: .NET Runtime 8 is not installed." exit 1}
Remediation script:
# .NET Runtime 8 remediation$dotnetKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost" -Name "Version" -ErrorAction SilentlyContinuetry { winget install --silent --exact --accept-source-agreements --accept-package-agreements Microsoft.DotNet.Runtime.8}catch { Write-Output "Winget execution failed: $_" exit 1}Start-Sleep -Seconds 10# Check after install$dotnetKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost" -Name "Version" -ErrorAction SilentlyContinueif ($dotnetKey) { Write-Output "SUCCESS: Installed .NET Runtime $dotnetKey.Version" exit 0}else { Write-Output "FAILED: .NET Runtime 8 installation did not succeed" exit 1}
Futtassuk a script-et a user nevében, és 64-bit PowerShell-ben:

A fenti scriptek verbose reportálják a telepítés állapotát és a telepített verziót:

Win32 app
- Töltsük le a .Net telepítőjét a hivatalos MS oldalról.
- Töltsük le a Microsoft Win32 Content Prep Tool-t.
- Hozzunk létre egy mappát pl: C:\IntuneApps\source\ majd helyezzük ebbe a mappába a letöltött .Net telepítő .exe fájlt.
- Hozzunk létre még egy mappát ahova majd a tool a kész csomagot fogja tennni pl: C:\IntuneApps\destination\
- CMD vagy PowerShell használatával indítsuk el a prep toolt, és készítsük el az intunewinapp csomagot.
- cd C:\Tools\IntuneWin
- IntuneWinAppUtil.exe -c C:\IntuneApps\source -s setup.exe -o C:\IntuneApps\destination -q
- Vegyük fel az alkalmazásunkat az Intune-ba.
- Apps -> Windows -> Create -> App type -> Windows app (Win32) -> Csatoljuk a telepítőt -> Alkalmazzuk a következő beállításokat:

- Install command: powershell.exe -executionpolicy bypass .\windowsdesktop-runtime-8.0.11-win-x64.exe /install /quiet /norestart
- Uninstall command:
powershell.exe -executionpolicy bypass .\windowsdesktop-runtime-8.0.11-win-x64.exe /uninstall /quiet /norestart - Install behavior: System
- Detection rules
- Rules format: Manually configure detection rules
- Detection rules: File C:\Program Files\dotnet\shared\Microsoft.NETCore.App
Download Linkek
Download link: Dell Command | Configure
Download link: Dell Command | Endpoint Configure for Microsoft Intune
(Az utóbbi linkről egy exe-t tudunk letölteni, amit utána a Microsoft Win32 Content Prep Tool segítségével tudunk win32 formába csomagolni a. DotNet példa alapján elvégezhető.)
Dell Partner Portal
Mielőtt letöltjük a Dell Endpoint Configure-t és belemélyedünk a Dell alkalmazások deploymentjébe, policy-k létrehozásába és tesztelésébe, érdemes tenni egy kitérőt a Dell Partner Portálja irányába.
A Dell partner portálján (https://manage.dell.com/) egy felületen látjuk az összes gépet, a BIOS és BitLocker jelszavukat, BIOS config policy-kat.


Fontos kiemelni, hogy ilyenkor a BIOS és a BitLocker jelszavak nem kerülnek ki 3rd party szerverekre, hiszen Graph API-n keresztül kérdezi le a portál ezeket az adatokat.
Az Intune-t és a Dell Partner Portált egy Enterprise app segítségével lehet összekötni. Ezt egyszerűen a “Connect” gombra kattintva tudjuk elvégezni (https://manage.dell.com/):

Ilyenkor létrejön egy enterprise app az Entra portálon:

Ha figyelmesen megnézzük a fenti képet, látjuk, hogy az enterprise app-nak joga van alkalmazásokat létrehozni az Intune-ban. Ez azért jó, mert így nem kell a Dell Endpoint Configure appot manuálisan .intunewin-be csomagolni, egyszerűen a partner portálról deployoljuk az alkalmazást. (Én már publikáltam az alkalmazást, ezért nálam már nem látszik a publish gomb, de a “published to Intune” oszlopban fogod találni.)

A “Publish Now” gombra kattintva tudjuk az adott alkalmazást publikálni az Intune-ba:

Miután megjelent az alkalmazás az Intune-ban már csak deployolni kell a gépekre.
Ez jelentősen leegyszerűsíti az alkalmazás életciklus-kezelését, mert így mikor új verzió jelenik meg a Dell Command Endpoint Configure alkalmazásból nem kell manuálisan elkészíteni a csomagot, egyszerűen csak publikálni kell Intune-ba, majd cserélni az assignment-et a régi verzióról az új verzióra:

Mikor a DCECMI agent települ, átmenetileg a C:\Windows\IMECache\”5a68d398-3bd3-4aa0-923e-4259c8e90c26″ mappába kerül letöltésre, a telepítési próbálkozás után a fájl törlődik.

A mappa pontos nevét a deploy-olt app ID-ja adja:

Az alkalmazáshoz tartozó Service:

.cctk fájl létrehozása
Miután sikeresen deployoltuk a .net 8-at és a Dell Command Endpoint Configure alkalmazást a teszt eszközünkre, telepítsük a Dell Command Configure alkalmazást a géppünkre, és hozzuk létre az első .cctk konfig fájlt.
A demo érdekében a Secure Boot, TPM-et, és a Virtualizációt kapcsoltam be a példa policy-ban:

Az “export configuration” gomb segítségével tudjuk exportálni a .cctk fájlt.
<# Megjegyzés
Abban az esetben ha azonos jelszót szeretnénk minden gépre vagy egy adott gépcsoportra, keressük meg a listában a SetupPWD beállítást és adjuk meg a használni kívánt jelszót :

Kattintsunk a Value mezőbe és adjunk meg egy jelszót:

Nem csak a Setup jelszót, de System és HDD jelszót is tudunk konfigurálni a gépekre sok más ide kapcsolódó beállítással együtt(pl: Admin Setup Lockout). Érdemes átnézni minden elérhető beállítást. Térjünk vissza a SetupPWD-hez.
Kapni fogunk egy ilyen figyelmeztetést:

- Kattintsunk a “Continue”-ra.
- Nyissuk meg az exportált .cctk fájlt notepad-ben, így láthatjuk, hogy tényleg titkosítás nélkül került bele a jelszó.

Megjegyzés vége #>
Intune BIOS configuration policy
Hozzuk létre az Intune-ban a BIOS configuration policy-t amit deployolni tudunk az eszközökre.
- Hozzunk létre egy új Device configuration policy-t:
Device -> Windows -> Configuration -> Create -> New policy -> Platform -> Windows 10 and later -> Profile type -> Templates -> BIOS configurations and other settings - Adjunk egy nevet a policy-nak és egy leírást.
- Importáljuk a .cctk fájlt.
- “Disable per-device BIOS password protection”
- Abban az esetben, ha konfiguráltuk a SystemPWD beállítás, állítsuk be a kapcsolót “Yes” értékre.
- Ha az a cél, hogy minden gép külön BIOS jelszót kapjon, hagyjuk a kapcsolót “No” értéken. Ilyenkor a random generált jelszót Graph API segítségével tudjuk majd lekérdezni, vagy a már említett Dell Management portálról, mindjárt kitérünk erre is!
- Ha egyáltalán nem szeretnénk jelszót konfigurálni akkor is állítsuk a kapcsolót “Yes” értékre.

Deployoljuk a policy-t a teszt eszközünkre, majd ellenőrizzük a deployment sikerességét. Azt vettem észre, hogy a policy nem látszik az eszköznél, így csak a policy reportjában látjuk, hogy sikeres-e a deployment.

Érdemes ezeket a .cctk fájlokat valahol tárolni, így később tudjuk őket szerkeszteni, illetve ha explicit definiáltunk jelszót a .cctk fájlban akkor érdemes titkosított formátumban tárolni ezeket a fájlokat.
Hogyha összekapcsoltuk a Dell Management Portállal az Intune-t, a “BIOS Policies” menüben látni fogjuk az imént deployolt konfigurációt. Sajnos az Intune web GUI-n ezeket a beállításokat nem látjuk deployment után.

A portálon lehetőségünk van meglévő konfigurációt másolni és szerkeszteni:


Van pár fontos dolog amit érdemes észben tartani az Intune konfigurációkkal kapcsolatban.
- A policy akár 24-48 órát is igényelhet hogy érvénybe lépjen! Mindig kerüljük a “Pending” state-ben lévő policy deploymentek módosítását.
- Adott eszköz csoportra mindig csak egy BIOS config fájl legyen deployolva, különben konkurens beállítások érkezhetnek a gépre.
- A manuálisan definiált BIOS jelszavakat nem tudja módosítani a policy magától, csak az Intune által beállított jelszavakat. Szükséges a ValSetupPwd kapcsoló használata ebben az esetben.
- BIOS jelszó eltávolításához módosítsuk a policy “Disable per-device BIOS password protection” kapcsolót “Yes” értékre, majd deployoljuk újra a policy-t.
- A BIOS beállítások alkalmazását a DCECMI agent végzi, az Intune csak a konfigurációt szállítja a kliensre.
A teljes folyamat főbb elemei
- Az Intune letölti a konfigurációt az eszközre
- Az Intune Management Extension átadja a Dell agentnek
- A Dell Endpoint Configure agent alkalmazza a BIOS beállításokat
BIOS jelszó lekérdezése Graph Explorer-el
- Jelentkezzünk be az admin fiókunkal a Graph Explorer-be.
- Adjuk meg a szükséges app consentet a Graph Explorer-nek, hogy ki tudja olvasni a jelszavakat:

Írjuk be a következő resource path-et, a BIOS jelszavak lekérdezéséhez:
https://graph.microsoft.com/beta/deviceManagement/hardwarePasswordDetails
(Egyenlőre ez csak a Beta endpoint-al működik!)

Az ID segítségével tudjuk beazonosítani, hogy melyik az aktuális jelszó. (Ha a gépet újratelepítjük, új device ID-t kap, így nem fogja összefűzni az előzményeket, ilyenkor a policy is Fail állapotra tud futni.)

Ha device specifikusan szeretnénk keresni: https://graph.microsoft.com/beta/deviceManagement/hardwarePasswordDetails/{DeviceID}

A Dell Partner Portálon, egyszerűen keressünk a Service Tag alapján:

A portál felhívja a figyelmet rá, hogy a Graph API sync akár 24-48 óráig is eltarthat! Ezt a screenshot-ot 24 órával később készítettem mint a Graph Explorer-es képet. A két BIOS jelszó eltér, a portál az előző jelszót adja vissza. Sajnos a Portál tényleg lassan sync-el.
Szükséges jogosultságok a Dell Partner Portál használatához
Első körben, a Partner Portál eléréséhez szükséges jogosultságot adni az adott adminnak aki kezelni fogja a portált Enterprise app szinten:

Szokásos módon, vegyük fel a “Users and groups” menübe az adott admint.
Ezen felül szüksége lesz az adminunknak egy “Intune Administrator” RBAC Role-ra is.

Sajnos ez azt jelenti, hogy egy relatíve magas jogosultságra van szüksége az adminnak. Nekem nem sikerült a “Read Only Operator” Intune Role használata mellett kiolvasni a BIOS jelszót, igaz a portált elérni a read only admin, látja a gépeket, appokat és a policy-kat de nem tudja lekérdezni a BIOS jelszót sem a portálon keresztül sem a Graph Explorer-en keresztül. A BitLocker kulcs kiolvasás Intune-on és Entra portálon keresztül működik ha készítünk egy custom azure role-t, de a Dell Partner Portálnak és a Graph Explorer-nek ez kevés.

Verbose logolás
- Lehetőségünk van bekapcsolni a “Verbose loging” opciót.
- Registry path: HKLM\Software\Dell\EndpointConfigure\
- Hozzunk létre egy DWORD 32 registry kulcsot “LogVerbosity” néven és állítsuk be a “12” -es értéket.
- Indítsuk újra a DCECMI agent-et.
- A log-okat itt találod: C:\ProgramData\Dell\EndpointConfigure/EndpointConfigure.log

Deep Dive
Mikor a BIOS configuration policy letöltődik a kliensre, a szükséges .cctk fájl és egy metadata.json fájl a “C:\Windows\IMECache\HardwareConfiguration\’PolicyID’” mappába kerül.
Ezeket nem tárolja itt, ez csak egy transfer mappa.

Ezen felül egy remediation scriptet is letölt a “C:\Windows\IMECache\HealthScripts\’PolicyID’” mappába.

A detection script ellenőrzi, a feltételeket és, hogy szükséges-e a konfig frissítése:
- Ellenőrzi, hogy az agent telepítve van-e. Ha nincs telepítve akkor kilép a script.
- Lekérdezi a registryből a policy verziót
- HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\HardwareConfig\\PolicyVersion
- $newPolicyVersionInt -gt $curVersion
- Ellenőrzi a státuszt
- Status = Failed / Error / stb.
- Megnézi, hogy metadata változás történte
- IsMetadataChangeDetected = “true”

A script akkor futtatja a konfiguráció frissítést, ha új policy verzió érkezett, vagy változott a metadata, vagy korábban hibára futott ugyanazzal a verzióval.
Ha nem találod a HKLM:\SOFTWARE\Microsoft\IntuneManagementExtension\HardwareConfig\\PolicyVersion útvonalat registry-ben az normális, valószínűleg registry redirection történik. Ilyenkor a HKLM:\SOFTWARE\WOW6432Node\Microsoft\IntuneManagementExtension\HardwareConfig\PolicyID\PolicyVersion útvonalon kell keresni a bejegyzéseket.

Itt látszik az is, hogy a “Status” értéke “Failed“, tehát sikertelen volt a deployment. Ezt az Intune policy report felülete is megerősíti:

A DellCommandConfigure.log fájlban látjuk, hogy nem tudta a jelszót cserélni mert nem találja a régi jelszót:

Graph Explorer-ben ha lekérdezem a gépekhez tartozó jelszót, látszik is, hogy nem ismeri az előző jelszót, hiszen más volt a Device ID-ja.
A sárgával keretezett jelszó valójában nem került beállításra, a zöld keretben látható jelszó az aktuális jelszó.

Ilyenkor két megoldás van, vagy manuálisan kikapcsoljuk a BIOS-ban a jelszót, vagy készítünk egy .cctk fájlt, és a ValSetupPwd kapcsolóval megadjuk a régi jelszót, majd csak arra gépre deployoljuk a policy-t ahol a módosítást szeretnénk alkalmazni.
A demo alkalmával én manuálisan kapcsoltam ki a jelszót BIOS-ban. Reboot után lefutott az előzőleg sikertelenül kiértékelődött policy (hiszen a registry-ben a Status Fail volt), és beállította a sárgával keretezett jelszót.


Köszönöm, ha végigolvastad a cikket!
Ha van kérdésed vagy észrevételed, nyugodtan keress LinkedIn-en.
Leave a comment