{% if b.sync %}From {{ b.sync.computer or 'unknown PC' }}{% if b.sync.user %} ({{ b.sync.user }}){% endif %}{% if b.sync.created %}, {{ b.sync.created | local_dt }}{% endif %}. {% if b.sync.source %}Source {{ b.sync.source }}.{% endif %} {{ b.sync.listed }} vendor files listed, {{ b.files }} uploaded ({{ size(b.bytes) }}).{% endif %} Folder {{ incoming }}/{{ b.name }}.
{% if b.sync_error %}Validation hashes every uploaded file against sync.json, checks that every other listed file is unchanged in the live BPRT, applies the vendor's package rules and works out what activating the batch would change. Nothing on the share changes.
This batch cannot be activated. Fix the cause on the work PC and run Sync-BPRT.ps1 again (it makes a new batch), then delete this one.
| Tenant / purpose | Live now | After activation | |
|---|---|---|---|
| {{ p.prefix }} | {% for o in p.old %} {{ o.version }} {{ fname(o.name) }} {% else %}none{% endfor %} |
to | {% for n in p.new %} {{ n.version }} {{ fname(n.name) }} {% else %}none (removed){% endfor %} |
No package changes.
{% endif %}| Zip | Live size | New size |
|---|---|---|
| {{ z.path }} | {{ size(z.old_size) if z.old_size is not none else 'new' }} | {{ size(z.new_size) }} |
Activation adds a UTF-8 byte order mark to {{ res.bom_fix | length }} script{{ 's' if res.bom_fix | length != 1 }} that hold{{ 's' if res.bom_fix | length == 1 }} non-ASCII text without one (Windows PowerShell 5.1 would read them as ANSI):
Site files carried over from the live BPRT as they are: {% for o in overlay %}{{ o }}{% if not loop.last %}, {% endif %}{% endfor %}.
Builds BPRT.new beside the live folder (hard links: unchanged files take no space), puts the site files back on top, checks it once more, then swaps it in with two renames: the live folder becomes BPRT-archive/full-<time> (roll back to it at any time) and BPRT.new becomes BPRT. Every image links to that path, so they all switch at once.
_shared/Applications/BPRT is the vendor's bulk-enroll folder (MCL packages, Office zips, orchestrator scripts) that every image links to and PESetup copies to every PC. The vendor keeps it current on the GE work PC with MediaCreator Lite; Sync-BPRT.ps1 on that PC compares it with this server's copy and uploads only what changed, over SSH, into BPRT-incoming. Here a batch is validated, its changes shown, and activated with the old folder archived. The site's own files ({% for o in overlay %}{{ o }}{% if not loop.last %}, {% endif %}{% endfor %}) are never touched by a sync.
{{ imaging_alert(imaging) }} {{ job_panel(job) }} {# ---- Live folder --------------------------------------------------------- #}{{ live.path }}: {{ live.count }} files, {{ size(live.bytes) }}{% if live.newest %}, newest file {{ live.newest | timestamp_fmt }}{% endif %}.
{% if live.is_link %}| Tenant / purpose | File | Version | Size |
|---|---|---|---|
| {{ p.prefix or '-' }}{% if p.conflict %} Duplicate{% endif %} | {{ fname(p.filename) }} | {{ p.version or '?' }} | {{ size(p.size) }} |
No packages.
{% endif %}| {{ o.name }} | {% if o.ok %}Present {% elif o.present %}Vendor copy {% else %}Missing{% endif %} {% if o.vendor_copy is defined %}{% if o.vendor_copy %}vendor dialog kept{% else %}no vendor dialog{% endif %}{% endif %} |
| Batch | From | Uploaded | Status | |
|---|---|---|---|---|
| {% if b.uploading %}{{ b.name }}{% else %}{{ b.name }}{% endif %} | {% if b.sync %}{{ b.sync.computer or '-' }}{% if b.sync.created %} {{ b.sync.created | local_dt }} {% endif %}{% else %}-{% endif %} |
{{ b.files }} file{{ 's' if b.files != 1 }}, {{ size(b.bytes) }} | {% if b.uploading %}Uploading {% elif b.sync_error %}Bad sync.json {% elif not b.sync %}No sync.json {% else %}{{ val_badge(b.validation) }}{% endif %} | {% if not b.uploading and b.sync %} {{ 'Review' if b.validation else 'Open' }} {% if not b.validation %} {% endif %} {% endif %} |
Nothing waiting. Run Sync-BPRT.ps1 on the work PC (below), or upload a zip.
{% endif %}powershell -ExecutionPolicy Bypass -File .\Sync-BPRT.ps1 -DryRun powershell -ExecutionPolicy Bypass -File .\Sync-BPRT.ps1It reads this server's manifest, hashes the local folder (C:\ProgramData\GEAerospace\MediaCenter\Cache\Deploy\Applications\BPRT unless -Source says otherwise), parse-checks the vendor scripts, and uploads the new and changed files with one sftp session: type the pxe password once.
No SSH from that PC? Run it with -ZipOut C:\Temp\bprt.zip and upload the zip below. A zip of the whole vendor folder works too, but is taken as the complete new folder: anything not in it is removed from BPRT (and kept in the archive). Uploads land in {{ incoming }}.
| Uploaded zip, not unpacked | Size | |
|---|---|---|
| {{ z.name }} | {{ size(z.size) }} |
Each activation and rollback keeps the folder it replaced in BPRT-archive. Unchanged files are hard links shared with the live folder, so an archive only costs the files that differ ("own size").
| Archive | MCL packages | Files | Own size | |
|---|---|---|---|---|
| {{ a.name }} {{ a.modified | timestamp_fmt }} |
{% for p in a.packages %} {{ fname(p) }} {% else %}none{% endfor %}
{% if a.missing_required %}missing {{ a.missing_required | join(', ') }} {% endif %} |
{{ a.count }}, {{ size(a.bytes) }} | {{ size(a.own_bytes) }} |
None yet. The first activation archives the current folder here.
{% endif %}| When | What | Previous folder |
|---|---|---|
| {{ h.at | local_dt }} |
{% if h.kind == 'rollback' %}Rolled back to {{ h.restored }}
{% else %}Activated {{ h.batch }}{% if h.sync and h.sync.computer %} from {{ h.sync.computer }}{% endif %}:
{{ h.counts.new or 0 }} new, {{ h.counts.changed or 0 }} changed, {{ h.counts.removed or 0 }} removed
{% for p in h.ppkg %} {{ p.prefix }}: {{ p.old | map(attribute='version') | join(', ') or 'none' }} to {{ p.new | map(attribute='version') | join(', ') or 'none' }} {% endfor %}
{% endif %}
|
{{ h.archive }} |