{% extends "base.html" %} {% block title %}Dell Drivers and BIOS - PXE Server Manager{% endblock %} {% macro size(n) -%} {%- if not n -%}-{%- elif n >= 1000000000 -%}{{ '%.2f' | format(n / 1000000000) }} GB{%- elif n >= 1000000 -%}{{ '%.0f' | format(n / 1000000) }} MB{%- else -%}{{ '%.0f' | format(n / 1000) }} KB{%- endif -%} {%- endmacro %} {% macro drv_badge(s) -%} {% if s == 'update' %}Update {% elif s == 'current' %}Current {% elif s == 'no-match' %}No match {% elif s == 'unknown-version' %}Unknown version {% else %}{{ s }}{% endif %} {%- endmacro %} {% macro bios_badge(s) -%} {% if s == 'update' %}Update {% elif s == 'current' %}Current {% elif s == 'different-file-family' %}Different file {% elif s == 'ambiguous' %}Ambiguous {% elif s == 'no-match' %}No match {% elif s == 'error' %}Catalog error {% else %}{{ s }}{% endif %} {%- endmacro %} {% macro stage_badge(s) -%} {% if s == 'ready' %}Ready {% elif s == 'applied' %}Applied {% elif s in ('error', 'interrupted', 'cancelled') %}{{ s | capitalize }} {% else %}{{ s | capitalize }}{% endif %} {%- endmacro %} {% block extra_head %} {% endblock %} {% block content %}
{% set chk = prog.check %} {% set dl = prog.download %} {% set n_drv = scan.drivers | selectattr('status', 'equalto', 'update') | list | length if scan else 0 %} {% set n_bios = scan.bios | selectattr('status', 'equalto', 'update') | list | length if scan else 0 %}

Compares every Win11 entry in the three images' HardwareDriver.json and every line of the WinPE BIOS manifest models.txt with Dell's current catalogs. Downloads are checked against Dell's sha256, driver packs are repacked into the zip PESetup expects, and nothing on the share changes until you preview and apply. Applying puts the new file next to the one it replaces, rewrites the maps and models.txt (backed up first, never reordered) and never deletes old zips or BIOS files.

{# ---- Catalogs, check job, speed cap ------------------------------------- #}
Dell catalogs
{% if prog.check_running %}
{{ chk.step or 'Starting' }}...
{% elif chk.state == 'error' %}
Last check failed: {{ chk.error }}
{% elif chk.state == 'interrupted' %}
The last check stopped before it finished. Run it again.
{% endif %} {% if scan %}
Last check: {{ scan.checked | local_dt }}
{% if history and history[0].at and scan.checked and history[0].at > scan.checked %}
These results are from before the last apply ({{ history[0].at | local_dt }}), so rows it changed can still show as updates. Run Check for updates again to refresh them.
{% endif %}
{% set cats = scan.catalogs or {} %} Driver pack catalog dated {{ cats.drivers | local_dt }}, catalog index dated {{ cats.index | local_dt }}. Maps read: {{ (scan.images or []) | join(', ') or 'none' }}. {% if scan.cab_errors %}{{ scan.cab_errors | length }} per-model catalog(s) failed to load.{% endif %}
{% for e in scan.map_errors %}
{{ e }}
{% endfor %} {% elif not prog.check_running %}

Not checked yet. Check for updates fetches Dell's two catalog files (under 1 MB) and the small per-model BIOS catalogs it needs, then compares.

{% endif %}
{% if scan %}
{# ---- Driver packs ------------------------------------------------------ #}
Win11 driver packs {{ scan.drivers | length }}

One row per zip in use; standard and engineer share their zips. Updates are ticked unless a warning needs a decision. An entry whose current pack carries NVIDIA drivers is skipped at apply time if the Dell pack has no NVIDIA INFs.

{% for r in scan.drivers %} {% endfor %}
Models (WMI)ImagesCurrent fileDell packStatus
{% if r.pack and r.status != 'current' or r.pack and r.warnings %}{% endif %} {{ r.tokens | join(', ') }} {% for i in r.images %}{{ i | replace('gea-', '') }}{% if not loop.last %}, {% endif %}{% endfor %} {{ r.current }}{% if r.cur_ver %} {{ r.cur_ver }}{% endif %} {% if r.pack %} {{ r.pack.name }}
{{ r.pack.ver }}, {{ r.pack.date }}, {{ size(r.pack.size) }}, stages as {{ r.pack.zip }}
{% else %}-{% endif %}
{{ drv_badge(r.status) }} {% for w in r.warnings %}
{{ w }}
{% endfor %} {% for n in r.notes %}
{{ n }}
{% endfor %}
{# ---- BIOS -------------------------------------------------------------- #}
BIOS (models.txt) {{ scan.bios | length }}

One row per manifest line. check-bios.cmd flashes the file of the FIRST line whose text is in the machine's model name, so each Dell model is credited to the first line that catches it. Applying changes only the file and version fields of the ticked lines; their order and the comments stay as they are.

{% for r in scan.bios %} {% endfor %}
LineCurrent fileDell latestStatus
{% if r.candidates and (r.status != 'current') %}{% endif %} {{ r.sub }} {{ r.current }} {{ r.cur_ver }} {% if r.candidates | length > 1 %} {% elif r.candidates %} {% set c = r.candidates[0] %} {{ c.file }}
{{ c.version }}, {{ c.date }}, {{ size(c.size) }}; {{ c.models | join(', ') | truncate(90) }}
{% else %}-{% endif %}
{{ bios_badge(r.status) }} {% for w in r.warnings %}
{{ w }}
{% endfor %} {% for n in r.notes %}
{{ n }}
{% endfor %}
Runs in the background at {{ '%g MB/s' | format(settings.max_mbps) if settings.max_mbps else 'full speed (no cap)' }}; you can leave this page. Already staged items are not fetched again.
{# ---- Missing coverage ---------------------------------------------------- #} {% if scan.missing %}
Seen models without coverage {{ scan.missing | length }}

Machines that booted WinPE here with no Win11 driver entry or no BIOS line. For information only: new entries are added by hand (see Hardware Coverage).

{% for m in scan.missing %} {% endfor %}
ModelSKUMissingDell pack that would cover itDell BIOS
{{ m.model }} {{ m.skus | join(', ') or '-' }} {% if m.no_drivers %}drivers ({{ m.no_drivers | map('replace', 'gea-', '') | join(', ') }}){% endif %}{% if m.no_drivers and m.no_bios %}, {% endif %}{% if m.no_bios %}BIOS line{% endif %} {% if m.pack %}{{ m.pack.name }} ({{ m.pack.ver }}, {{ size(m.pack.size) }}){% elif m.no_drivers %}none found{% else %}-{% endif %} {% if m.bios %}{{ m.bios.file }} ({{ m.bios.version }}){% elif m.no_bios %}none found{% else %}-{% endif %}
{% endif %} {% endif %} {# ---- Staged downloads ---------------------------------------------------- #}
Staged downloads {% if dl.state %}last run {{ dl.state }}{% if dl.finished %} {{ dl.finished | local_dt }}{% endif %}{% if dl.error %}: {{ dl.error }}{% endif %}{% endif %} {% if prog.download_running %}
{% endif %}
{% if staged %}
{% for it in staged %} {% endfor %}
ItemReplacesSizeStatus
{% if it.status in ('ready', 'error', 'cancelled', 'interrupted', 'applied') %}{% endif %} {{ it.zip if it.kind == 'driver' else it.name }}
{{ 'Driver pack' if it.kind == 'driver' else 'BIOS' }} {{ it.ver }}{% if it.kind == 'driver' %} from {{ it.name }}{% endif %} {% if it.infs %}; {{ it.infs }} INFs, {{ it.nvidia_infs }} NVIDIA{% endif %}
{% if it.kind == 'driver' %}{% for c in it.replaces %}
{{ c }}
{% endfor %} {% else %}{% for ln in it.lines %}
{{ ln.sub }}
{% endfor %}{% endif %}
{{ size(it.size_file or it.size) }} {{ stage_badge(it.status) }} {% if it.status in ('queued', 'downloading', 'verified', 'extracting', 'zipping') %}
{{ it.percent if it.percent is not none else 0 }}%
{% endif %} {% if it.error %}
{{ it.error }}
{% endif %} {% if it.applied %}
apply {{ it.applied }}
{% endif %}
{% else %}

Nothing staged. Tick rows above and use Download selected.

{% endif %}
{# ---- Preview ------------------------------------------------------------- #} {% if preview %}
Preview: what Apply will change
{% for image, rows in preview.drivers.items() %}
{{ image }} HardwareDriver.json
{% if rows %}
{% for r in rows %} {% endfor %}
Entry modelsOld fileNew fileFolder
{{ r.models }}{{ r.old }}to {{ r.new }}{{ r.dir }}
{% else %}

No change.

{% endif %} {% endfor %}
models.txt
{% if preview.bios %}
{% for b in preview.bios %}{% endfor %}
Old lineNew line
{{ b.old }}to{{ b.new }}
{% else %}

No change.

{% endif %} {% for e in preview.errors %}
{{ e }}
{% endfor %} {% for s in preview.skipped %}
Will skip {{ s }}
{% endfor %} {% if preview.missing %}
Not ready, ignored: {{ preview.missing | join(', ') }}
{% endif %}
{% for k in preview_keys %}{% endfor %} Cancel
{% endif %} {# ---- History ------------------------------------------------------------- #} {% if history %}
Applied
{% for h in history %} {% endfor %}
WhenChangesBackups
{{ h.at | local_dt }}
{{ h.id }}
{% for d in h.drivers %}
{{ d.old }} to {{ d.new }}
{% endfor %} {% for b in h.bios %}
{{ b.new }}
{% endfor %} {% for s in h.skipped %}
skipped {{ s }}
{% endfor %} {% for e in h.errors %}
{{ e }}
{% endfor %}
{% for p, b in h.backups.items() %}
{{ b.rsplit('/', 1)[-1] }}
{% endfor %}
{% if h.rolled_back %}Rolled back {% elif h.backups %}
{% endif %}
{% endif %}
{% if prog.check_running or prog.download_running %} {% endif %} {% endblock %}