diff --git a/.gitignore b/.gitignore index da43a2b..bd36383 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,9 @@ Desktop.ini # Temp *.tmp *.bak + +# Build artifacts +flash.zip + +# Large reference files +W11.pdf diff --git a/CLAUDE.md b/CLAUDE.md index c0a31ea..51535cd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,7 +3,7 @@ ## Project context MSP deployment script for X9.cz - automated preparation of new Windows 10/11 computers for clients. -Replaces ~3 hours of manual setup with a single PowerShell script. +Replaces ~3 hours of manual setup with a single PowerShell script (evolving toward Go TUI launcher). **Key parameters:** - Target OS: Windows 10 and Windows 11 (x64), including unsupported HW @@ -13,38 +13,41 @@ Replaces ~3 hours of manual setup with a single PowerShell script. --- +## Communication + +- Communicate with the user in Czech +- Code, comments, log messages: English only (no diacritics rule still applies) + +--- + ## Repo structure ``` -windows-deployment/ +windows-deployment-new/ ├── CLAUDE.md <- this file ├── SPEC.md <- technical specification ├── Deploy-Windows.ps1 <- master script (entry point) ├── scripts/ +│ ├── 00-admin-account.ps1 <- create hidden admin account │ ├── 01-bloatware.ps1 <- remove AppX, Capabilities, Features │ ├── 02-software.ps1 <- winget installs + Adobe PDF default │ ├── 03-system-registry.ps1 <- HKLM tweaks │ ├── 04-default-profile.ps1 <- C:\Users\Default\NTUSER.DAT changes │ ├── 05-personalization.ps1 <- colors, wallpaper, theme │ ├── 06-scheduled-tasks.ps1 <- register scheduled tasks -│ └── 07-desktop-info.ps1 <- custom desktop info (replaces BackInfo) +│ ├── 07-desktop-info.ps1 <- TO BE DELETED (replaced by BackInfo) +│ └── 08-activation.ps1 <- Windows activation via slmgr ├── config/ -│ └── config.json <- per-client config (future) +│ └── config.json <- per-client config ├── assets/ -│ └── DesktopInfo/ <- resources for desktop info script +│ ├── Backinfo/ <- BackInfo.exe + .ini + backinfo_W11.ps1 +│ └── Logo/ <- X9-ikona.ico, X9-logo.jpeg └── tests/ └── Test-Deployment.ps1 <- post-deployment verification ``` --- -## Communication - -- Communicate with the user in Czech -- Code, comments, log messages: English only (no diacritics rule still applies) - ---- - ## Conventions and rules ### PowerShell @@ -83,16 +86,19 @@ windows-deployment/ ## Important notes -### BackInfo replacement - custom solution -BackInfo.exe is NOT used. Instead: custom scheduled task DesktopInfo: -- Triggers on every user logon -- PS script reads: hostname, IP, Windows version, username, install date -- Renders text onto desktop via WPF/System.Drawing -> saves as BMP -> sets as wallpaper -- Works on Win10 and Win11 without registry hacks +### BackInfo (replaces custom DesktopInfo) +BackInfo.exe IS used. Located in assets/Backinfo/. Deployment: +1. Copy assets/Backinfo/ to C:\Program Files\Backinfo\ +2. Run backinfo_W11.ps1 (detects OS, writes registry, creates Startup shortcut) +3. BackInfo.exe auto-starts on every logon, reads INI, renders BMP with system info +- Configurable via BackInfo.ini (fonts, positions, data sources) +- Displays: hostname (centered, large), username, OS, HW info, network info +- DELETE 07-desktop-info.ps1 - no longer needed ### Adobe Reader as default PDF app - After install: set .pdf -> AcroRd32 association - Scheduled task PDF-DefaultApp restores association on every logon (guard against Edge overwriting it) +- NOTE: UCPD.sys (kernel driver since Feb 2024) blocks UserChoice writes. Consider disabling UCPD during deployment. ### Default Profile - Changes to C:\Users\Default\NTUSER.DAT via reg load / reg unload @@ -104,6 +110,16 @@ BackInfo.exe is NOT used. Instead: custom scheduled task DesktopInfo: - Check winget availability before running installs - Log result of every install +### Atera Agent +- Download: `Invoke-WebRequest -Uri "https://x9.servicedesk.atera.com/api/utils/agent-install/windows/?cid=31&aeid=50b72e7113e54a63ac76b96c54c7e337" -OutFile setup.msi` +- Install: `msiexec /i setup.msi /qn` + +### Admin account (adminx9) +- NO PASSWORD (changed from previous version) +- FullName = "X9.cz s.r.o." (via ADSI) +- Hidden from login screen +- Added to Administrators group + --- ## DO NOT @@ -115,6 +131,35 @@ BackInfo.exe is NOT used. Instead: custom scheduled task DesktopInfo: - Do not use hardcoded paths that do not exist on clean Windows - NO diacritics - no accented characters in any part of any script - NO emoticons - none in comments, log messages or output +- Do not remove OneDrive - must remain installable for M365 +- Do not remove RDP/RDS - must remain functional +- Do not remove Microsoft-RemoteDesktopConnection from Optional Features + +--- + +## Planned changes (from review v2, 2026-04-15) + +### Must fix +- [ ] Remove OneDrive uninstall from 03-system-registry.ps1 and 04-default-profile.ps1 +- [ ] Remove password from admin account, add FullName = "X9.cz s.r.o." +- [ ] Delete 07-desktop-info.ps1, replace with BackInfo deployment step +- [ ] Add powercfg settings (standby-timeout-ac 0, monitor-timeout-ac 60, etc.) +- [ ] Add proxy auto-detect disable (AutoDetect = 0) +- [ ] Add Atera Agent install step +- [ ] Extend Edge policies (~15 more keys) + +### New features (from colleague spec v2) +- [ ] Taskbar pinned apps: admin vs user variants via XML layout + -ProfileType parameter +- [ ] Explorer: ShowRecent=0, ShowFrequent=0, FullPath=1 in CabinetState +- [ ] Network discovery: enable ping, set private network profile (post-restart step) +- [ ] PC rename: Rename-Computer as final step before restart +- [ ] C:\X9 directory structure with custom folder icon + +### Architecture evolution +- [ ] Go TUI launcher (xetup.exe) embedding PS scripts +- [ ] spec.yaml as single source of truth +- [ ] Web platform at xetup.x9.cz (Forgejo + docs + comments) +- [ ] Self-update mechanism in xetup.exe --- @@ -122,7 +167,9 @@ BackInfo.exe is NOT used. Instead: custom scheduled task DesktopInfo: | # | Question | Status | |---|---|---| -| 1 | BackInfo replacement | DONE - custom PS scheduled task DesktopInfo | +| 1 | BackInfo replacement | DONE - using BackInfo.exe from assets/ | | 2 | Complete SW list for winget | TODO - list incomplete | | 3 | Per-client variability via config.json | FUTURE | -| 4 | Admin account adminx9 - script or manual? | OPEN | +| 4 | Admin account adminx9 | DECIDED - no password, FullName "X9.cz s.r.o." | +| 5 | UCPD driver workaround for PDF default | TODO - disable during deployment | +| 6 | Atera MFA bypass | OPEN - does aeid parameter avoid MFA? | diff --git a/assets/Backinfo/BackInfo.exe b/assets/Backinfo/BackInfo.exe new file mode 100644 index 0000000..e7935bc Binary files /dev/null and b/assets/Backinfo/BackInfo.exe differ diff --git a/assets/Backinfo/BackInfo.ini b/assets/Backinfo/BackInfo.ini new file mode 100644 index 0000000..c415a2c --- /dev/null +++ b/assets/Backinfo/BackInfo.ini @@ -0,0 +1,182 @@ +;; This INI file should use the following format +;; +;; [General] +;; BackgroundColor = ; The background color to use (default = 0 (black)) +;; AutoBackground = [0 | 1] ; Use background color of current desktop (default = 0) +;; BackgroundBitmap = ; Overrides AutoBackground and BackgroundColor values. Loads background bitmap from BMP file +;; XOffset = ; Horizontal offest of the entire text block from the bitmap's center. Can be negative. Default = 0 +;; YOffset = ; Vertical offest of the entire text block from the bitmap's center. Can be negative. Default = 0 +;; Output = ; Name of output bitmap file (default = "", use popup message) +;; UpdateDesktop = [0 | 1] ; Update background desktop bitmap (default = 0) +;; ForceDesktopCenter = [0 | 1] ; Force the desktop to display the bitmap as cenetered (instead of tiled / streched). Default = 1 + +;; LineSpacing = ; Line spacing (default = 3) +;; SuppressErrors = [0 | 1] ; If 1, errors are NOT displayed (default = 0) +;; +;; [LineN] ; Text settings for line N, where N between [1..20] +;; Type = [CompName | UserName | SysVer | ; Type of information to display on the line +;; SysInfo | NetInfo | FileVer | +;; RegValue | FreeText | + UpdateTime | Unused] +;; ; CompName - Computer name +;; ; UserName - User name +;; ; SysVer - Operating system version +;; ; SysInfo - Hardware information +;; ; NetInfo - Network information +;; ; FileVer - Version of a file specified in 'FileName' option +;; ; RegValue - Registry string value. +;; ; Reg root from 'RegRoot' (e.g. HKLM) +;; ; Reg path from 'RegPath' (e.g. SOFTWARE\Microsoft\Windows NT\CurrentVersion) +;; ; Reg value from 'RegValue' (e.g. CurrentType) +;; ; Reg title from 'RegTitle' (e.g. "The value of X is") +;; ; FreeText - Text specified in 'Text' will be displayed as is +;; ; UpdateTime - The date and time the bitmap was created +;; ; Unused - Line will not be displayed +;; +;; Font = ; Font name (default = "Arial") +;; Size = ; Font size (default = 22) +;; Color = ; Font color (default = WHITE) +;; Bold = [0 | 1] ; Font boldness (default = 0) +;; Italic = [0 | 1] ; Font italicness (default = 0) +;; Alignment = [Left | Right | Center] ; Font alignment (default = Left) +;; +;; ShadowX = ; Shadow X offset (positive only, 0 = No X shadow. Default = 0) +;; ShadowY = ; Shadow Y offset (positive only, 0 = No Y shadow. Default = 0) +;; ShadowColor = ; Shadow Color (default = 0 (black)) +;; +;; RegRoot = [HKLM | HKCU] ; Registry root to use for 'Type' = 'RegValue' +;; RegPath = ; Registry path to use for 'Type' = 'RegValue' +;; RegValue = ; Registry value to use for 'Type' = 'RegValue'. Must be of type REG_SZ +;; RegTitle = ; Registry value to use for 'Type' = 'RegValue' +;; +;; Text = ; Free text to display. Used if 'Type' = 'FreeText' +;; +;; FilePath = ; Path to file to display version for. Used if 'Type' = 'FileVer' +;; FileName = ; Display name of file specified in 'FilePath'. Used if 'Type' = 'FileVer' +;; + +[General] +BackgroundColor = 2097152 +AutoBackground = 1 +Output = %temp%\backinfo.bmp +UpdateDesktop = 1 +LineSpacing = 2 +ForceDesktopCenter = 1 +SuppressErrors = 1 + +[Line1] +Font = Trebuchet MS +Size = 42 +Color = 16777215 +Bold = 1 +Italic = 0 +Alignment = Center +ShadowX = 2 +ShadowY = 2 +ShadowColor = 4210752 +Type = CompName + +[Line2] +Font = Trebuchet MS +Size = 20 +Color = 10526880 +Bold = 0 +Italic = 0 +Alignment = Center +ShadowX = 0 +ShadowY = 0 +ShadowColor = 4210752 +Type = UserName + +[Line3] +Font = Trebuchet MS +Size = 20 +Color = 10526880 +Bold = 1 +Italic = 0 +Alignment = Center +ShadowX = 0 +ShadowY = 0 +ShadowColor = 4210752 +Type = RegValue +RegRoot = HKLM +RegPath = SOFTWARE\BackInfo +RegValue = OSName +RegTitle = OS: + + +[Line4] +Font = Trebuchet MS +Size = 20 +Color = 10526880 +Bold = 0 +Italic = 0 +Alignment = Center +ShadowX = 0 +ShadowY = 0 +ShadowColor = 4210752 +Type = SysInfo + +[Line5] +Font = Trebuchet MS +Size = 20 +Color = 10526880 +Bold = 0 +Italic = 0 +Alignment = Center +ShadowX = 0 +ShadowY = 0 +ShadowColor = 4210752 +Type = NetInfo + + +;; +;; SAMPLE - how to display free text lines +;; +; [Line6] +; Font = Trebuchet MS +; Size = 20 +; Color = 10526880 +; Bold = 0 +; Italic = 0 +; Alignment = Center +; ShadowX = 0 +; ShadowY = 0 +; ShadowColor = 4210752 +; Type = FreeText +; Text = System path is %windir% +;;; +;; SAMPLE - how to display file version +;; +; [Line7] +; Font = Trebuchet MS +; Size = 20 +; Color = 10526880 +; Bold = 0 +; Italic = 0 +; Alignment = Center +; ShadowX = 0 +; ShadowY = 0 +; ShadowColor = 4210752 +; Type = FileVer +; FilePath = %ProgramFiles%\backinfo\backinfo.exe +; FileName = backinfo.exe +;; +;; SAMPLE - how to display registry value +;; +; [Line8] +; Font = Trebuchet MS +; Size = 20 +; Color = 10526880 +; Bold = 0 +; Italic = 0 +; Alignment = Center +; ShadowX = 0 +; ShadowY = 0 +; ShadowColor = 4210752 +; Type = RegValue +; RegRoot = HKLM +; RegPath = SOFTWARE\Microsoft\Windows NT\CurrentVersion +; RegValue = CurrentType +; RegTitle = OS type + diff --git a/assets/Backinfo/backinfo_W11.ps1 b/assets/Backinfo/backinfo_W11.ps1 new file mode 100644 index 0000000..aa38c79 --- /dev/null +++ b/assets/Backinfo/backinfo_W11.ps1 @@ -0,0 +1,60 @@ +# ================================ +# BackInfo OS detection script +# Writes OS name for BGInfo/BackInfo +# ================================ + +Set-ExecutionPolicy Unrestricted + +$cvPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" +$cv = Get-ItemProperty -Path $cvPath + +# --- Detect OS by build number --- +$build = [int]$cv.CurrentBuild + +if ($build -ge 22000) { + $osName = "Windows 11" +} else { + $osName = "Windows 10" +} + +# --- Detect edition --- +switch ($cv.EditionID) { + "Professional" { $edition = "Pro" } + "ProfessionalN" { $edition = "Pro N" } + "Core" { $edition = "Home" } + "CoreN" { $edition = "Home N" } + "Enterprise" { $edition = "Enterprise" } + "Education" { $edition = "Education" } + default { $edition = $cv.EditionID } +} + +$finalOSName = "$osName $edition" + +# --- Registry paths for BackInfo (64bit + 32bit) --- +$regPaths = @( + "HKLM:\SOFTWARE\BackInfo", + "HKLM:\SOFTWARE\WOW6432Node\BackInfo" +) + +foreach ($path in $regPaths) { + if (-not (Test-Path $path)) { + New-Item -Path $path -Force | Out-Null + } + + New-ItemProperty ` + -Path $path ` + -Name "OSName" ` + -Value $finalOSName ` + -PropertyType String ` + -Force | Out-Null +} + +# --- Optional output for logging --- +Write-Output "BackInfo OSName set to: $finalOSName" + +$SourceFilePath = "C:\Program Files\BackInfo\BackInfo.exe" +$ShortcutPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\BackInfo.lnk" +$WScriptObj = New-Object -ComObject ("WScript.Shell") +$shortcut = $WscriptObj.CreateShortcut($ShortcutPath) +$shortcut.TargetPath = $SourceFilePath +$shortcut.Save() diff --git a/assets/Logo/X9-logo-barevné-square.ico b/assets/Logo/X9-logo-barevné-square.ico new file mode 100644 index 0000000..3f9c992 Binary files /dev/null and b/assets/Logo/X9-logo-barevné-square.ico differ diff --git a/assets/Logo/X9-logo-barevné-square.jpeg b/assets/Logo/X9-logo-barevné-square.jpeg new file mode 100644 index 0000000..80b35e9 Binary files /dev/null and b/assets/Logo/X9-logo-barevné-square.jpeg differ diff --git a/docs/xetup-review.md b/docs/xetup-review.md new file mode 100644 index 0000000..0ed4b78 --- /dev/null +++ b/docs/xetup-review.md @@ -0,0 +1,111 @@ +# Xetup - Review vysledek + +Datum: 15. 4. 2026 + +## 1. Priprava prostredi + +[ ] **Adresar C:\X9 + ikona slozky** (CEKA) +Vytvoreni adresarove struktury C:\X9 se slozkami install, vlastni ikonou a logem. + +[ ] **Nextcloud - stahovani souboru** (CEKA) +Stahovani Backinfo, Atera, Flash2, X9-ikona.ico, X9-logo.jpg z Nextcloudu do C:\X9\install. +> nextcloud tam netřeba, Backinfo máme ve vlastní složce + + +[?] **Admin ucet (adminx9)** (K DISKUSI) +Vytvoreni skryteho lokalniho admin uctu adminx9 pro MSP spravce. +> adminX9 bude bez hesla + +[ ] **Aktivace Windows** (CEKA) +Aktivace Windows pomoci klice z configu nebo GVLK (KMS). Spec kolegy toto nezminuje. + +## 2. Odstranovani bloatware + +[ ] **AppX balicky (UWP aplikace)** (CEKA) +Odebirame ~65 preinstalovanych aplikaci (Solitaire, Xbox, Teams, Copilot, Mail...). Kalkulacka zustava. + +[ ] **Windows Capabilities** (CEKA) +Odebirame: Fax, IE, WordPad, PowerShell ISE, Steps Recorder, WMP, Handwriting... + +[ ] **Optional Features** (CEKA) +Vypnuti: MediaPlayback, PowerShell 2.0, Recall (AI), SnippingTool. + +[?] **Flash2 integrace** (K DISKUSI) +Flash2 je nastroj kolegy pro debloating. Integrovat, nebo pouzit nase kroky 2a-2c? +> flash2 je v podstatě tento setup, minulá verze :-) takže je hlavně pro inspiraci a zahrnutí + + +[?] **OneDrive - NEMAZAT** (K DISKUSI) +Nas skript agresivne maze OneDrive vcetne instalatoru. Spec kolegy OneDrive neresi = nechat! +> nevím jestli v poslední verzi už to bylo opravené, ale v první verzi se onedrive zabíjel nějakým regeditem nebo scheduled taskem + +[?] **RDP/RDS - NEODEBIRAT** (K DISKUSI) +SPEC mel RDP klient k odebirani. Kolega to nechce - RDP musi zustat funkcni. +> nevím jestli v poslední verzi už to bylo opravené, ale v první verzi se rdp problematizovalo nějakým regeditem nebo scheduled taskem + +## 3. Instalace software + +[ ] **Winget balicky (7-Zip, Adobe, OpenVPN)** (CEKA) +Silent instalace 7-Zip, Adobe Acrobat Reader, OpenVPN Connect pres winget. + +[?] **Atera Agent (MSI)** (K DISKUSI) +Silent instalace Atera monitoring agenta z C:\X9\install\atera-agent\. +> použít tohle a nejlíp najít parametr, u kterého ATERA nebude chtí MFA kod z mailu:-) +curl -L -o setup.msi "https://x9.servicedesk.atera.com/api/utils/agent-install/windows/?cid=31&aeid=50b72e7113e54a63ac76b96c54c7e337" && msiexec /i setup.msi /qn + +[ ] **BackInfo (info na plose)** (CEKA) +BackInfo.exe zobrazi hostname, user, OS, HW, sit uprostred plochy. Konfigurovatelny pres INI. + +## 4. Vzhled a personalizace + +[ ] **Barvy a motiv** (CEKA) +Tmavy system, svetle aplikace, accent #223B47, plna barva pozadi. + +[ ] **Ikona Tento pocitac na plose** (CEKA) +Zobrazit ikonu Tento pocitac na plose. + +[?] **Avatar uctu (X9 logo)** (K DISKUSI) +Nastaveni X9-logo.jpg jako profiloveho obrazku admin uctu. +> přidal jsem logo a ico do rootu do složky LOGO + +## 5. Hlavni panel a Start menu + +[ ] **Taskbar - zarovnani, skryti prvku** (CEKA) +Zarovnani vlevo, skryti Search, Task View, Widgets, Chat, Copilot. + +[ ] **System tray - zobrazit vsechny ikony** (CEKA) +EnableAutoTray=0 + mazani icon cache + scheduled task ShowAllTrayIcons. + +[ ] **Prazdny taskbar pinlist + Start menu** (CEKA) +Prazdny LayoutModification.xml (zadne pripnute apps), prazdne Start menu pins. + +## 6. Systemova nastaveni + +[ ] **HKLM registry tweaky** (CEKA) +BypassNRO, vypnuti Teams/Widgets/Copilot/GameDVR/Recall, hesla bez expirace, casova zona. + +[ ] **Default Profile (NTUSER.DAT)** (CEKA) +Nastaveni pro vsechny budouci uzivatele: Explorer, Num Lock, GameDVR, Copilot... + +[ ] **Napajeni (powercfg)** (CEKA) +Spanek nikdy na siti, obrazovka 60min/15min, spanek baterie 60min. + +[ ] **Scheduled tasks** (CEKA) +ShowAllTrayIcons, PDF-DefaultApp, UnlockStartLayout. + +## 7. Sit a Edge + +[ ] **Proxy - vypnout auto-detect** (CEKA) +Vypnuti automatickeho zjistovani proxy serveru. + +[ ] **MS Edge - rozsirene nastaveni** (CEKA) +Striktni tracking protection, Google vyhledavac, panel oblibenych, toolbar tlacitka. + +## 8. Finalizace + +[ ] **Prejmenování PC** (CEKA) +Rename-Computer na nazev z parametru -ComputerName. Vyzaduje restart. + +[ ] **Bootstrap spoustec (irm | iex)** (CEKA) +Jednoradkovy spoustec z webu: irm https://xetup.x9.cz/setup.ps1 | iex + diff --git a/docs/xetup-win-setup-novinky.md b/docs/xetup-win-setup-novinky.md new file mode 100644 index 0000000..09464f5 --- /dev/null +++ b/docs/xetup-win-setup-novinky.md @@ -0,0 +1,163 @@ +# Xetup – Novinky oproti původní specifikaci (W11.pdf v3) + +--- + +## A. Hlavní panel – pinnované aplikace (diferenciace admin vs user) + +Nový požadavek: různé sady připnutých aplikací podle typu profilu. + +**Admin profil – připnout na taskbar:** +- Nastavení (`ms-settings:`) +- Správa počítače (`compmgmt.msc`) +- Služby (`services.msc`) +- PowerShell (`pwsh.exe` nebo `powershell.exe`) +- Průzkumník Windows (`explorer.exe`) +- MS Edge (`msedge.exe`) + +**User profil – připnout na taskbar:** +- Průzkumník Windows (`explorer.exe`) +- MS Edge (`msedge.exe`) + +**Implementace:** + +Přímé pinnování přes registry/PS je v moderním Win11 neoficiální – Microsoft odstranil `Pin-Application` cmdlet. Nejspolehlivější postup je XML layout policy: + +```xml + + + + + + + + + + + + + +``` + +```powershell +# Aplikovat layout policy (HKLM = platí pro všechny uživatele) +# Admin varianta +$xmlPathAdmin = "C:\X9\TaskbarAdmin.xml" +$xmlPathUser = "C:\X9\TaskbarUser.xml" + +# Pro Default Profile (user) – zapsat před prvním přihlášením uživatele +reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" ` + /v "LayoutXMLPath" /t REG_SZ /d $xmlPathUser /f +``` + +> **Upozornění:** `LayoutXMLPath` policy je dostupná ve Win11 22H2+. Před nasazením ověřit verzi. Shortcuty pro `compmgmt.msc` a `services.msc` je nutné vytvořit ručně jako `.lnk` soubory, protože XML přijímá pouze `.lnk` cesty. + +--- + +## B. Průzkumník Windows – nastavení + +Tři změny oproti původní specifikaci: + +| Nastavení | Hodnota | +|---|---| +| Otevřít Průzkumník pro | Tento počítač (místo Rychlý přístup) | +| Nedávné soubory / složky / Office.com | Vše vypnuto | +| Zobrazit úplnou cestu v záhlaví | Zapnuto | + +**Registry (aplikovat do Default Profile hive):** + +```registry +; Otevřít pro "Tento počítač" místo Rychlého přístupu +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced + - LaunchTo = 1 (DWORD) ; 1 = Tento počítač, 2 = Rychlý přístup + +; Vypnout historii posledních souborů a složek +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer + - ShowRecent = 0 (DWORD) + - ShowFrequent = 0 (DWORD) + +; Zobrazit úplnou cestu v záhlaví +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState + - FullPath = 1 (DWORD) +``` + +```powershell +# Blok pro vložení do sekce reg load/unload (Default Profile) +$hive = "HKU\DefaultUser" + +Set-ItemProperty "Registry::$hive\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" ` + -Name "LaunchTo" -Value 1 -Type DWord + +Set-ItemProperty "Registry::$hive\Software\Microsoft\Windows\CurrentVersion\Explorer" ` + -Name "ShowRecent" -Value 0 -Type DWord +Set-ItemProperty "Registry::$hive\Software\Microsoft\Windows\CurrentVersion\Explorer" ` + -Name "ShowFrequent" -Value 0 -Type DWord + +New-Item -Path "Registry::$hive\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" ` + -Force | Out-Null +Set-ItemProperty "Registry::$hive\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" ` + -Name "FullPath" -Value 1 -Type DWord +``` + +--- + +## C. Síťové zjišťování – zapnout ping, přepnout na privátní síť + +Nový krok: po přejmenování/připojení do domény zapnout zjišťování sítě a přepnout profil sítě na privátní (bez toho nefunguje ping na stanici). + +```powershell +# Zapnout Network Discovery a File Sharing +netsh advfirewall firewall set rule group="Network Discovery" new enable=Yes +netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes + +# Přepnout aktuální síťový profil na Private (= "Ne, chci síť změnit na privátní") +# Funguje pro první aktivní síťové rozhraní +$adapter = Get-NetConnectionProfile | Select-Object -First 1 +Set-NetConnectionProfile -InterfaceIndex $adapter.InterfaceIndex -NetworkCategory Private +``` + +> **Scope:** Toto nastavení se aplikuje na aktuální síťové připojení v době spuštění skriptu – nelze předem uložit do Default Profile, protože se váže na konkrétní síťový adaptér/GUID. Skript musí být spuštěn po připojení k síti. + +> **Závislost:** Pokud se stanice teprve připojuje do domény, spustit tento blok až po restartu a domain-join. + +--- + +## D. Popis účtu adminx9 + +Nový krok: nastavit pole "Jméno a příjmení" u lokálního účtu `adminx9` na hodnotu `X9.cz s.r.o.` + +Provádí se přes Správu počítače → Místní uživatelé a skupiny → Uživatelé → adminx9 → Vlastnosti → záložka Obecné. + +**Automatizace:** + +```powershell +# Nastavit Full Name pro lokální účet adminx9 +$user = [ADSI]"WinNT://$env:COMPUTERNAME/adminx9,user" +$user.FullName = "X9.cz s.r.o." +$user.SetInfo() +``` + +> **Scope:** Platí pouze pro aktuální (admin) účet na tomto stroji – není součástí Default Profile. Spustit před předáním stanice klientovi. + +--- + +## Integrace do hlavního skriptu + +Nové kroky přidat do architektury spuštění: + +``` +Deploy-Windows.ps1 + ├── ... (existující kroky) + ├── NEW: Popis účtu adminx9 = "X9.cz s.r.o." + ├── NEW: Průzkumník – registry do Default Profile hive + ├── NEW: Taskbar XML layout (admin nebo user varianta dle parametru) + ├── 9. Přejmenování PC + restart + └── NEW: Po restartu – zapnout síťové zjišťování + privátní profil +``` + +**Nový parametr skriptu:** + +```powershell +[ValidateSet("admin","user")] +[string]$ProfileType = "user" # řídí TaskbarLayout XML i zarovnání panelu +``` diff --git a/docs/xetup-win-setup-spec.md b/docs/xetup-win-setup-spec.md new file mode 100644 index 0000000..d4af047 --- /dev/null +++ b/docs/xetup-win-setup-spec.md @@ -0,0 +1,347 @@ +# Xetup – Specifikace automatizovaného nastavení Windows 10/11 + +> **Účel:** Eliminovat ~3 hodiny ručního nastavování nových Windows stanic pro klienty X9.cz +> **Cíl:** Jeden PowerShell skript spustitelný z admina, výsledek uložen v Default Profile (aplikuje se všem budoucím uživatelům) +> **Repo:** `C:\x9\xetup` +> **Vstup:** Parametrizovaný spouštěč – název PC, doména (volitelná), typ profilu (admin/user) + +--- + +## 1. Struktura adresářů + +``` +C:\X9\ +├── install\ +│ ├── Backinfo\ +│ ├── flash2\ +│ ├── atera-agent\ +│ ├── 7zip.exe +│ ├── AdobeReader.exe +│ └── OpenVPNConnect.exe +├── X9-ikona.ico +└── X9-logo.jpg +``` + +**Kroky:** +- [ ] Vytvořit `C:\X9` a `C:\X9\install` +- [ ] Stáhnout z Nextcloudu: Backinfo, Atera agent, Flash2, ikonu X9, logo X9 +- [ ] Stáhnout z internetu: 7-zip, Adobe Reader, OpenVPN Connect +- [ ] Roztřídit soubory do správných adresářů dle výše + +> **Automatizace:** `Invoke-WebRequest` pro stažení + `Copy-Item` pro přesun. Nextcloud vyžaduje autentizaci – credentials parametrem nebo uloženým tokenem. + +--- + +## 2. Přizpůsobení – Pozadí a barvy (Default Profile) + +Všechna nastavení ukládat do `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes` + Default Profile hive (`C:\Users\Default\NTUSER.DAT`). + +| Nastavení | Hodnota | +|---|---| +| Typ pozadí | Plná barva | +| Barva pozadí | `#223B47` | +| Barevný režim | Vlastní | +| Režim Windows | Tmavý | +| Režim aplikací | Světlý | +| Barva motivu | Ruční – `#223B47` | +| Barva v Start menu | Zapnuto | +| Barva v záhlavích oken | Zapnuto | + +**Registry klíče (NTUSER.DAT / Default Profile):** +``` +HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize + - AppsUseLightTheme = 1 (DWORD) + - SystemUsesLightTheme = 0 (DWORD) + - ColorPrevalence = 1 (DWORD) + +HKCU\Control Panel\Desktop + - Wallpaper = "" (prázdný string = plná barva) + - WallpaperStyle = 0 + +HKCU\Control Panel\Colors + - Background = "34 59 71" (RGB hodnota #223B47) +``` + +> **Poznámka:** Barvu motivu (`AccentColor`) nastavit přes `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Accent` – hodnota `AccentColorMenu` = `0xFF3B2322` (ABGR formát). + +--- + +## 3. Přizpůsobení – Motivy (ikony na ploše) + +- [ ] Zobrazit ikonu **Tento počítač** na ploše + +```registry +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel + - {20D04FE0-3AEA-1069-A2D8-08002B30309D} = 0 (DWORD) ; Tento počítač +``` + +> Aplikovat do Default Profile hive. + +--- + +## 4. Hlavní panel (Taskbar) + +| Nastavení | Hodnota | +|---|---| +| Vyhledávací pole | Skryto | +| Zobrazení úkolů (Task View) | Vypnuto | +| Widgety | Vypnuto | +| Zarovnání (uživatel) | Vlevo | +| Zarovnání (admin) | Na střed | +| Systémové ikony (overflow) | Vše viditelné | + +**Registry (Win11):** +```registry +HKCU\Software\Microsoft\Windows\CurrentVersion\Search + - SearchboxTaskbarMode = 0 (DWORD) ; skrýt hledání + +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced + - ShowTaskViewButton = 0 (DWORD) + - TaskbarAl = 0 (DWORD) ; 0=vlevo, 1=střed + +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\People + - PeopleBand = 0 (DWORD) + +HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds + - EnableFeeds = 0 (DWORD) ; widgety +``` + +**Viditelnost systémových ikon (overflow area):** +```registry +HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer + - EnableAutoTray = 0 (DWORD) ; zobrazit vše, nevracet do přetečení +``` + +> **Problém:** Automatické zobrazení VŠECH budoucích ikon (nový SW po instalaci) nelze 100% garantovat přes registry – `EnableAutoTray=0` je nejbližší řešení. Individuální ikony aplikací závisí na tom, co si každá aplikace sama zapíše. + +--- + +## 5. Připnutí složky X9 na hlavní panel + +- [ ] Složce `C:\X9` nastavit vlastní ikonu (`X9-ikona.ico`) +- [ ] Připnout na panel rychlého spuštění (Quick Access / Taskbar) + +```powershell +# Nastavení vlastní ikony složky (desktop.ini) +$iniPath = "C:\X9\desktop.ini" +Set-Content $iniPath "[.ShellClassInfo]`nIconResource=C:\X9\X9-ikona.ico,0`n[ViewState]`nMode=`nVid=`nFolderType=Generic" +attrib +s +h $iniPath +attrib +s "C:\X9" + +# Připnutí na taskbar – vyžaduje Shell COM objekt nebo workaround přes VBScript +``` + +> **Upozornění:** Připnutí složky na taskbar je v moderním Win11 omezené – Microsoft tuto možnost odstranil. Alternativa: připnout jako Quick Access v Průzkumníku nebo vytvořit shortcut na ploše. + +--- + +## 6. Profil účtu – avatar + +- [ ] Nahrát `X9-logo.jpg` jako profilový obrázek admin účtu + +```powershell +$accountPicPath = "$env:APPDATA\Microsoft\Windows\AccountPictures" +New-Item -ItemType Directory -Force -Path $accountPicPath +Copy-Item "C:\X9\X9-logo.jpg" "$accountPicPath\X9-logo.jpg" +# Nastavit jako výchozí profilový obrázek přes registry +``` + +> **Scope:** Toto platí jen pro aktuální (admin) účet, nikoliv Default Profile – je to záměr. + +--- + +## 7. Napájení + +| Nastavení | Hodnota | +|---|---| +| Spánek při napájení ze sítě | Nikdy | +| Vypnutí obrazovky (síť) | 1 hodina | +| Vypnutí obrazovky (baterie) | 15 minut | +| Spánek na baterii | 1 hodina | +| Zavření víka | Neautomatizovat | + +```powershell +powercfg /change standby-timeout-ac 0 # nikdy - síť +powercfg /change monitor-timeout-ac 60 # 60 min - síť +powercfg /change monitor-timeout-dc 15 # 15 min - baterie +powercfg /change standby-timeout-dc 60 # 60 min - baterie +``` + +--- + +## 8. Síť – Proxy server + +- [ ] Vypnout automatické zjišťování nastavení proxy + +```registry +HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings + - AutoDetect = 0 (DWORD) + +HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings + - AutoDetect = 0 (DWORD) +``` + +--- + +## 9. Přejmenování počítače + +```powershell +param([string]$NewName) +Rename-Computer -NewName $NewName -Force -Restart +``` + +> Restart je nutný. Připojení do domény probíhá zvlášť přes stejné rozhraní – není součástí tohoto skriptu (volitelný parametr `-Domain`). + +--- + +## 10. Odinstalace bloatware + +Aktuálně řešeno přes **Flash2** – integrovat volání Flash2 instalačky nebo zachovat jako samostatný krok. + +Alternativně vlastní seznam přes winget/AppX: + +```powershell +# Příklady AppX balíčků k odebrání (rozšířit dle potřeby) +$bloatware = @( + "Microsoft.BingWeather", + "Microsoft.GetHelp", + "Microsoft.Getstarted", + "Microsoft.MicrosoftSolitaireCollection", + "Microsoft.People", + "Microsoft.WindowsFeedbackHub", + "Microsoft.Xbox.TCUI", + "Microsoft.XboxApp", + "Microsoft.ZuneMusic", + "Microsoft.ZuneVideo" +) +foreach ($app in $bloatware) { + Get-AppxPackage -Name $app -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue + Get-AppxProvisionedPackage -Online | Where-Object DisplayName -like $app | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue +} +``` + +> `Remove-AppxProvisionedPackage` zajistí, že se bloatware neobjeví ani novým uživatelům (Default Profile). + +--- + +## 11. Nastavení uživatelského profilu (Default Profile) + +Klíčový mechanismus: **načíst `C:\Users\Default\NTUSER.DAT` jako dočasný hive**, aplikovat registry změny, odpojit hive. + +```powershell +reg load "HKU\DefaultUser" "C:\Users\Default\NTUSER.DAT" +# ... zde všechny Set-ItemProperty operace s cestou HKU:\DefaultUser\... +reg unload "HKU\DefaultUser" +``` + +> Tímto způsobem se veškerá nastavení (barvy, taskbar, Edge, atd.) aplikují všem budoucím uživatelům při prvním přihlášení. + +--- + +## 12. Instalace SW + +| Aplikace | Zdroj | Metoda | +|---|---|---| +| 7-Zip | Internet / winget | `winget install 7zip.7zip` | +| Adobe Reader | Internet / winget | `winget install Adobe.Acrobat.Reader.64-bit` | +| OpenVPN Connect | Internet / winget | `winget install OpenVPNTechnologies.OpenVPNConnect` | +| Atera Agent | Nextcloud (`C:\X9\install`) | MSI silent install | +| Backinfo | Nextcloud (`C:\X9\install`) | PS skript | + +```powershell +winget install --id 7zip.7zip --silent --accept-package-agreements --accept-source-agreements +winget install --id Adobe.Acrobat.Reader.64-bit --silent --accept-package-agreements --accept-source-agreements +winget install --id OpenVPNTechnologies.OpenVPNConnect --silent --accept-package-agreements --accept-source-agreements +``` + +--- + +## 13. Backinfo + +```powershell +Copy-Item "C:\X9\install\Backinfo" "C:\Program Files\Backinfo" -Recurse +Set-ExecutionPolicy Unrestricted -Force +& "C:\Program Files\Backinfo\backinfo_W11.ps1" +Set-ExecutionPolicy Restricted -Force +``` + +> Backinfo zapíše do registru verzi W11 a nastaví autostart po přihlášení. + +--- + +## 14. MS Edge – nastavení + +Nastavit přes registry (platí pro všechny uživatele pokud aplikováno do Default Profile nebo HKLM). + +| Nastavení | Hodnota | +|---|---| +| Ochrana sledování | Striktní (`2`) | +| Panel oblíbených | Vždy zobrazit | +| Výchozí vyhledávač | Google | +| Tlačítka panelu nástrojů | Historie, Aplikace, Stažené soubory, Výkon | + +```registry +HKLM\SOFTWARE\Policies\Microsoft\Edge + - TrackingPrevention = 3 (DWORD) ; Striktní + - FavoritesBarEnabled = 1 (DWORD) ; Oblíbené vždy + - DefaultSearchProviderEnabled = 1 + - DefaultSearchProviderName = "Google" + - DefaultSearchProviderSearchURL = "https://www.google.com/search?q={searchTerms}" + +; Toolbar tlačítka – individuální nastavení přes Edge policy nebo NTUSER.DAT +``` + +> **Poznámka:** Edge nastavení přes GPO/registry mají přednost před uživatelskými preferencemi. Pro Default Profile alternativně upravit `%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Preferences` šablonou – méně spolehlivé. + +--- + +## 15. Spouštěč – parametry hlavního skriptu + +```powershell +# Deploy-Windows.ps1 +param( + [Parameter(Mandatory=$true)] + [string]$ComputerName, + + [string]$Domain = "", # prázdné = pracovní skupina + + [ValidateSet("admin","user")] + [string]$TaskbarAlign = "user", # admin=střed, user=vlevo + + [string]$NextcloudUrl = "", + [string]$NextcloudUser = "", + [string]$NextcloudPass = "" +) +``` + +--- + +## Otevřené otázky / TODO + +- [ ] Jak řešit stahování z Nextcloudu bez interaktivního přihlášení? (token vs. credentials parametr) +- [ ] Flash2 – integrovat nebo volat jako subprocess? +- [ ] Atera Agent – silent install parametry MSI? +- [ ] Přejmenování PC + připojení do domény jako jeden průchod nebo dva samostatné kroky? +- [ ] Testování: Win10 vs Win11 – některé registry klíče se liší (hlavně Taskbar) +- [ ] Složka X9 na Taskbaru – Win11 nepodporuje připnutí složky; nahradit shortcutem na ploše? + +--- + +## Architektura spuštění (navržená) + +``` +irm https://xetup.x9.cz/setup.ps1 | iex + └── Stáhne Deploy-Windows.ps1 z repa + └── Vyzve na parametry (nebo převezme z CLI) + └── Spustí Deploy-Windows.ps1 -ExecutionPolicy Bypass + ├── 1. Vytvoří adresáře + ├── 2. Stáhne soubory (Nextcloud + web) + ├── 3. Odinstaluje bloatware (AppX + Flash2) + ├── 4. Nainstaluje SW (winget) + ├── 5. Aplikuje registry do Default Profile (reg load/unload) + ├── 6. Nastaví napájení + ├── 7. Nastaví proxy + ├── 8. Spustí Backinfo + ├── 9. Přejmenuje PC + └── 10. Restart +``` diff --git a/review.html b/review.html new file mode 100644 index 0000000..a118054 --- /dev/null +++ b/review.html @@ -0,0 +1,834 @@ + + + + + +Xetup - Review v2 + + + + +

Xetup - Windows Deployment Review v2

+

Vcetne novinek od kolegy + zapracovane komentare z review v1. Schval / zamitni / okomentuj.

+ +
+
0Ceka
+
0OK
+
0Ne
+
0Diskuse
+
+ +
+ +
+
+ + + +
+
+ + +
+
+ + + +