Specifikace & anotace
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
Stavajici kroky (scripty)
00
Admin ucet (adminx9)
OK
Vytvorit lokalni ucet adminx9 | Hotovo |
| Pridat do skupiny Administrators | Hotovo |
| Skryt z login obrazovky (SpecialAccounts\UserList = 0) | Hotovo |
| Heslo nevypirsi, uzivatel nesmeni heslo | Hotovo |
| 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 provisioned | Remove-AppxPackage -AllUsers + Remove-AppxProvisionedPackage |
| Zachovano: Microsoft.WindowsCalculator | Zamerny 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 install (pod SYSTEM) | Invoke-WebRequest + msiexec /i /qn spustene jako NT AUTHORITY\SYSTEM pres docasny scheduled task. Pod SYSTEM se agent registruje tise bez MFA okna – bez zasahu technika. |
| Adobe PDF default: .pdf -> AcroRd32 po instalaci | OK – UCPD stop/start kolem zapisu asociace |
| UCPD.sys (kernel driver, od Feb 2024) blokuje UserChoice | Stop-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 zavislych | Wait-Job -Timeout 600; po vyprseni Kill + Remove zavislych jobu |
| Winget cesta explicitne predavana do parallel jobu | Opraveno – Start-Job nezdedi PATH; winget.exe fullpath preda jako argument. Exit 3010 (success+reboot) nyni vyhodnocen jako OK. |
Winget: --source winget u kazde instalace | Field 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 AteraAgent | Field 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 Teams | ConfigureChatAutoInstall = 0 |
| Zakaz Cloud Optimized Content | OK |
| Zakaz Widgets / News and Interests | OK |
Hesla bez expirace (net accounts /maxpwage:UNLIMITED) | OK |
| Casova zona: Central Europe Standard Time | OK |
| Zakaz GameDVR | OK |
| 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, telemetrie | HideFirstRunExperience=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, Chat | OK |
| 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. Pruzkumnik se pinuje pres AUMID DesktopApplicationID="Microsoft.Windows.Explorer", ne vlastni .lnk – ten by spoustel druhy Explorer a slo by ho spatne odepnout. |
| Explorer: zobrazovat pripony souboru (HideFileExt = 0) | OK |
| Explorer: otevrit na This PC (LaunchTo = 1) | OK |
| Explorer: ShowRecent = 0, ShowFrequent = 0 | Skryt 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 vyhledavani | DisableSearchBoxSuggestions = 1 |
| Copilot: zakaz (TurnOffWindowsCopilot = 1) | OK |
| NumLock zapnout pri startu (InitialKeyboardIndicators = 2) | OK |
| Klavesnice: CZ primarni + US sekundarni | Field 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): Dark | OK |
| Aplikacni tema: Light | OK |
| Accent barva: #223B47 (tmave modroseda) | AccentColor DWORD = 0xFF473B22 (ABGR) + AccentPalette (REG_BINARY, 8 odstinu). Bez AccentPalette Win11 vlastni accent na Startu/taskbaru ignoruje a spadne na default – proto se barvy „neaplikovaly vsude". |
| Accent barva na Start a taskbaru (ColorPrevalence = 1) | Themes\Personalize i DWM\ColorPrevalence = 1 (Start/taskbar i zahlavi a ohraniceni oken). Rezim Custom: tmavy system + svetle aplikace. |
| Motiv aplikovan ve vsech profilech | Default hive (novi uzivatele) + aktualni HKCU + HKU\.DEFAULT (lock/welcome screen, systemovy kontext). |
| Pruhlednost: vypnuta (EnableTransparency = 0) | OK |
| Tapeta: jednobarevna #223B47; Wallpaper="" v default hive | BackInfo prepise tapetu svym BMP; prazdny retezec = solid barva, ne cerna plocha |
| OneDrive RunOnce klic odstranen | Odstraneni branil reinstalaci pres M365 – klice smazany ze skriptu |
Metoda:
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.
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 pristup | Nahrazeno 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 dispozici | Hotovo |
| BackInfo auto-start pri kazdem logonu via Startup shortcut | Shortcut do ProgramData\StartUp vytvori 07-backinfo.ps1 |
Pozadi #223B47 (BackgroundColor = 2243399) | BackInfo bere hodnotu jako 0xRRGGBB (RGB), ne COLORREF/BGR – tj. 0x223B47 = 2243399. Drivejsi BGR hodnota (4668194) renderovala prohozene R/B. |
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.
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 key | WMI: SoftwareLicensingService.OA3xOriginalProductKey |
Klic z config.json (activation.productKey) | OK – priorita nad OA3 a GVLK |
| Fallback na GVLK (KMS client key) dle EditionID | Registry EditionID (nelokalizovany) misto Win32_OperatingSystem.Caption |
Volitelny KMS server (activation.kmsServer) | OK |
| Preskocit pokud jiz aktivovano | OK |
| 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.json | deployment.pcName v config.json; preskoci pokud neni nastaveno |
| Nastavit popis pocitace (Computer Description) | LanmanServer\Parameters\SrvComment; default "X9 deployment" |
Vytvorit C:\X9\ adresarovou strukturu | C:\X9\Logs, Scripts, Assets |
Vlastni ikonka pro C:\X9\ slozku | Desktop.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 diagnostiku | Enable-NetFirewallRule: FPS-ICMP4-ERQ-In + FPS-ICMP6-ERQ-In |
| Zapnout Network Discovery pro Private profil | Set-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 winget | Dell.CommandUpdate.Universal – silent, Win10 + Win11 |
| Spusteni vsech aktualizaci: drivery, firmware, BIOS | dcu-cli.exe /applyUpdates -silent -reboot=disable |
| BIOS/firmware se staging – dokonci se pri restartu | Restart 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.
Casova narocnost: 5–20 minut podle poctu dostupnych aktualizaci a rychlosti sitoveho pripojeni.
12
Windows Update
OK
| Instalace NuGet providera + PSWindowsUpdate modulu ze PSGallery | Install-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 resume | Exit 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).
Pozor: Prvni restart spusti jak Windows Update, tak Dell firmware staging (krok 11).
04+
Taskbar pinned apps (profily)
OK
Open
-ProfileType parametr: default / admin / user | Parametr GUI nebo config.json; predano do skriptu 04 |
| XML layout pro "default" a "user": Pruzkumnik + Edge | PinListPlacement="Replace" – explicitni seznam zamezuje pridani Store a dalsich vychozich appek |
| XML layout pro "admin": Pruzkumnik + Edge + PowerShell | TaskbarLayoutModification.xml; PowerShell.lnk z System32 |
| Win11 24H2 kompatibilita layoutu | 24H2 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.
Architektura
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 OpenGL | Funguje na VMware ESXi / SVGA II (Fyne/OpenGL nefungovalo). internal/gui/gui.go |
| Formular: PC jmeno, popis, product key, profil | Faze 1 – config form pred spustenim |
| Checklist kroku (on/off per-feature) + nacist / ulozit config.json | Tlacitka "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 restartem | Faze 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 pozadi | SysProcAttr.HideWindow = true; PS chyby filtrovane (At line:, CategoryInfo atd.) |
| Watchdog timer: 30 min ticho = kill skriptu | time.AfterFunc s Reset pri kazdem vystupu – zabiji zavisly PS proces |
| Reboot loop ochrana: max 5 pokusu na krok | RetryCounts 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 fallback | Backoff 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=true | Opravena 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/dl | Overit hash pred spustenim |
| config.json: per-klient preset na USB | Jmeno PC prefix, SW seznam, klic – lezi vedle .exe |
Struktura:
Go zavislosti: github.com/lxn/walk (Win32 GUI), golang.org/x/sys
Build:
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.
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, default | xetup.exe cte spec.yaml pro TUI checklist |
| Pole "requires" (napr. activation vyzaduje productKey) | TUI upozorni pokud chybi |
| Auto-generovana dokumentace z spec.yaml | CI akce: spec.yaml → tato stranka |
| spec.yaml jako SSOT pro tuto stranku i deploy skripty | Idealni 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]
Nove nastaveni – pozadavky
+
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...