X9.cz xetupby X9.cz

Specifikace & anotace

Verze: 0.6 Datum: 2026-04-28 x9/xetup Status: aktivni vyvoj
OK hotovo, v provozu Must fix zname chyby, nutno opravit TODO naplanovano, nerealizovano Open otevrena otazka Warn potencialni problem New nova feature Future dlouhodoby plan
00 Admin ucet (adminx9) OK
Vytvorit lokalni ucet adminx9Hotovo
Pridat do skupiny AdministratorsHotovo
Skryt z login obrazovky (SpecialAccounts\UserList = 0)Hotovo
Heslo nevypirsi, uzivatel nesmeni hesloHotovo
Zadne heslo (aktualne nastavovano z config.json)Opraveno – prazdny SecureString, config.json heslo odstranen
FullName = "X9.cz s.r.o." (via ADSI)Opraveno – ADSI SetInfo() po vytvoreni uctu
Proc bez hesla: Ucet je skryty pred uzivateli, slouzi pouze MSP adminstraci. Heslo v config.json by bylo ulozene citelne.
01 Bloatware removal OK
AppX balicky – odstraneni pro vsechny uzivatele a provisionedRemove-AppxPackage -AllUsers + Remove-AppxProvisionedPackage
Zachovano: Microsoft.WindowsCalculatorZamerny vyjimek
Windows Capabilities (Fax, IE, OpenSSH, WMP, WordPad, …)Remove-WindowsCapability
Windows Optional Features (PS 2.0, MediaPlayback, Recall, …)Disable-WindowsOptionalFeature
02 Software (winget) OK
7-Zip (7zip.7zip)OK
Adobe Acrobat Reader 64-bit (Adobe.Acrobat.Reader.64-bit)OK
OpenVPN Connect (OpenVPNTechnologies.OpenVPNConnect)OK
Atera Agent installInvoke-WebRequest + msiexec /i /qb – /qb umozni zobrazeni MFA okna
Adobe PDF default: .pdf -> AcroRd32 po instalaciOK – UCPD stop/start kolem zapisu asociace
UCPD.sys (kernel driver, od Feb 2024) blokuje UserChoiceStop-Service ucpd + 2s sleep + overeni zastaveni pred HKCR zapisem. Na Win11 24H2 je UCPD chranena sluzba a stop selze – logovano jako WARN (ne ERROR); HKCR zapis (system-wide) projde i tak.
Winget parallel joby: timeout 600s + kill zavislychWait-Job -Timeout 600; po vyprseni Kill + Remove zavislych jobu
Winget cesta explicitne predavana do parallel jobuOpraveno – Start-Job nezdedi PATH; winget.exe fullpath preda jako argument. Exit 3010 (success+reboot) nyni vyhodnocen jako OK.
Winget: --source winget u kazde instalaceField fix – fresh Win11 ISO ma App Installer se starym pinned certem, msstore source padá na 0x8a15005e a instalaci prerusi. --source winget msstore obejde. Plati i pro krok 11 (Dell).
Atera: detekce pres sluzbu Get-Service AteraAgentField fix – agent se obcas instaluje do C:\ProgramData\; existence sluzby je spolehlivejsi nez kontrola souboru. Fallback na cesty vc. ProgramData.
Atera Agent URL:
https://x9.servicedesk.atera.com/api/utils/agent-install/windows/?cid=31&aeid=50b72e7113e54a63ac76b96c54c7e337
03 System Registry (HKLM) OK
Bypass NRO (OOBE\BypassNRO = 1)OK
Zakaz auto-instalace TeamsConfigureChatAutoInstall = 0
Zakaz Cloud Optimized ContentOK
Zakaz Widgets / News and InterestsOK
Hesla bez expirace (net accounts /maxpwage:UNLIMITED)OK
Casova zona: Central Europe Standard TimeOK
Zakaz GameDVROK
Zakaz Smart App Control (Intelligent App Control)HKLM\SYSTEM\CurrentControlSet\Control\CI\Policy\VerifiedAndReputablePolicyState = 0. Permanentni – bez reset OS nelze zapnout zpet.
Zakaz hibernace (powercfg /hibernate off)Odstrani hiberfil.sys, predchazi problemum s power stavy pri deployi
Edge – Mandatory: zakaz First Run, telemetrieHideFirstRunExperience=1, DefaultBrowserSettingEnabled=0, DiagnosticData=0, FeedbackSurveysEnabled=0. Uzivatel nemuze zmenit.
Edge – initial_preferences: UI defaults (uzivatel muze zmenit)Zapise C:\Program Files (x86)\Microsoft\Edge\Application\initial_preferences. Edge precte jednou pri prvnim vytvoreni profilu. Nastavuje: oblibene vzdy viditelne, skryt Home, zakaz navrhu vyhledavani, cisty NTP, zakaz nakupniho asistenta, odmen a kolekci.
OneDrive uninstall (intentional)OneDriveSetup.exe /uninstall – odstrani pre-installed verzi. M365 si nainstaluje vlastni.
Powercfg nastaveni (spotreba energie)hibernate off; standby-ac 0, monitor-ac 60, standby-dc 30, monitor-dc 15
Proxy auto-detect zakaz (AutoDetect = 0)HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings
04 Default Profile + Personalizace OK
Taskbar: zarovnat vlevo (TaskbarAl = 0)Win11 default je center
Taskbar: skryt Search, Copilot, Task View, Widgets, ChatOK
Taskbar: zobrazit vsechny ikonky v tray (EnableAutoTray = 0)Win11 periodicky znovu skryva tray ikony po updatu
Taskbar: explicitni pinlist (TaskbarLayoutModification.xml)default/user: Pruzkumnik + Edge; admin: Pruzkumnik + Edge + PowerShell. PinListPlacement="Replace" – prazdny seznam by dovoloval Windows pridat Store a dalsi vychozi.
Explorer: zobrazovat pripony souboru (HideFileExt = 0)OK
Explorer: otevrit na This PC (LaunchTo = 1)OK
Explorer: ShowRecent = 0, ShowFrequent = 0Skryt nedavne a caste soubory v Quick Access
Explorer: FullPath = 1 (CabinetState)Zobrazovat plnou cestu v titulku okna Explorera
Start menu: vyprazdnit piny (Win11)ConfigureStartPins = {"pinnedList":[]}
Start menu: zakaz Bing vyhledavaniDisableSearchBoxSuggestions = 1
Copilot: zakaz (TurnOffWindowsCopilot = 1)OK
NumLock zapnout pri startu (InitialKeyboardIndicators = 2)OK
Klavesnice: CZ primarni + US sekundarniField fix – Set-WinUserLanguageList (cs-CZ + en-US) pro aktualniho uzivatele; Preload (1=00000405 CZ, 2=00000409 US) do Default hive i HKU\.DEFAULT (welcome screen + systemove ucty). Aplikuje se vzdy automaticky.
System tema (taskbar, Start): DarkOK
Aplikacni tema: LightOK
Accent barva: #223B47 (tmave modroseda)AccentColor DWORD = 0xFF473B22 (ABGR)
Accent barva na Start a taskbaru (ColorPrevalence = 1)OK
Pruhlednost: vypnuta (EnableTransparency = 0)OK
Tapeta: jednobarevna #223B47; Wallpaper="" v default hiveBackInfo prepise tapetu svym BMP; prazdny retezec = solid barva, ne cerna plocha
OneDrive RunOnce klic odstranenOdstraneni branil reinstalaci pres M365 – klice smazany ze skriptu
Metoda: reg load HKU\DefaultProfile C:\Users\Default\NTUSER.DAT → zapsat zmeny → reg unload HKU\DefaultProfile.
Personalizace (barvy, tapeta) je soucasti tohoto kroku – jeden hive load/unload, zadna kontigence s dalsimi skripty. BackInfo.exe (krok 07) prepise tapetu BMP pri kazdem logonu.
07 BackInfo (systemovy info na tapete) OK
07-desktop-info.ps1 SMAZAT – stary pristupNahrazeno novym 07-backinfo.ps1
Zkopirovat assets/Backinfo/ do C:\Program Files\Backinfo\Implementovano v 07-backinfo.ps1
Spustit backinfo_W11.ps1 (detekce OS, registry, Startup)Logika inlinovana v 07-backinfo.ps1
BackInfo.exe v assets/Backinfo/ k dispoziciHotovo
BackInfo auto-start pri kazdem logonu via Startup shortcutShortcut do ProgramData\StartUp vytvori 07-backinfo.ps1
BackInfo.ini konfiguruje: hostname (velky, centrovan), uzivatelske jmeno, OS verze, HW info (CPU, RAM, disk), sitove informace (IP, hostname).

Proc BackInfo misto vlastniho PS: BackInfo.exe podporuje Win10 i Win11 bez specialnich hacku, je stabilni a uz je v assets.
08 Windows aktivace OK Open
OA3 BIOS/UEFI klic – kontrola embedded keyWMI: SoftwareLicensingService.OA3xOriginalProductKey
Klic z config.json (activation.productKey)OK – priorita nad OA3 a GVLK
Fallback na GVLK (KMS client key) dle EditionIDRegistry EditionID (nelokalizovany) misto Win32_OperatingSystem.Caption
Volitelny KMS server (activation.kmsServer)OK
Preskocit pokud jiz aktivovanoOK
Typ klice: MAK vs KMS vs retail?Zavisi na klientovi – otevrena otazka
09 PC identita – Rename + C:\X9 OK
Rename-Computer dle parametru z GUI nebo config.jsondeployment.pcName v config.json; preskoci pokud neni nastaveno
Nastavit popis pocitace (Computer Description)LanmanServer\Parameters\SrvComment; default "X9 deployment"
Vytvorit C:\X9\ adresarovou strukturuC:\X9\Logs, Scripts, Assets
Vlastni ikonka pro C:\X9\ slozkuDesktop.ini + X9-ikona.ico z assets\Logo\
Rename-Computer vyzaduje restart. Tento krok bezi jako posledni pred finalnim shrnutim – po nem nasleduje automaticky odpocet a restart v GUI.
10 Network discovery + firewall OK
Nastavit sitovy profil jako Private (ne Public)Set-NetConnectionProfile pro vsechny pripojene adaptery
Povolit ping (ICMP) pro diagnostikuEnable-NetFirewallRule: FPS-ICMP4-ERQ-In + FPS-ICMP6-ERQ-In
Zapnout Network Discovery pro Private profilSet-NetFirewallRule -Group "@FirewallAPI.dll,-32752" (resource string, nezavisly na jazyku) + netsh fallback. Field fix: drivejsi -DisplayGroup "Network Discovery" selhalo na ceske lokalizaci Win11.
11 Dell Command | Update OK
Detekce Dell hardware (Win32_ComputerSystem)Non-Dell stroj krok preskoci bez chyby – stejny skript pro vsechny HW
Instalace Dell Command | Update via wingetDell.CommandUpdate.Universal – silent, Win10 + Win11
Spusteni vsech aktualizaci: drivery, firmware, BIOSdcu-cli.exe /applyUpdates -silent -reboot=disable
BIOS/firmware se staging – dokonci se pri restartuRestart na konci deploymetu vse dokonci
Non-Dell stroje: krok se preskoci automaticky, zadna chyba. Dell Latitude, OptiPlex, Precision, Vostro, XPS – vsechny podporovane DCU Universal.

Casova narocnost: 5–20 minut podle poctu dostupnych aktualizaci a rychlosti sitoveho pripojeni.
12 Windows Update OK
Instalace NuGet providera + PSWindowsUpdate modulu ze PSGalleryInstall-PackageProvider + Install-Module PSWindowsUpdate -Force
Prvni pruchod aktualizaci (bez rebootu)Install-WindowsUpdate -AcceptAll -IgnoreReboot. Vystup formatovan pres $_.Result + $_.Title (drive log zaplaval radky "System.__ComObject").
Reboot cyklus (exit 9) – pokracovani pres xetup resumeExit 9 = reboot needed; xetup ulozi stav, nastavi autologon + X9-Resume task, restartuje
Automaticky restart po skonceni deploymetu (GUI odpocet)xetup.exe zobrazi 60s odpocet + tlacitka "Restartovat ted" / "Zrusit restart"
Windows Update typicky vyzaduje vice restartovacich kolu. Kazdy pruchod skonci exit 9 (dalsi updaty) nebo exit 0 (hotovo). xetup resume cyklus automaticky opakuje az do uplne aktualizace. Max 5 rebootu na krok (ochrana proti smycce).

Pozor: Prvni restart spusti jak Windows Update, tak Dell firmware staging (krok 11).
04+ Taskbar pinned apps (profily) OK Open
-ProfileType parametr: default / admin / userParametr GUI nebo config.json; predano do skriptu 04
XML layout pro "default" a "user": Pruzkumnik + EdgePinListPlacement="Replace" – explicitni seznam zamezuje pridani Store a dalsich vychozich appek
XML layout pro "admin": Pruzkumnik + Edge + PowerShellTaskbarLayoutModification.xml; PowerShell.lnk z System32
Win11 24H2 kompatibilita layoutu24H2 vyzaduje ProvisionedLayoutModification.xml – nutno otestovat na realne instalaci
Layout se pri aplikaci zamkne. UnlockStartLayout scheduled task (registrovany v kroku 04) ho odemkne 5 min po startu, aby uzivatel mohl dale upravovat.
Arc xetup.exe – Go GUI (Walk / Win32) OK
Single binary (go:embed scripty + assets)embed.go + cmd/xetup/main.go; ~5 MB .exe, zadne externi zavislosti
Walk GUI – Win32 nativni ovladky, bez OpenGLFunguje na VMware ESXi / SVGA II (Fyne/OpenGL nefungovalo). internal/gui/gui.go
Formular: PC jmeno, popis, product key, profilFaze 1 – config form pred spustenim
Checklist kroku (on/off per-feature) + nacist / ulozit config.jsonTlacitka "Nacist config..." a "Ulozit config..." pro per-klient presety
Live log + prubehovy strip kroku (0–12)Barevne indikatory: · cekajici, ► bezici (modra), ✓ OK (zelena), ✗ chyba (cervena)
Summary s odpoctem a automatickym restartemFaze 3 – 60s odpocet, tlacitka "Restartovat ted" / "Zrusit restart"
UAC requireAdministrator (app.manifest + rsrc)Windows vyzada elevaci pri spusteni; ComCtl32 v6 + DPI awareness
PowerShell okno skryte na pozadiSysProcAttr.HideWindow = true; PS chyby filtrovane (At line:, CategoryInfo atd.)
Watchdog timer: 30 min ticho = kill skriptutime.AfterFunc s Reset pri kazdem vystupu – zabiji zavisly PS proces
Reboot loop ochrana: max 5 pokusu na krokRetryCounts v state.json; po 5 restartech krok oznacen ERROR a preskocen
Atomicky zapis state.json (write tmp + rename)Prevence korupce pri vypadku napajeni behem zapisu
E-mail report: 3 pokusy + lokalni HTML fallbackBackoff 0/1/5s; vzdy ulozi C:\X9\report.html bez ohledu na SMTP
Hive unload retry (5 pokusu, GC pred kazdym)Prevence "hive in use" chyby pri reg unload ntuser.dat
Resume fix: StepsByIDs nyni nastavuje Enabled=trueOpravena kriticka chyba – resume mode preskakoval vsechny kroky
Code signing: Azure Trusted Signing (jsign)CI podepise xetup.exe certem X9.cz s.r.o. + RFC3161 timestamp. Trusted Signing cert je kratkodoby (~3 dny) – timestamp udrzi podpis platny i po expiraci. SmartScreen/UAC pak ukaze overeneho vydavatele.
Self-update: stahnout novou verzi z xetup.x9.cz/dlOverit hash pred spustenim
config.json: per-klient preset na USBJmeno PC prefix, SW seznam, klic – lezi vedle .exe
Struktura: cmd/xetup/, internal/config/, internal/gui/, internal/runner/

Go zavislosti: github.com/lxn/walk (Win32 GUI), golang.org/x/sys

Build: CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -H windowsgui" ./cmd/xetup/
CI (Forgejo Actions) sestavi, podepise (Azure Trusted Signing, cert X9.cz s.r.o. + RFC3161 timestamp pres jsign) a publikuje automaticky pri kazdem push na main.

Spolehlivost (v0.6): Watchdog zabiji zavisle skripty po 30 min ticha. Reboot-loop ochrana omezi opakovani kazdeho kroku na 5 restartu. State file se zapisuje atomicky (tmp+rename). E-mail report se zkusi 3x s backoff a vzdy ulozi lokalni HTML kopii.
Arc spec.yaml – single source of truth Future
Popis vsech kroku: id, label, script, defaultxetup.exe cte spec.yaml pro TUI checklist
Pole "requires" (napr. activation vyzaduje productKey)TUI upozorni pokud chybi
Auto-generovana dokumentace z spec.yamlCI akce: spec.yaml → tato stranka
spec.yaml jako SSOT pro tuto stranku i deploy skriptyIdealni stav: stranka vzdy odpovida kodu
Navrh struktury spec.yaml:
steps: - id: admin-account label: "Admin account (adminx9)" script: 00-admin-account.ps1 default: true - id: activation label: "Windows activation" script: 08-activation.ps1 default: true requires: [productKey]
+ Novy pozadavek na automatizaci Pozadavky

Chcete automatizovat neco, co skript zatim neresi? Napiste pozadavek sem – ulozi se do repozitare. Technicky tym ho projde a zaradi do planu.

Nacitam pozadavky...