{% extends "base.html" %} {% block title %}{{ friendly_name }} - Unattend{% endblock %} {# Unattend tab. Rows carry data-orig = their index in the file as parsed, so a save can tell an edited or moved item from a new one (services/unattend.py, "Form edits"). All behaviour is in static/unattend-editor.js; class names are una-* so the old handlers in static/app.js never fire here. #} {% block extra_head %} {% endblock %} {% macro note(item) -%} {% if item.note %}
{{ item.note | join(' | ') }}
{% endif %} {%- endmacro %} {% macro cmd_row(cmd, idx, field, limit) -%}
{{ idx + 1 }}
{{ note(cmd) }}
Order {{ cmd.order or '?' }}
{% if cmd.inner_note %} {{ cmd.inner_note | join(' | ') | truncate(160) }}{% endif %}
{%- endmacro %} {% block content %} {% set header_subtitle = 'Deploy/FlatUnattendW10.xml' %} {% set header_actions %} Unsaved changes {% if last_save %}
{% endif %} {% endset %} {% include "_image_header.html" %} {% if unattend_override %}
{{ unattend_override }} exists in this image. PESetup loads that file first, so edits to Deploy/FlatUnattendW10.xml here do not reach the PCs until it is removed.
{% endif %} {% if not file_exists %}
This image has no Deploy/FlatUnattendW10.xml yet. The form starts from an empty answer file; saving creates it.
{% endif %} {% set lint_errors = lint | selectattr('level', 'equalto', 'ERROR') | list %}
{% if file_exists %} Modified {{ file_mtime | local_dt }} {{ file_size | filesizeformat }} {{ backup_count }} backup{{ '' if backup_count == 1 else 's' }} {% endif %} {% if not lint %} Lint clean {% elif lint_errors %} {{ lint_errors | length }} lint error{{ '' if lint_errors | length == 1 else 's' }} {% else %} {{ lint | length }} lint warning{{ '' if lint | length == 1 else 's' }} {% endif %}
{% if lint %}
The file as it is now: checks from scripts/lint-unattend.py. {% if lint_errors %}One ERROR invalidates the whole answer file for its pass; fix it before imaging.{% endif %}
{% endif %}
System and regional
Machine settings specialize pass, Microsoft-Windows-Shell-Setup
PESetup replaces %serialnumber%; * lets Windows pick a name.
International oobeSystem pass, Microsoft-Windows-International-Core
{% for key, label in [("input_locale", "Input locale"), ("system_locale", "System locale"), ("ui_language", "UI language"), ("user_locale", "User locale")] %}
{% endfor %}
Driver paths {{ data.driver_paths | length }}
Folders DISM searches for drivers while servicing the applied image (offlineServicing pass). W:\Drivers is where PESetup unpacks this model's driver pack.
{% for dp in data.driver_paths %}
{{ loop.index }}
{% endfor %}
No driver paths. Windows only uses the drivers in the image.
Accounts and sign-in
User accounts (local) {{ data.user_accounts | length }}
{% for acct in data.user_accounts %}
{{ loop.index }}
{% endfor %}
No local accounts.
AutoLogon clear the user name to remove AutoLogon
Out-of-box experience (OOBE)
OOBE settings "Not set" = not in the file (Windows default)
{% set oobe_fields = [ ("HideEULAPage", "Hide EULA page", ["true", "false"]), ("HideOEMRegistrationScreen", "Hide OEM registration screen", ["true", "false"]), ("HideOnlineAccountScreens", "Hide online account screens", ["true", "false"]), ("HideWirelessSetupInOOBE", "Hide wireless setup", ["true", "false"]), ("HideLocalAccountScreen", "Hide local account screen", ["true", "false"]), ("SkipUserOOBE", "Skip user OOBE", ["true", "false"]), ("SkipMachineOOBE", "Skip machine OOBE", ["true", "false"]), ("NetworkLocation", "Network location", ["Home", "Work", "Other"]), ("ProtectYourPC", "ProtectYourPC", ["1", "2", "3"]), ] %} {% set oobe_hints = {"ProtectYourPC1": " (recommended)", "ProtectYourPC2": " (updates only)", "ProtectYourPC3": " (skip)"} %} {% for key, label, opts in oobe_fields %}
{% endfor %}
OOBE time zone oobeSystem pass; separate from the specialize time zone above
Setup commands
Each list runs top to bottom as a tested sequence; order matters. Reorder with the arrows or by dragging the handle. Comments shown in italics are XML comments from the file; they move with the command below them. Limits (one over invalidates the whole pass): specialize command {{ limits.path }} characters, first logon command {{ limits.commandline }}, description {{ limits.description }}.
Specialize commands {{ data.specialize_commands | length }}
RunSynchronous: run as SYSTEM during the specialize pass, before anyone signs in.
{% for cmd in data.specialize_commands %}{{ cmd_row(cmd, loop.index0, 'path', limits.path) }}{% endfor %}
No specialize commands.
First logon commands {{ data.firstlogon_commands | length }}
FirstLogonCommands: run in the first user session (the AutoLogon account), oobeSystem pass.
{% for cmd in data.firstlogon_commands %}{{ cmd_row(cmd, loop.index0, 'commandline', limits.commandline) }}{% endfor %}
No first logon commands.
Raw XML Review changes shows the diff of this text against the file

For what the form does not cover. This text is written exactly as it stands; edits made on the Form view are not part of a Raw XML save (and the other way round).

{# Row templates for Add #} {% endblock %} {% block extra_scripts %} {% endblock %}