diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 795bee1..418bb30 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -24,7 +24,7 @@ private/ # Orchestration helpers – not exported main/ # Core module init (Initialize-OSDCloudModule) microsoft-update-catalog/ # MUC lookup operatingsystem/ # OS catalog helpers - WinPEStartup/ # WinPE boot sequence + WinpeStartup/ # WinPE boot sequence steps/ # Workflow step implementations workflow/ # Workflow orchestration helpers classes/ # PowerShell class definitions (dot-sourced before functions) diff --git a/.github/skills/author-winpe-profile-json/SKILL.md b/.github/skills/author-winpe-profile-json/SKILL.md index 06e9322..01c2136 100644 --- a/.github/skills/author-winpe-profile-json/SKILL.md +++ b/.github/skills/author-winpe-profile-json/SKILL.md @@ -5,37 +5,37 @@ description: Author and update OSDCloud WinPE startup profile JSON files. Use th # Author WinPE Profile JSON -Create profiles that configure `Invoke-WinPEStartup` without embedding workflow logic in the profile. Preserve the existing JSON style and make the smallest change that satisfies the request. +Create profiles that configure `Invoke-WinpeStartup` without embedding workflow logic in the profile. Preserve the existing JSON style and make the smallest change that satisfies the request. ## Profile location and discovery - Store bundled profiles in `OSDCloud/core/winpestartup-profiles/`. -- Use a descriptive `.json` filename. The startup function discovers profile files from `WinPEStartup\Profiles` on attached drives. +- Use a descriptive `.json` filename. The startup function discovers profile files from `WinpeStartup\Profiles` on attached drives. - A profile is a flat map of parameter names to scalar values or arrays, with one supported nested object: the top-level `Environment` section. - Prefer standard JSON. The loader tolerates comments, but comments are unnecessary and can make external validation fail. ## Property names -Use the exact `Invoke-WinPEStartup:` prefix for every profile property: +Use the exact `Invoke-WinpeStartup:` prefix for every profile property: | Property | JSON value | Effect | |---|---|---| -| `Invoke-WinPEStartup:SkipOnScreenKeyboard` | boolean | Skip the on-screen keyboard check | -| `Invoke-WinPEStartup:ShowPnpDevices` | boolean | Show PnP device hardware | -| `Invoke-WinPEStartup:ShowPnpErrors` | boolean | Show PnP device errors | -| `Invoke-WinPEStartup:SkipWiFi` | boolean | Skip Wi-Fi startup and connection checks | -| `Invoke-WinPEStartup:SkipIPConfig` | boolean | Skip IP configuration display | -| `Invoke-WinPEStartup:SkipUpdateOSDCloud` | boolean | Skip the OSDCloud module update | -| `Invoke-WinPEStartup:InstallModule` | string or string array | Update additional PowerShell modules | -| `Invoke-WinPEStartup:InvokeStartupCommand` | string or string array | Run commands before the main phase | -| `Invoke-WinPEStartup:InvokeStartupCommandNoExit` | boolean | Keep the startup child PowerShell open | -| `Invoke-WinPEStartup:InvokeStartupCommandEA` | `Continue` or `Stop` | Handle startup child-process failure | -| `Invoke-WinPEStartup:InvokeMainCommand` | string or string array | Run commands in the main phase | -| `Invoke-WinPEStartup:InvokeMainCommandNoExit` | boolean | Keep the main child PowerShell open | -| `Invoke-WinPEStartup:InvokeMainCommandEA` | `Continue` or `Stop` | Handle main child-process failure | -| `Invoke-WinPEStartup:InvokeShutdownCommand` | string or string array | Run commands in the shutdown phase | -| `Invoke-WinPEStartup:InvokeShutdownCommandNoExit` | boolean | Keep the shutdown child PowerShell open | -| `Invoke-WinPEStartup:InvokeShutdownCommandEA` | `Continue` or `Stop` | Handle shutdown child-process failure | +| `Invoke-WinpeStartup:SkipOnScreenKeyboard` | boolean | Skip the on-screen keyboard check | +| `Invoke-WinpeStartup:ShowPnpDevices` | boolean | Show PnP device hardware | +| `Invoke-WinpeStartup:ShowPnpErrors` | boolean | Show PnP device errors | +| `Invoke-WinpeStartup:SkipWiFi` | boolean | Skip Wi-Fi startup and connection checks | +| `Invoke-WinpeStartup:SkipIPConfig` | boolean | Skip IP configuration display | +| `Invoke-WinpeStartup:SkipUpdateOSDCloud` | boolean | Skip the OSDCloud module update | +| `Invoke-WinpeStartup:InstallModule` | string or string array | Update additional PowerShell modules | +| `Invoke-WinpeStartup:InvokeStartupCommand` | string or string array | Run commands before the main phase | +| `Invoke-WinpeStartup:InvokeStartupCommandNoExit` | boolean | Keep the startup child PowerShell open | +| `Invoke-WinpeStartup:InvokeStartupCommandEA` | `Continue` or `Stop` | Handle startup child-process failure | +| `Invoke-WinpeStartup:InvokeMainCommand` | string or string array | Run commands in the main phase | +| `Invoke-WinpeStartup:InvokeMainCommandNoExit` | boolean | Keep the main child PowerShell open | +| `Invoke-WinpeStartup:InvokeMainCommandEA` | `Continue` or `Stop` | Handle main child-process failure | +| `Invoke-WinpeStartup:InvokeShutdownCommand` | string or string array | Run commands in the shutdown phase | +| `Invoke-WinpeStartup:InvokeShutdownCommandNoExit` | boolean | Keep the shutdown child PowerShell open | +| `Invoke-WinpeStartup:InvokeShutdownCommandEA` | `Continue` or `Stop` | Handle shutdown child-process failure | Use JSON booleans (`true`/`false`) rather than quoted boolean strings. Use arrays when there are multiple commands or modules; command entries execute in array order in one child PowerShell process. @@ -64,7 +64,7 @@ Use an unprefixed top-level `Environment` object to set process-scoped environme - Write ordinary PowerShell lines as strings, for example `Show-OSDCloudDeviceInfo` or `Deploy-OSDCloud`. - Use `Restart-Computer -Force` for a restart at the end of the shutdown phase. Do not use `shutdown.exe` unless the request specifically requires its options. -- URLs beginning with `http://` or `https://` are automatically converted to `Invoke-RestMethod -Uri '' | Invoke-Expression` by `Invoke-WinPEStartup`. Do not wrap those URLs yourself. +- URLs beginning with `http://` or `https://` are automatically converted to `Invoke-RestMethod -Uri '' | Invoke-Expression` by `Invoke-WinpeStartup`. Do not wrap those URLs yourself. - A `NoExit` setting leaves the child process open. Do not set it for a normal deployment or restart profile unless the user explicitly requests an interactive window. - `Continue` is the default failure behavior. Choose `Stop` only when a failed child command must terminate startup. - Keep deployment commands in the appropriate phase. For example, inspection and deployment belong in `InvokeMainCommand`; reboot belongs in `InvokeShutdownCommand`. @@ -75,13 +75,13 @@ Use an unprefixed top-level `Environment` object to set process-scoped environme ```json { - "Invoke-WinPEStartup:InvokeMainCommand": [ + "Invoke-WinpeStartup:InvokeMainCommand": [ "Show-OSDCloudDeviceInfo", "Deploy-OSDCloud" ], - "Invoke-WinPEStartup:InvokeMainCommandNoExit": true, - "Invoke-WinPEStartup:InvokeMainCommandEA": "Continue", - "Invoke-WinPEStartup:InvokeShutdownCommand": [ + "Invoke-WinpeStartup:InvokeMainCommandNoExit": true, + "Invoke-WinpeStartup:InvokeMainCommandEA": "Continue", + "Invoke-WinpeStartup:InvokeShutdownCommand": [ "Restart-Computer -Force" ] } @@ -91,11 +91,11 @@ Use an unprefixed top-level `Environment` object to set process-scoped environme ```json { - "Invoke-WinPEStartup:InvokeMainCommand": [ + "Invoke-WinpeStartup:InvokeMainCommand": [ "Show-OSDCloudDeviceInfo" ], - "Invoke-WinPEStartup:InvokeMainCommandNoExit": true, - "Invoke-WinPEStartup:InvokeMainCommandEA": "Continue" + "Invoke-WinpeStartup:InvokeMainCommandNoExit": true, + "Invoke-WinpeStartup:InvokeMainCommandEA": "Continue" } ``` @@ -115,7 +115,7 @@ $profile | Out-Null 6. For command changes, verify the resulting property explicitly: ```powershell -$profile.'Invoke-WinPEStartup:InvokeShutdownCommand' +$profile.'Invoke-WinpeStartup:InvokeShutdownCommand' ``` Do not execute profile commands during validation. Parsing verifies syntax without starting deployment, downloading content, or restarting the workstation. diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fe0641..994b0e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. +## 26.10.4.1 - October 4, 2026 + +### Changed + +- Standardized `WinPEStartup` naming to `WinpeStartup` across exported startup cmdlets, private helpers, source folders and files, internal calls, status messages, and function help. +- Updated module defaults and the bundled OSDCloud startup profile to use the `Invoke-WinpeStartup:` JSON key prefix. Startup driver, file, and profile discovery now consistently references `WinpeStartup\Drivers`, `WinpeStartup\Files`, and `WinpeStartup\profiles`. +- Updated the module description, README command reference, deployment and troubleshooting guides, startup documentation, feature and privacy documentation, and profile-authoring guidance to use the same naming. +- Retained existing PEStartup compatibility aliases and updated their targets to the standardized cmdlet names. This release changes capitalization only; startup parameters, defaults, and deployment behavior are unchanged. +- Module version bumped from `26.10.2.1` to `26.10.4.1`. + ## 26.10.2.1 - October 2, 2026 ### Added @@ -108,7 +118,7 @@ All notable changes to this project will be documented in this file. ### Removed -- Removed the deprecated `Initialize-WinPEStartupScript` helper and obsolete startup, main, and shutdown script initialization references. +- Removed the deprecated `Initialize-WinpeStartupScript` helper and obsolete startup, main, and shutdown script initialization references. ## 26.9.8.1 - September 8, 2026 @@ -118,7 +128,7 @@ All notable changes to this project will be documented in this file. - Added OSDeploy license registration, license state management, and license help output. - Added verbose workflow step diagnostics for deployment troubleshooting. - Added WinPE startup profiles for restart and shutdown actions. -- Added a WinPEStartup guide and updated deployment, troubleshooting, and unattended USB documentation. +- Added a WinpeStartup guide and updated deployment, troubleshooting, and unattended USB documentation. ### Changed @@ -128,7 +138,7 @@ All notable changes to this project will be documented in this file. - Preserved operating system language selections through deployment parameter resolution. - Improved device identity handling and hashed the device identifier used for telemetry. - Renamed device identity and license properties to use the current core naming conventions. -- Refreshed WinPEStartup initialization, command execution, module update, Wi-Fi, USB, and device error handling paths. +- Refreshed WinpeStartup initialization, command execution, module update, Wi-Fi, USB, and device error handling paths. - Updated workflow step logging, status output, target disk checks, driver pack checks, and Windows image validation. - Refactored driver pack catalog retrieval and update functions across Dell, HP, Lenovo, Panasonic, and Surface catalogs. - Updated Windows 11 25H2 operating system catalog content to build `26200.9168`. @@ -173,7 +183,7 @@ All notable changes to this project will be documented in this file. - Improved cache, operating system URL, device identity, and catalog initialization status logging for clearer troubleshooting. - Improved workflow operating system resolution and parameter flow by centralizing OS settings selection and activation resolution logic. - Updated workflow and task execution scripts with standardized informational logging markers and aligned step/test behavior for target disk, driver pack, and Windows image validation. -- Updated WinPEStartup components, including Wi-Fi and USB drive-letter initialization paths, to align with the revised deployment/core orchestration flow. +- Updated WinpeStartup components, including Wi-Fi and USB drive-letter initialization paths, to align with the revised deployment/core orchestration flow. - Updated Microsoft Update Catalog save helpers and related driver workflow step behavior to match revised validation and logging patterns. - Updated workflow UI `MainWindow` scripts across classic, default, dev, insiders, and vNext channels for consistency with the updated deployment flow. - Updated repository guidance in Copilot instruction assets and catalog update instructions. @@ -248,7 +258,7 @@ All notable changes to this project will be documented in this file. ### Added -- Added WinPEStartup profiles for `Deploy-OSDCloud` and `Show-OSDCloudDeviceInfo`. +- Added WinpeStartup profiles for `Deploy-OSDCloud` and `Show-OSDCloudDeviceInfo`. ### Changed @@ -434,15 +444,15 @@ All notable changes to this project will be documented in this file. ### Added - Reference documentation for all 12 exported functions in `OSDCloud/docs/`: - - New pages: `Invoke-WinPEStartup.md`, `Invoke-WinPEStartupManager.md`, - `Show-WinPEStartupDevices.md`, `Show-WinPEStartupDeviceErrors.md`, - `Show-WinPEStartupIpconfig.md`, `Show-WinPEStartupWifi.md`, - `Update-WinPEStartupModule.md` + - New pages: `Invoke-WinpeStartup.md`, `Invoke-WinpeStartupManager.md`, + `Show-WinpeStartupDevices.md`, `Show-WinpeStartupDeviceErrors.md`, + `Show-WinpeStartupIpconfig.md`, `Show-WinpeStartupWifi.md`, + `Update-WinpeStartupModule.md` - Updated existing pages to fill in blank `ProgressAction` descriptions, add `INPUTS`/`OUTPUTS`/`NOTES` sections, and cross-link related pages. - Conceptual guides in `docs/`: - `getting-started.md` — installation, quick start, and cmdlet overview. - - `winpe-startup.md` — WinPEStartup sequence, script hooks, USB profiles, + - `winpe-startup.md` — WinpeStartup sequence, script hooks, USB profiles, and `InvokeXxxCommand` behaviour. - `psoptions.md` — two-layer `PSDefaultParameterValues` system with full key reference table and override examples. diff --git a/FEATURES.md b/FEATURES.md index b5b10cb..5422b43 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -6,9 +6,9 @@ --- -## WinPEStartup Orchestration +## WinpeStartup Orchestration -`Invoke-WinPEStartup` automates everything between power-on and deployment — loading drivers, connecting to the network, and auto-updating OSDCloud — in a single command. Drop a JSON profile on a USB drive for site-specific settings without touching the boot image. Extend the sequence with custom PowerShell or a HTTPS URL at any phase. +`Invoke-WinpeStartup` automates everything between power-on and deployment — loading drivers, connecting to the network, and auto-updating OSDCloud — in a single command. Drop a JSON profile on a USB drive for site-specific settings without touching the boot image. Extend the sequence with custom PowerShell or a HTTPS URL at any phase. --- diff --git a/OSDCloud/OSDCloud.psd1 b/OSDCloud/OSDCloud.psd1 index 809f77f..8323b66 100644 --- a/OSDCloud/OSDCloud.psd1 +++ b/OSDCloud/OSDCloud.psd1 @@ -7,7 +7,7 @@ @{ # --- Identity --- RootModule = 'OSDCloud.psm1' - ModuleVersion = '26.10.2.1' + ModuleVersion = '26.10.4.1' CompatiblePSEditions = @('Core', 'Desktop') GUID = '2fbd5c65-79c7-4561-9a2e-c4a4eebc89c7' @@ -17,7 +17,7 @@ Copyright = '(c) 2026 Recast Software. All rights reserved.' Description = @' Recast OSDCloud PowerShell Module. -PowerShell module for OSDCloud v2 deployment automation and WinPEStartup from recastsoftware.com. +PowerShell module for OSDCloud v2 deployment automation and WinpeStartup from recastsoftware.com. Includes operating system, driver pack, and device provisioning workflows. Windows 11 26H2 GA Release '@ @@ -34,13 +34,13 @@ Windows 11 26H2 GA Release 'Show-OSDCloudDeviceInfo', 'Start-OSDCloudExplorer', # WinPE - 'Invoke-WinPEStartup', - 'Invoke-WinPEStartupManager', - 'Show-WinPEStartupDeviceErrors', - 'Show-WinPEStartupDevices', - 'Show-WinPEStartupIpconfig', - 'Show-WinPEStartupWifi', - 'Update-WinPEStartupModule' + 'Invoke-WinpeStartup', + 'Invoke-WinpeStartupManager', + 'Show-WinpeStartupDeviceErrors', + 'Show-WinpeStartupDevices', + 'Show-WinpeStartupIpconfig', + 'Show-WinpeStartupWifi', + 'Update-WinpeStartupModule' ) CmdletsToExport = @() VariablesToExport = @() diff --git a/OSDCloud/OSDCloud.psm1 b/OSDCloud/OSDCloud.psm1 index 7c877d5..1c52ed4 100644 --- a/OSDCloud/OSDCloud.psm1 +++ b/OSDCloud/OSDCloud.psm1 @@ -73,13 +73,13 @@ if ($FoundErrors.Count -gt 0) { if ($env:SystemDrive -eq 'X:') { Set-Alias -Name OSDCloudExplorer -Value Start-OSDCloudExplorer -Scope Script - New-Alias -Name Invoke-OSDCloudPEStartup -Value Invoke-WinPEStartupManager -Description 'Backward compatibility alias' -Force + New-Alias -Name Invoke-OSDCloudPEStartup -Value Invoke-WinpeStartupManager -Description 'Backward compatibility alias' -Force New-Alias -Name Show-PEStartupDeviceInfo -Value Show-OSDCloudDeviceInfo -Description 'Backward compatibility alias' -Force - New-Alias -Name Show-PEStartupHardware -Value Show-WinPEStartupDevices -Description 'Backward compatibility alias' -Force - New-Alias -Name Show-PEStartupErrors -Value Show-WinPEStartupDeviceErrors -Description 'Backward compatibility alias' -Force - New-Alias -Name Show-PEStartupIpconfig -Value Show-WinPEStartupIpconfig -Description 'Backward compatibility alias' -Force - New-Alias -Name Show-PEStartupWifi -Value Show-WinPEStartupWifi -Description 'Backward compatibility alias' -Force - New-Alias -Name Use-PEStartupUpdateModule -Value Update-WinPEStartupModule -Description 'Backward compatibility alias' -Force + New-Alias -Name Show-PEStartupHardware -Value Show-WinpeStartupDevices -Description 'Backward compatibility alias' -Force + New-Alias -Name Show-PEStartupErrors -Value Show-WinpeStartupDeviceErrors -Description 'Backward compatibility alias' -Force + New-Alias -Name Show-PEStartupIpconfig -Value Show-WinpeStartupIpconfig -Description 'Backward compatibility alias' -Force + New-Alias -Name Show-PEStartupWifi -Value Show-WinpeStartupWifi -Description 'Backward compatibility alias' -Force + New-Alias -Name Use-PEStartupUpdateModule -Value Update-WinpeStartupModule -Description 'Backward compatibility alias' -Force } Export-ModuleMember -Function '*' -Alias '*' -Cmdlet '*' diff --git a/OSDCloud/core/PSDefaultParameterValues.json b/OSDCloud/core/PSDefaultParameterValues.json index d20f6a6..f74d741 100644 --- a/OSDCloud/core/PSDefaultParameterValues.json +++ b/OSDCloud/core/PSDefaultParameterValues.json @@ -1,20 +1,20 @@ { - "Invoke-WinPEStartup:SkipOnScreenKeyboard": false, - "Invoke-WinPEStartup:ShowPnpDevices": false, - "Invoke-WinPEStartup:ShowPnpErrors": false, - "Invoke-WinPEStartup:SkipWiFi": false, - "Invoke-WinPEStartup:SkipIPConfig": false, - "Invoke-WinPEStartup:InstallModule": [], - "Invoke-WinPEStartup:SkipUpdateOSDCloud": false, - "Invoke-WinPEStartup:InvokeStartupCommand": [], - "Invoke-WinPEStartup:InvokeStartupCommandNoExit": false, - "Invoke-WinPEStartup:InvokeStartupCommandEA": "Continue", - "Invoke-WinPEStartup:InvokeMainCommand": [ + "Invoke-WinpeStartup:SkipOnScreenKeyboard": false, + "Invoke-WinpeStartup:ShowPnpDevices": false, + "Invoke-WinpeStartup:ShowPnpErrors": false, + "Invoke-WinpeStartup:SkipWiFi": false, + "Invoke-WinpeStartup:SkipIPConfig": false, + "Invoke-WinpeStartup:InstallModule": [], + "Invoke-WinpeStartup:SkipUpdateOSDCloud": false, + "Invoke-WinpeStartup:InvokeStartupCommand": [], + "Invoke-WinpeStartup:InvokeStartupCommandNoExit": false, + "Invoke-WinpeStartup:InvokeStartupCommandEA": "Continue", + "Invoke-WinpeStartup:InvokeMainCommand": [ "Show-OSDCloudDeviceInfo" ], - "Invoke-WinPEStartup:InvokeMainCommandNoExit": true, - "Invoke-WinPEStartup:InvokeMainCommandEA": "Continue", - "Invoke-WinPEStartup:InvokeShutdownCommand": [], - "Invoke-WinPEStartup:InvokeShutdownCommandNoExit": false, - "Invoke-WinPEStartup:InvokeShutdownCommandEA": "Continue" + "Invoke-WinpeStartup:InvokeMainCommandNoExit": true, + "Invoke-WinpeStartup:InvokeMainCommandEA": "Continue", + "Invoke-WinpeStartup:InvokeShutdownCommand": [], + "Invoke-WinpeStartup:InvokeShutdownCommandNoExit": false, + "Invoke-WinpeStartup:InvokeShutdownCommandEA": "Continue" } diff --git a/OSDCloud/core/winpestartup-profiles/OSDCloud.json b/OSDCloud/core/winpestartup-profiles/OSDCloud.json index 77a4f8f..aa1ebdd 100644 --- a/OSDCloud/core/winpestartup-profiles/OSDCloud.json +++ b/OSDCloud/core/winpestartup-profiles/OSDCloud.json @@ -3,10 +3,10 @@ "WINPESTARTUP_AUTHOR": "OSDeploy", "WINPESTARTUP_PROFILE": "OSDCloud" }, - "Invoke-WinPEStartup:InvokeMainCommand": [ + "Invoke-WinpeStartup:InvokeMainCommand": [ "Show-OSDCloudDeviceInfo", "Deploy-OSDCloud" ], - "Invoke-WinPEStartup:InvokeMainCommandNoExit": true, - "Invoke-WinPEStartup:InvokeMainCommandEA": "Continue" + "Invoke-WinpeStartup:InvokeMainCommandNoExit": true, + "Invoke-WinpeStartup:InvokeMainCommandEA": "Continue" } diff --git a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupDrivers.ps1 b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupDrivers.ps1 similarity index 82% rename from OSDCloud/private/WinPEStartup/Initialize-WinPEStartupDrivers.ps1 rename to OSDCloud/private/WinpeStartup/Initialize-WinpeStartupDrivers.ps1 index bd40a91..0ef919b 100644 --- a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupDrivers.ps1 +++ b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupDrivers.ps1 @@ -1,6 +1,6 @@ #requires -Version 5.1 -function Initialize-WinPEStartupDrivers { +function Initialize-WinpeStartupDrivers { <# .SYNOPSIS Loads drivers from $WinPEDriver$ folders found on any attached drive @@ -16,21 +16,21 @@ function Initialize-WinPEStartupDrivers { .PARAMETER SubfolderPath The relative subfolder path to search for on each drive. Defaults - to 'WinPEStartup\Drivers'. + to 'WinpeStartup\Drivers'. .EXAMPLE - Initialize-WinPEStartupDrivers + Initialize-WinpeStartupDrivers Scans all drive letters and loads every .inf found under $WinPEDriver$. .EXAMPLE - Initialize-WinPEStartupDrivers -SubfolderPath 'MyDrivers' + Initialize-WinpeStartupDrivers -SubfolderPath 'MyDrivers' Scans all drive letters for a subfolder path MyDrivers instead of - the default WinPEStartup\Drivers. + the default WinpeStartup\Drivers. .EXAMPLE - Initialize-WinPEStartupDrivers -Verbose + Initialize-WinpeStartupDrivers -Verbose Loads drivers with detailed progress showing each drive and .inf file. @@ -43,18 +43,18 @@ function Initialize-WinPEStartupDrivers { param ( [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] - [string]$SubfolderPath = 'WinPEStartup\Drivers' + [string]$SubfolderPath = 'WinpeStartup\Drivers' ) begin { $skipExecution = $false if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Initialize-WinPEStartupDrivers: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Initialize-WinpeStartupDrivers: Not running in WinPE (SystemDrive is not X:). Exiting.' $skipExecution = $true return } - Write-Verbose 'Initialize-WinPEStartupDrivers: Starting driver scan' + Write-Verbose 'Initialize-WinpeStartupDrivers: Starting driver scan' } process { @@ -86,6 +86,6 @@ function Initialize-WinPEStartupDrivers { end { if ($skipExecution) { return } - Write-Verbose 'Initialize-WinPEStartupDrivers: Complete' + Write-Verbose 'Initialize-WinpeStartupDrivers: Complete' } } diff --git a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupEnvironment.ps1 b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupEnvironment.ps1 similarity index 92% rename from OSDCloud/private/WinPEStartup/Initialize-WinPEStartupEnvironment.ps1 rename to OSDCloud/private/WinpeStartup/Initialize-WinpeStartupEnvironment.ps1 index 1f339e3..b542eeb 100644 --- a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupEnvironment.ps1 +++ b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupEnvironment.ps1 @@ -1,6 +1,6 @@ #requires -Version 5.1 -function Initialize-WinPEStartupEnvironment { +function Initialize-WinpeStartupEnvironment { <# .SYNOPSIS Initializes the WinPE shell environment for OS deployment @@ -21,13 +21,13 @@ function Initialize-WinPEStartupEnvironment { - Sets the PowerShell execution policy to Bypass via registry .EXAMPLE - Initialize-WinPEStartupEnvironment + Initialize-WinpeStartupEnvironment Creates all shell folders, sets environment variables, and writes registry keys for the current WinPE session. .EXAMPLE - Initialize-WinPEStartupEnvironment -Verbose + Initialize-WinpeStartupEnvironment -Verbose Runs the full environment initialization with detailed progress output. @@ -42,12 +42,12 @@ function Initialize-WinPEStartupEnvironment { begin { $skipExecution = $false if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Initialize-WinPEStartupEnvironment: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Initialize-WinpeStartupEnvironment: Not running in WinPE (SystemDrive is not X:). Exiting.' $skipExecution = $true return } - Write-Verbose 'Initialize-WinPEStartupEnvironment: Starting WinPE environment initialization' + Write-Verbose 'Initialize-WinpeStartupEnvironment: Starting WinPE environment initialization' $systemDrive = $env:SystemDrive $profileRoot = Join-Path -Path $systemDrive -ChildPath 'windows\system32\config\systemprofile' @@ -55,7 +55,7 @@ function Initialize-WinPEStartupEnvironment { process { if ($skipExecution) { return } - Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] [INFO] Initialize WinPEStartup" + Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] [INFO] Initialize WinpeStartup" # ── Shell Folders ─────────────────────────────────────────────── $shellFolders = @( Join-Path -Path $systemDrive -ChildPath 'Program Files\WindowsPowerShell\Scripts' @@ -100,6 +100,6 @@ function Initialize-WinPEStartupEnvironment { end { if ($skipExecution) { return } - Write-Verbose 'Initialize-WinPEStartupEnvironment: Complete' + Write-Verbose 'Initialize-WinpeStartupEnvironment: Complete' } } diff --git a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupFiles.ps1 b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupFiles.ps1 similarity index 81% rename from OSDCloud/private/WinPEStartup/Initialize-WinPEStartupFiles.ps1 rename to OSDCloud/private/WinpeStartup/Initialize-WinpeStartupFiles.ps1 index daa0ff4..cc3af89 100644 --- a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupFiles.ps1 +++ b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupFiles.ps1 @@ -1,6 +1,6 @@ #requires -Version 5.1 -function Initialize-WinPEStartupFiles { +function Initialize-WinpeStartupFiles { <# .SYNOPSIS Copies content from $WinPE$ folders found on any attached drive into the WinPE RAM disk @@ -17,21 +17,21 @@ function Initialize-WinPEStartupFiles { .PARAMETER SubfolderPath The relative subfolder path to search for on each drive. Defaults - to 'WinPEStartup\Files'. + to 'WinpeStartup\Files'. .EXAMPLE - Initialize-WinPEStartupFiles + Initialize-WinpeStartupFiles Scans all drive letters and copies content from every $WinPE$ folder. .EXAMPLE - Initialize-WinPEStartupFiles -SubfolderPath 'MyContent' + Initialize-WinpeStartupFiles -SubfolderPath 'MyContent' Scans all drive letters for a subfolder path MyContent instead of - the default WinPEStartup\Files. + the default WinpeStartup\Files. .EXAMPLE - Initialize-WinPEStartupFiles -Verbose + Initialize-WinpeStartupFiles -Verbose Copies content with detailed progress showing each source drive. @@ -44,18 +44,18 @@ function Initialize-WinPEStartupFiles { param ( [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] - [string]$SubfolderPath = 'WinPEStartup\Files' + [string]$SubfolderPath = 'WinpeStartup\Files' ) begin { $skipExecution = $false if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Initialize-WinPEStartupFiles: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Initialize-WinpeStartupFiles: Not running in WinPE (SystemDrive is not X:). Exiting.' $skipExecution = $true return } - Write-Verbose 'Initialize-WinPEStartupFiles: Starting content scan' + Write-Verbose 'Initialize-WinpeStartupFiles: Starting content scan' } process { @@ -78,6 +78,6 @@ function Initialize-WinPEStartupFiles { end { if ($skipExecution) { return } - Write-Verbose 'Initialize-WinPEStartupFiles: Complete' + Write-Verbose 'Initialize-WinpeStartupFiles: Complete' } } diff --git a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupMain.ps1 b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupMain.ps1 similarity index 81% rename from OSDCloud/private/WinPEStartup/Initialize-WinPEStartupMain.ps1 rename to OSDCloud/private/WinpeStartup/Initialize-WinpeStartupMain.ps1 index c945d85..796b9a7 100644 --- a/OSDCloud/private/WinPEStartup/Initialize-WinPEStartupMain.ps1 +++ b/OSDCloud/private/WinpeStartup/Initialize-WinpeStartupMain.ps1 @@ -1,6 +1,6 @@ #requires -Version 5.1 -function Initialize-WinPEStartupMain { +function Initialize-WinpeStartupMain { <# .SYNOPSIS Runs wpeinit and wpeutil to initialize the WinPE environment @@ -12,12 +12,12 @@ function Initialize-WinPEStartupMain { startnet.cmd / ReStartnet.cmd. .EXAMPLE - Initialize-WinPEStartupMain + Initialize-WinpeStartupMain Runs wpeinit and wpeutil initialization commands. .EXAMPLE - Initialize-WinPEStartupMain -Verbose + Initialize-WinpeStartupMain -Verbose Runs initialization with detailed progress output. @@ -32,12 +32,12 @@ function Initialize-WinPEStartupMain { begin { $skipExecution = $false if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Initialize-WinPEStartupMain: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Initialize-WinpeStartupMain: Not running in WinPE (SystemDrive is not X:). Exiting.' $skipExecution = $true return } - Write-Verbose 'Initialize-WinPEStartupMain: Starting' + Write-Verbose 'Initialize-WinpeStartupMain: Starting' } process { @@ -57,13 +57,13 @@ function Initialize-WinPEStartupMain { Start-Sleep -Seconds 2 # Wait for wpeutil UpdateBootInfo to complete before proceeding # Reassign USB drive letters to the next available letter starting at H. - Write-Verbose 'Running Set-WinPEStartupUSBDriveLetter' - Set-WinPEStartupUSBDriveLetter - Start-Sleep -Seconds 2 # Wait for Set-WinPEStartupUSBDriveLetter to complete before proceeding + Write-Verbose 'Running Set-WinpeStartupUSBDriveLetter' + Set-WinpeStartupUSBDriveLetter + Start-Sleep -Seconds 2 # Wait for Set-WinpeStartupUSBDriveLetter to complete before proceeding Write-Verbose 'Running wpeutil UpdateBootInfo' Invoke-WpeUtil -Command 'UpdateBootInfo' - Start-Sleep -Seconds 2 # Wait for Set-WinPEStartupUSBDriveLetter to complete before proceeding + Start-Sleep -Seconds 2 # Wait for Set-WinpeStartupUSBDriveLetter to complete before proceeding Write-Host -ForegroundColor DarkGray "[$(Get-Date -format s)] [INFO] Initialize network" ipconfig /release | Out-Null @@ -75,6 +75,6 @@ function Initialize-WinPEStartupMain { end { if ($skipExecution) { return } - Write-Verbose 'Initialize-WinPEStartupMain: Complete' + Write-Verbose 'Initialize-WinpeStartupMain: Complete' } } diff --git a/OSDCloud/private/WinPEStartup/Invoke-CmdScript.ps1 b/OSDCloud/private/WinpeStartup/Invoke-CmdScript.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-CmdScript.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-CmdScript.ps1 diff --git a/OSDCloud/private/WinPEStartup/Invoke-DrvLoad.ps1 b/OSDCloud/private/WinpeStartup/Invoke-DrvLoad.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-DrvLoad.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-DrvLoad.ps1 diff --git a/OSDCloud/private/WinPEStartup/Invoke-OSDCloudWifi.ps1 b/OSDCloud/private/WinpeStartup/Invoke-OSDCloudWifi.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-OSDCloudWifi.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-OSDCloudWifi.ps1 diff --git a/OSDCloud/private/WinPEStartup/Invoke-PEStartupCommand.ps1 b/OSDCloud/private/WinpeStartup/Invoke-PEStartupCommand.ps1 similarity index 97% rename from OSDCloud/private/WinPEStartup/Invoke-PEStartupCommand.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-PEStartupCommand.ps1 index f72d1a1..98f901a 100644 --- a/OSDCloud/private/WinPEStartup/Invoke-PEStartupCommand.ps1 +++ b/OSDCloud/private/WinpeStartup/Invoke-PEStartupCommand.ps1 @@ -68,7 +68,7 @@ $Unattend = @" $Unattend | Out-File -FilePath "$env:Temp\$Command.xml" -Encoding utf8 -Force if ($Wait -and $NoExit) { - # Write-Host -ForegroundColor Yellow "[$(Get-Date -format s)] This window may need to be closed to continue the WinPEStartup process" + # Write-Host -ForegroundColor Yellow "[$(Get-Date -format s)] This window may need to be closed to continue the WinpeStartup process" } if ($Wait) { diff --git a/OSDCloud/private/WinPEStartup/Invoke-PEStartupUpdateModule.ps1 b/OSDCloud/private/WinpeStartup/Invoke-PEStartupUpdateModule.ps1 similarity index 95% rename from OSDCloud/private/WinPEStartup/Invoke-PEStartupUpdateModule.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-PEStartupUpdateModule.ps1 index 2a1aa5a..9609d9c 100644 --- a/OSDCloud/private/WinPEStartup/Invoke-PEStartupUpdateModule.ps1 +++ b/OSDCloud/private/WinpeStartup/Invoke-PEStartupUpdateModule.ps1 @@ -66,7 +66,7 @@ $Unattend = @" 1 Update PowerShell Module $Name - powershell.exe -NoLogo -NoProfile -WindowStyle $WindowStyle $PSNoExit-Command Update-WinPEStartupModule -Name $Name + powershell.exe -NoLogo -NoProfile -WindowStyle $WindowStyle $PSNoExit-Command Update-WinpeStartupModule -Name $Name @@ -78,7 +78,7 @@ $Unattend = @" 1 Update PowerShell Module $Name - powershell.exe -NoLogo -NoProfile -WindowStyle $WindowStyle $PSNoExit-Command Update-WinPEStartupModule -Name $Name + powershell.exe -NoLogo -NoProfile -WindowStyle $WindowStyle $PSNoExit-Command Update-WinpeStartupModule -Name $Name @@ -89,7 +89,7 @@ $Unattend = @" $Unattend | Out-File -FilePath "$env:Temp\UpdatePSModule$Name.xml" -Encoding utf8 -Force if ($Wait -and $NoExit) { - # Write-Host -ForegroundColor Yellow "[$(Get-Date -format s)] This window may need to be closed to continue the WinPEStartup process" + # Write-Host -ForegroundColor Yellow "[$(Get-Date -format s)] This window may need to be closed to continue the WinpeStartup process" } if ($Wait) { diff --git a/OSDCloud/private/WinPEStartup/Invoke-Robocopy.ps1 b/OSDCloud/private/WinpeStartup/Invoke-Robocopy.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-Robocopy.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-Robocopy.ps1 diff --git a/OSDCloud/private/WinPEStartup/Invoke-WpeInit.ps1 b/OSDCloud/private/WinpeStartup/Invoke-WpeInit.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-WpeInit.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-WpeInit.ps1 diff --git a/OSDCloud/private/WinPEStartup/Invoke-WpeUtil.ps1 b/OSDCloud/private/WinpeStartup/Invoke-WpeUtil.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Invoke-WpeUtil.ps1 rename to OSDCloud/private/WinpeStartup/Invoke-WpeUtil.ps1 diff --git a/OSDCloud/private/WinPEStartup/OSDCloudWifi.ps1 b/OSDCloud/private/WinpeStartup/OSDCloudWifi.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/OSDCloudWifi.ps1 rename to OSDCloud/private/WinpeStartup/OSDCloudWifi.ps1 diff --git a/OSDCloud/private/WinPEStartup/Set-WinPEStartupUSBDriveLetter.ps1 b/OSDCloud/private/WinpeStartup/Set-WinpeStartupUSBDriveLetter.ps1 similarity index 92% rename from OSDCloud/private/WinPEStartup/Set-WinPEStartupUSBDriveLetter.ps1 rename to OSDCloud/private/WinpeStartup/Set-WinpeStartupUSBDriveLetter.ps1 index 7cfd85c..fdc1cc5 100644 --- a/OSDCloud/private/WinPEStartup/Set-WinPEStartupUSBDriveLetter.ps1 +++ b/OSDCloud/private/WinpeStartup/Set-WinpeStartupUSBDriveLetter.ps1 @@ -1,6 +1,6 @@ #requires -Version 5.1 -function Set-WinPEStartupUSBDriveLetter { +function Set-WinpeStartupUSBDriveLetter { <# .SYNOPSIS Reassigns USB drive letters in WinPE starting at H. @@ -14,12 +14,12 @@ function Set-WinPEStartupUSBDriveLetter { ([System.IO.DriveInfo]::GetDrives()) to improve reliability in WinPE. .EXAMPLE - Set-WinPEStartupUSBDriveLetter + Set-WinpeStartupUSBDriveLetter Reassigns USB partition drive letters starting at H. .EXAMPLE - Set-WinPEStartupUSBDriveLetter -Verbose + Set-WinpeStartupUSBDriveLetter -Verbose Reassigns USB partition drive letters and writes detailed logs. @@ -34,7 +34,7 @@ function Set-WinPEStartupUSBDriveLetter { $Error.Clear() if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Set-WinPEStartupUSBDriveLetter: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Set-WinpeStartupUSBDriveLetter: Not running in WinPE (SystemDrive is not X:). Exiting.' return } @@ -88,7 +88,7 @@ function Set-WinPEStartupUSBDriveLetter { } if (-not $newLetter) { - Write-Warning "Set-WinPEStartupUSBDriveLetter: No available drive letters remain in the H-Z range for Disk $($usbPartition.DiskNumber) Partition $($usbPartition.PartitionNumber)." + Write-Warning "Set-WinpeStartupUSBDriveLetter: No available drive letters remain in the H-Z range for Disk $($usbPartition.DiskNumber) Partition $($usbPartition.PartitionNumber)." $failureCount += 1 continue } @@ -107,7 +107,7 @@ function Set-WinPEStartupUSBDriveLetter { $resultCount += 1 } catch { - Write-Warning "Set-WinPEStartupUSBDriveLetter: Failed to reassign Disk $($usbPartition.DiskNumber) Partition $($usbPartition.PartitionNumber) from $oldLetter to $newLetter. $($_.Exception.Message)" + Write-Warning "Set-WinpeStartupUSBDriveLetter: Failed to reassign Disk $($usbPartition.DiskNumber) Partition $($usbPartition.PartitionNumber) from $oldLetter to $newLetter. $($_.Exception.Message)" $failureCount += 1 } } diff --git a/OSDCloud/private/WinPEStartup/Test-OSDCloudInternetConnection.ps1 b/OSDCloud/private/WinpeStartup/Test-OSDCloudInternetConnection.ps1 similarity index 100% rename from OSDCloud/private/WinPEStartup/Test-OSDCloudInternetConnection.ps1 rename to OSDCloud/private/WinpeStartup/Test-OSDCloudInternetConnection.ps1 diff --git a/OSDCloud/public/WinPE/Invoke-WinPEStartup.ps1 b/OSDCloud/public/WinPE/Invoke-WinpeStartup.ps1 similarity index 87% rename from OSDCloud/public/WinPE/Invoke-WinPEStartup.ps1 rename to OSDCloud/public/WinPE/Invoke-WinpeStartup.ps1 index faa3121..5dcf7ee 100644 --- a/OSDCloud/public/WinPE/Invoke-WinPEStartup.ps1 +++ b/OSDCloud/public/WinPE/Invoke-WinpeStartup.ps1 @@ -1,12 +1,12 @@ #requires -Version 5.1 -function Invoke-WinPEStartup { +function Invoke-WinpeStartup { <# .SYNOPSIS - Runs the WinPEStartup workflow for OSDCloud. + Runs the WinpeStartup workflow for OSDCloud. .DESCRIPTION - Executes the OSDCloud WinPEStartup sequence from a single entry point. + Executes the OSDCloud WinpeStartup sequence from a single entry point. The function can optionally load defaults from module JSON, discover and apply a startup profile, and then run startup steps in order including environment setup, drivers, files, hardware checks, connectivity, module @@ -21,17 +21,17 @@ function Invoke-WinPEStartup { outside WinPE, it writes a warning and exits without running startup steps. .EXAMPLE - Invoke-WinPEStartup + Invoke-WinpeStartup Runs the startup workflow with default behavior. .EXAMPLE - Invoke-WinPEStartup -Verbose + Invoke-WinpeStartup -Verbose Runs the startup workflow and writes verbose progress details. .EXAMPLE - Invoke-WinPEStartup -SkipWiFi -SkipIPConfig + Invoke-WinpeStartup -SkipWiFi -SkipIPConfig Runs startup but skips Wi-Fi and IP configuration display steps. @@ -39,10 +39,10 @@ function Invoke-WinPEStartup { Skips launching the on-screen keyboard check. .PARAMETER ShowPnpDevices - Shows the Plug and Play device hardware window (`Show-WinPEStartupDevices`). By default this window is not displayed. + Shows the Plug and Play device hardware window (`Show-WinpeStartupDevices`). By default this window is not displayed. .PARAMETER ShowPnpErrors - Shows the Plug and Play device error window (`Show-WinPEStartupDeviceErrors`). By default this window is not displayed. + Shows the Plug and Play device error window (`Show-WinpeStartupDeviceErrors`). By default this window is not displayed. .PARAMETER SkipWiFi Skips Wi-Fi startup and connection checks. @@ -171,7 +171,7 @@ function Invoke-WinPEStartup { $skipExecution = $false if ($env:SystemDrive -ne 'X:') { - Write-Warning 'Invoke-WinPEStartup: Not running in WinPE (SystemDrive is not X:). Exiting.' + Write-Warning 'Invoke-WinpeStartup: Not running in WinPE (SystemDrive is not X:). Exiting.' $skipExecution = $true return } @@ -202,7 +202,7 @@ function Invoke-WinPEStartup { ) $knownParameters = @($switchLikeParameters + $arrayParameters + $stringParameters) - $defaultsPrefix = 'Invoke-WinPEStartup:' + $defaultsPrefix = 'Invoke-WinpeStartup:' $resolvedDefaults = [ordered]@{} $selectedProfile = $null $profileEnvironment = $null @@ -216,7 +216,7 @@ function Invoke-WinPEStartup { } } - function ConvertFrom-WinPEStartupJsonContent { + function ConvertFrom-WinpeStartupJsonContent { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] @@ -227,7 +227,7 @@ function Invoke-WinPEStartup { return (ConvertFrom-Json -InputObject $sanitizedJson -ErrorAction Stop) } - function ConvertTo-WinPEStartupBoolean { + function ConvertTo-WinpeStartupBoolean { [CmdletBinding()] param ( [Parameter()] @@ -263,7 +263,7 @@ function Invoke-WinPEStartup { return [bool]$Value } - function ConvertTo-WinPEStartupStringArray { + function ConvertTo-WinpeStartupStringArray { [CmdletBinding()] param ( [Parameter()] @@ -292,7 +292,7 @@ function Invoke-WinPEStartup { return @([string]$Value) } - function Set-WinPEStartupProfileEnvironment { + function Set-WinpeStartupProfileEnvironment { [CmdletBinding()] param ( [Parameter()] @@ -303,7 +303,7 @@ function Invoke-WinPEStartup { ) if ($InputObject -isnot [System.Management.Automation.PSCustomObject] -and $InputObject -isnot [System.Collections.IDictionary]) { - Write-Warning "Invoke-WinPEStartup: Skipping invalid Environment section from '$SourceName'. Expected a JSON object." + Write-Warning "Invoke-WinpeStartup: Skipping invalid Environment section from '$SourceName'. Expected a JSON object." return } @@ -328,27 +328,27 @@ function Invoke-WinPEStartup { foreach ($entry in $entries) { if ([string]::IsNullOrWhiteSpace($entry.Name) -or $entry.Name.Contains('=') -or $entry.Name.Contains([char]0)) { - Write-Warning "Invoke-WinPEStartup: Skipping invalid environment variable name from '$SourceName'." + Write-Warning "Invoke-WinpeStartup: Skipping invalid environment variable name from '$SourceName'." continue } if ($null -eq $entry.Value -or $entry.Value -isnot [System.IConvertible]) { - Write-Warning "Invoke-WinPEStartup: Skipping unsupported value for environment variable '$($entry.Name)' from '$SourceName'. Expected a string, number, or boolean." + Write-Warning "Invoke-WinpeStartup: Skipping unsupported value for environment variable '$($entry.Name)' from '$SourceName'. Expected a string, number, or boolean." continue } try { $environmentValue = [System.Convert]::ToString($entry.Value, [System.Globalization.CultureInfo]::InvariantCulture) [System.Environment]::SetEnvironmentVariable($entry.Name, $environmentValue, [System.EnvironmentVariableTarget]::Process) - Write-Verbose "Invoke-WinPEStartup: Set process environment variable '$($entry.Name)' from '$SourceName'." + Write-Verbose "Invoke-WinpeStartup: Set process environment variable '$($entry.Name)' from '$SourceName'." } catch { - Write-Warning "Invoke-WinPEStartup: Failed to set environment variable '$($entry.Name)' from '$SourceName': $($_.Exception.Message)" + Write-Warning "Invoke-WinpeStartup: Failed to set environment variable '$($entry.Name)' from '$SourceName': $($_.Exception.Message)" } } } - function Add-WinPEStartupDefaults { + function Add-WinpeStartupDefaults { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] @@ -383,7 +383,7 @@ function Invoke-WinPEStartup { foreach ($entry in $entries) { if ([string]::IsNullOrWhiteSpace($entry.Name)) { - Write-Warning "Invoke-WinPEStartup: Skipping empty key from '$SourceName'." + Write-Warning "Invoke-WinpeStartup: Skipping empty key from '$SourceName'." continue } @@ -392,7 +392,7 @@ function Invoke-WinPEStartup { } if ($entry.Value -is [System.Management.Automation.PSCustomObject] -or $entry.Value -is [System.Collections.IDictionary]) { - Write-Warning "Invoke-WinPEStartup: Skipping nested object value for '$($entry.Name)' from '$SourceName'. Profiles and defaults must be flat key-value maps." + Write-Warning "Invoke-WinpeStartup: Skipping nested object value for '$($entry.Name)' from '$SourceName'. Profiles and defaults must be flat key-value maps." continue } @@ -400,12 +400,12 @@ function Invoke-WinPEStartup { $hasPrefix = $parameterName.StartsWith($defaultsPrefix, [System.StringComparison]::OrdinalIgnoreCase) if ($KeyFormat -eq 'Prefixed' -and -not $hasPrefix) { - Write-Verbose "Invoke-WinPEStartup: Ignoring non-prefixed key '$($entry.Name)' from '$SourceName'." + Write-Verbose "Invoke-WinpeStartup: Ignoring non-prefixed key '$($entry.Name)' from '$SourceName'." continue } if ($KeyFormat -eq 'Splat' -and $hasPrefix) { - Write-Verbose "Invoke-WinPEStartup: Ignoring prefixed key '$($entry.Name)' from '$SourceName'." + Write-Verbose "Invoke-WinpeStartup: Ignoring prefixed key '$($entry.Name)' from '$SourceName'." continue } @@ -418,7 +418,7 @@ function Invoke-WinPEStartup { } if ($knownParameters -notcontains $parameterName) { - Write-Verbose "Invoke-WinPEStartup: Ignoring unknown default key '$($entry.Name)' from '$SourceName'." + Write-Verbose "Invoke-WinpeStartup: Ignoring unknown default key '$($entry.Name)' from '$SourceName'." continue } @@ -429,31 +429,31 @@ function Invoke-WinPEStartup { if (Test-Path -LiteralPath $Script:OSDCloudPSDefaultParameterValuesPath -PathType Leaf) { try { $rawDefaults = Get-Content -LiteralPath $Script:OSDCloudPSDefaultParameterValuesPath -Raw -ErrorAction Stop - $moduleDefaults = ConvertFrom-WinPEStartupJsonContent -RawContent $rawDefaults - Add-WinPEStartupDefaults -InputObject $moduleDefaults -SourceName $Script:OSDCloudPSDefaultParameterValuesPath -KeyFormat Prefixed + $moduleDefaults = ConvertFrom-WinpeStartupJsonContent -RawContent $rawDefaults + Add-WinpeStartupDefaults -InputObject $moduleDefaults -SourceName $Script:OSDCloudPSDefaultParameterValuesPath -KeyFormat Prefixed } catch { - Write-Warning "Invoke-WinPEStartup: Failed to load defaults from '$Script:OSDCloudPSDefaultParameterValuesPath': $($_.Exception.Message)" + Write-Warning "Invoke-WinpeStartup: Failed to load defaults from '$Script:OSDCloudPSDefaultParameterValuesPath': $($_.Exception.Message)" } } # Initialize WinPE environment (shell folders, env vars, registry) - Initialize-WinPEStartupEnvironment + Initialize-WinpeStartupEnvironment - # Load drivers from WinPEStartup\Drivers on attached drives - Initialize-WinPEStartupDrivers + # Load drivers from WinpeStartup\Drivers on attached drives + Initialize-WinpeStartupDrivers - # Copy files from WinPEStartup\Files on attached drives into the RAM disk - Initialize-WinPEStartupFiles + # Copy files from WinpeStartup\Files on attached drives into the RAM disk + Initialize-WinpeStartupFiles # Run wpeinit and wpeutil commands and wait for initialization to complete - Initialize-WinPEStartupMain + Initialize-WinpeStartupMain Start-Sleep -Seconds 3 $candidateProfiles = [System.Collections.Generic.List[object]]::new() foreach ($driveLetter in [char[]](67..90)) { - $profileRoot = '{0}:\WinPEStartup\profiles' -f $driveLetter + $profileRoot = '{0}:\WinpeStartup\profiles' -f $driveLetter if (-not (Test-Path -LiteralPath $profileRoot -PathType Container)) { continue @@ -471,7 +471,7 @@ function Invoke-WinPEStartup { } } catch { - Write-Verbose "Invoke-WinPEStartup: Unable to enumerate '$profileRoot': $($_.Exception.Message)" + Write-Verbose "Invoke-WinpeStartup: Unable to enumerate '$profileRoot': $($_.Exception.Message)" } } @@ -488,11 +488,11 @@ function Invoke-WinPEStartup { # Use the underlying list's Count, which is always reliable, to decide auto-select vs. prompt. if ($candidateProfiles.Count -eq 1) { $selectedProfile = $orderedProfiles[0] - Write-Verbose "Invoke-WinPEStartup: Auto-selected only available profile '$($selectedProfile.Path)'" + Write-Verbose "Invoke-WinpeStartup: Auto-selected only available profile '$($selectedProfile.Path)'" } else { Write-Host '' - Write-Host 'WinPEStartup Profiles:' + Write-Host 'WinpeStartup Profiles:' $orderedProfiles | Select-Object Index, Profile, Path | Format-Table -AutoSize | @@ -503,13 +503,13 @@ function Invoke-WinPEStartup { $selection = Read-Host 'Select a profile by number, or press Enter to cancel' if ([string]::IsNullOrWhiteSpace($selection)) { - Write-Warning 'Invoke-WinPEStartup: Profile selection cancelled.' + Write-Warning 'Invoke-WinpeStartup: Profile selection cancelled.' $skipExecution = $true return } if ($selection -match '^(?i)q(?:uit)?$') { - Write-Warning 'Invoke-WinPEStartup: Profile selection cancelled.' + Write-Warning 'Invoke-WinpeStartup: Profile selection cancelled.' $skipExecution = $true return } @@ -520,17 +520,17 @@ function Invoke-WinPEStartup { } if (-not $selectedProfile) { - Write-Warning "Invoke-WinPEStartup: Invalid selection '$selection'." + Write-Warning "Invoke-WinpeStartup: Invalid selection '$selection'." } } } } if ($selectedProfile) { - Write-Verbose "Invoke-WinPEStartup: Selected profile '$($selectedProfile.Path)'" + Write-Verbose "Invoke-WinpeStartup: Selected profile '$($selectedProfile.Path)'" try { $rawProfile = Get-Content -LiteralPath $selectedProfile.Path -Raw -ErrorAction Stop - $profileDefaults = ConvertFrom-WinPEStartupJsonContent -RawContent $rawProfile + $profileDefaults = ConvertFrom-WinpeStartupJsonContent -RawContent $rawProfile $environmentProperties = @($profileDefaults.PSObject.Properties | Where-Object { $_.Name -in @('env', 'Environment') }) if ($environmentProperties.Count -gt 1) { @@ -543,11 +543,11 @@ function Invoke-WinPEStartup { $profileEnvironment = $environmentProperty.Value } - Add-WinPEStartupDefaults -InputObject $profileDefaults -SourceName $selectedProfile.Path -KeyFormat Any + Add-WinpeStartupDefaults -InputObject $profileDefaults -SourceName $selectedProfile.Path -KeyFormat Any Write-Host "WinPE profile applied: $($selectedProfile.Path)" } catch { - Write-Warning "Invoke-WinPEStartup: Failed to load profile '$($selectedProfile.Path)': $($_.Exception.Message)" + Write-Warning "Invoke-WinpeStartup: Failed to load profile '$($selectedProfile.Path)': $($_.Exception.Message)" $skipExecution = $true return } @@ -555,7 +555,7 @@ function Invoke-WinPEStartup { foreach ($parameterName in $knownParameters) { if ($PSBoundParameters.ContainsKey($parameterName) -and -not $globalPreBoundParameters.Contains($parameterName)) { - Write-Verbose "Invoke-WinPEStartup: Skipping JSON default '$parameterName' because it is already bound." + Write-Verbose "Invoke-WinpeStartup: Skipping JSON default '$parameterName' because it is already bound." continue } @@ -567,47 +567,47 @@ function Invoke-WinPEStartup { switch ($parameterName) { 'SkipOnScreenKeyboard' { - $SkipOnScreenKeyboard = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $SkipOnScreenKeyboard = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'ShowPnpDevices' { - $ShowPnpDevices = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $ShowPnpDevices = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'ShowPnpErrors' { - $ShowPnpErrors = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $ShowPnpErrors = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'SkipWiFi' { - $SkipWiFi = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $SkipWiFi = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'SkipIPConfig' { - $SkipIPConfig = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $SkipIPConfig = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'SkipUpdateOSDCloud' { - $SkipUpdateOSDCloud = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $SkipUpdateOSDCloud = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'InstallModule' { - $InstallModule = ConvertTo-WinPEStartupStringArray -Value $parameterValue + $InstallModule = ConvertTo-WinpeStartupStringArray -Value $parameterValue } 'InvokeStartupCommand' { - $InvokeStartupCommand = ConvertTo-WinPEStartupStringArray -Value $parameterValue + $InvokeStartupCommand = ConvertTo-WinpeStartupStringArray -Value $parameterValue } 'InvokeMainCommand' { - $InvokeMainCommand = ConvertTo-WinPEStartupStringArray -Value $parameterValue + $InvokeMainCommand = ConvertTo-WinpeStartupStringArray -Value $parameterValue } 'InvokeShutdownCommand' { - $InvokeShutdownCommand = ConvertTo-WinPEStartupStringArray -Value $parameterValue + $InvokeShutdownCommand = ConvertTo-WinpeStartupStringArray -Value $parameterValue } 'InvokeStartupCommandNoExit' { - $InvokeStartupCommandNoExit = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $InvokeStartupCommandNoExit = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'InvokeMainCommandNoExit' { - $InvokeMainCommandNoExit = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $InvokeMainCommandNoExit = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'InvokeShutdownCommandNoExit' { - $InvokeShutdownCommandNoExit = ConvertTo-WinPEStartupBoolean -Value $parameterValue + $InvokeShutdownCommandNoExit = ConvertTo-WinpeStartupBoolean -Value $parameterValue } 'InvokeStartupCommandEA' { if ($parameterValue -notin @('Continue', 'Stop')) { - Write-Warning "Invoke-WinPEStartup: Invalid value '$parameterValue' for 'InvokeStartupCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." + Write-Warning "Invoke-WinpeStartup: Invalid value '$parameterValue' for 'InvokeStartupCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." } else { $InvokeStartupCommandEA = [string]$parameterValue @@ -615,7 +615,7 @@ function Invoke-WinPEStartup { } 'InvokeMainCommandEA' { if ($parameterValue -notin @('Continue', 'Stop')) { - Write-Warning "Invoke-WinPEStartup: Invalid value '$parameterValue' for 'InvokeMainCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." + Write-Warning "Invoke-WinpeStartup: Invalid value '$parameterValue' for 'InvokeMainCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." } else { $InvokeMainCommandEA = [string]$parameterValue @@ -623,7 +623,7 @@ function Invoke-WinPEStartup { } 'InvokeShutdownCommandEA' { if ($parameterValue -notin @('Continue', 'Stop')) { - Write-Warning "Invoke-WinPEStartup: Invalid value '$parameterValue' for 'InvokeShutdownCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." + Write-Warning "Invoke-WinpeStartup: Invalid value '$parameterValue' for 'InvokeShutdownCommandEA' from JSON. Expected 'Continue' or 'Stop'. Skipping." } else { $InvokeShutdownCommandEA = [string]$parameterValue @@ -631,14 +631,14 @@ function Invoke-WinPEStartup { } } - Write-Verbose "Invoke-WinPEStartup: Applied default '$parameterName' from JSON configuration." + Write-Verbose "Invoke-WinpeStartup: Applied default '$parameterName' from JSON configuration." } if ($selectedProfile -and $environmentProperty) { - Set-WinPEStartupProfileEnvironment -InputObject $profileEnvironment -SourceName $selectedProfile.Path + Set-WinpeStartupProfileEnvironment -InputObject $profileEnvironment -SourceName $selectedProfile.Path } - Write-Verbose 'Invoke-WinPEStartup: Starting full WinPEStartup sequence' + Write-Verbose 'Invoke-WinpeStartup: Starting full WinpeStartup sequence' } process { @@ -646,33 +646,33 @@ function Invoke-WinPEStartup { # On Screen Keyboard if one is not detected if (-not $SkipOnScreenKeyboard) { - Invoke-WinPEStartupManager OSK + Invoke-WinpeStartupManager OSK } if ($ShowPnpDevices) { - Invoke-WinPEStartupManager DeviceHardware + Invoke-WinpeStartupManager DeviceHardware } if ($ShowPnpErrors) { - Invoke-WinPEStartupManager DeviceErrors + Invoke-WinpeStartupManager DeviceErrors } if (-not $SkipWiFi) { - Invoke-WinPEStartupManager WiFi + Invoke-WinpeStartupManager WiFi } if (-not $SkipIPConfig) { - Invoke-WinPEStartupManager IPConfig + Invoke-WinpeStartupManager IPConfig } if ($InstallModule) { foreach ($module in $InstallModule) { - Invoke-WinPEStartupManager UpdateModule -Value $module + Invoke-WinpeStartupManager UpdateModule -Value $module } } if (-not $SkipUpdateOSDCloud) { - Invoke-WinPEStartupManager UpdateModule -Value OSDCloud + Invoke-WinpeStartupManager UpdateModule -Value OSDCloud } if ($InvokeStartupCommand) { @@ -834,6 +834,6 @@ function Invoke-WinPEStartup { end { if ($skipExecution) { return } - Write-Verbose 'Invoke-WinPEStartup: Complete' + Write-Verbose 'Invoke-WinpeStartup: Complete' } } diff --git a/OSDCloud/public/WinPE/Invoke-WinPEStartupManager.ps1 b/OSDCloud/public/WinPE/Invoke-WinpeStartupManager.ps1 similarity index 87% rename from OSDCloud/public/WinPE/Invoke-WinPEStartupManager.ps1 rename to OSDCloud/public/WinPE/Invoke-WinpeStartupManager.ps1 index 2b988d6..be06216 100644 --- a/OSDCloud/public/WinPE/Invoke-WinPEStartupManager.ps1 +++ b/OSDCloud/public/WinPE/Invoke-WinpeStartupManager.ps1 @@ -1,9 +1,9 @@ <# .SYNOPSIS - Invokes a WinPEStartup utility action by Id. + Invokes a WinpeStartup utility action by Id. .DESCRIPTION - Routes WinPEStartup actions to the corresponding helper command. + Routes WinpeStartup actions to the corresponding helper command. Actions include on-screen keyboard handling, hardware and error display, network utilities, and module update operations. @@ -17,37 +17,37 @@ For UpdateModule, set this value to the module name to update. .EXAMPLE - Invoke-WinPEStartupManager -Id OSK + Invoke-WinpeStartupManager -Id OSK Launches the on-screen keyboard when no physical keyboard is detected. .EXAMPLE - Invoke-WinPEStartupManager -Id DeviceErrors + Invoke-WinpeStartupManager -Id DeviceErrors Displays non-OK Plug and Play device status details. .EXAMPLE - Invoke-WinPEStartupManager -Id DeviceHardware + Invoke-WinpeStartupManager -Id DeviceHardware Displays Plug and Play device hardware details. .EXAMPLE - Invoke-WinPEStartupManager -Id Info + Invoke-WinpeStartupManager -Id Info Shows comprehensive device information. .EXAMPLE - Invoke-WinPEStartupManager -Id IPConfig + Invoke-WinpeStartupManager -Id IPConfig Launches IP configuration display in a minimized window. .EXAMPLE - Invoke-WinPEStartupManager -Id WiFi + Invoke-WinpeStartupManager -Id WiFi Starts Wi-Fi connection workflow when network connectivity is not detected. .EXAMPLE - Invoke-WinPEStartupManager -Id UpdateModule -Value OSDCloud + Invoke-WinpeStartupManager -Id UpdateModule -Value OSDCloud Updates the OSDCloud module. @@ -55,13 +55,13 @@ System.Void .NOTES - This function is intended for WinPEStartup workflows. + This function is intended for WinpeStartup workflows. The UpdateModule action requires Value to be set to a module name. .LINK https://github.com/OSDeploy/OSDCloud #> -function Invoke-WinPEStartupManager { +function Invoke-WinpeStartupManager { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] @@ -103,10 +103,10 @@ function Invoke-WinPEStartupManager { } } 'DeviceErrors' { - Invoke-PEStartupCommand Show-WinPEStartupDeviceErrors -NoExit -Wait + Invoke-PEStartupCommand Show-WinpeStartupDeviceErrors -NoExit -Wait } 'DeviceHardware' { - Invoke-PEStartupCommand Show-WinPEStartupDevices -WindowStyle Minimized -NoExit + Invoke-PEStartupCommand Show-WinpeStartupDevices -WindowStyle Minimized -NoExit } 'WiFi' { # Wait a few seconds for the network stack to initialize before checking for connectivity @@ -127,12 +127,12 @@ function Invoke-WinPEStartupManager { } else { Write-Host "OSDCloud Wi-Fi: Network connection not detected. Launching Wi-Fi connection." - Invoke-PEStartupCommand Show-WinPEStartupWifi -Wait + Invoke-PEStartupCommand Show-WinpeStartupWifi -Wait } } 'IPConfig' { Write-Host "OSDCloud IPConfig: Launching IPConfig in minimized window." - Invoke-PEStartupCommand Show-WinPEStartupIpconfig -Run Asynchronous -WindowStyle Minimized -NoExit + Invoke-PEStartupCommand Show-WinpeStartupIpconfig -Run Asynchronous -WindowStyle Minimized -NoExit } 'UpdateModule' { # Value must be specified for this function to work diff --git a/OSDCloud/public/WinPE/Show-WinPEStartupDeviceErrors.ps1 b/OSDCloud/public/WinPE/Show-WinpeStartupDeviceErrors.ps1 similarity index 94% rename from OSDCloud/public/WinPE/Show-WinPEStartupDeviceErrors.ps1 rename to OSDCloud/public/WinPE/Show-WinpeStartupDeviceErrors.ps1 index d57fe94..fe27338 100644 --- a/OSDCloud/public/WinPE/Show-WinPEStartupDeviceErrors.ps1 +++ b/OSDCloud/public/WinPE/Show-WinpeStartupDeviceErrors.ps1 @@ -1,4 +1,4 @@ -function Show-WinPEStartupDeviceErrors { +function Show-WinpeStartupDeviceErrors { <# .SYNOPSIS Displays WinPE Plug and Play device errors. @@ -9,9 +9,9 @@ function Show-WinPEStartupDeviceErrors { displays results in table format, waits 5 seconds, then exits. .EXAMPLE - Show-WinPEStartupDeviceErrors + Show-WinpeStartupDeviceErrors - Displays detected device errors during WinPEStartup. + Displays detected device errors during WinpeStartup. .OUTPUTS System.Void diff --git a/OSDCloud/public/WinPE/Show-WinPEStartupDevices.ps1 b/OSDCloud/public/WinPE/Show-WinpeStartupDevices.ps1 similarity index 97% rename from OSDCloud/public/WinPE/Show-WinPEStartupDevices.ps1 rename to OSDCloud/public/WinPE/Show-WinpeStartupDevices.ps1 index b1200c0..a334c23 100644 --- a/OSDCloud/public/WinPE/Show-WinPEStartupDevices.ps1 +++ b/OSDCloud/public/WinPE/Show-WinpeStartupDevices.ps1 @@ -1,4 +1,4 @@ -function Show-WinPEStartupDevices { +function Show-WinpeStartupDevices { <# .SYNOPSIS Displays WinPE Plug and Play device inventory. @@ -9,7 +9,7 @@ function Show-WinPEStartupDevices { query command to the clipboard for reuse. .EXAMPLE - Show-WinPEStartupDevices + Show-WinpeStartupDevices Displays Plug and Play hardware information in WinPE. diff --git a/OSDCloud/public/WinPE/Show-WinPEStartupIpconfig.ps1 b/OSDCloud/public/WinPE/Show-WinpeStartupIpconfig.ps1 similarity index 87% rename from OSDCloud/public/WinPE/Show-WinPEStartupIpconfig.ps1 rename to OSDCloud/public/WinPE/Show-WinpeStartupIpconfig.ps1 index c8f2960..0139efe 100644 --- a/OSDCloud/public/WinPE/Show-WinPEStartupIpconfig.ps1 +++ b/OSDCloud/public/WinPE/Show-WinpeStartupIpconfig.ps1 @@ -4,10 +4,10 @@ .DESCRIPTION Runs ipconfig /all to display network adapter and addressing details. - This function is typically used during WinPEStartup troubleshooting. + This function is typically used during WinpeStartup troubleshooting. .EXAMPLE - Show-WinPEStartupIpconfig + Show-WinpeStartupIpconfig Displays full adapter and IP configuration details. @@ -21,7 +21,7 @@ .LINK ipconfig #> -function Show-WinPEStartupIpconfig { +function Show-WinpeStartupIpconfig { [CmdletBinding()] param () #================================================= diff --git a/OSDCloud/public/WinPE/Show-WinPEStartupWifi.ps1 b/OSDCloud/public/WinPE/Show-WinpeStartupWifi.ps1 similarity index 97% rename from OSDCloud/public/WinPE/Show-WinPEStartupWifi.ps1 rename to OSDCloud/public/WinPE/Show-WinpeStartupWifi.ps1 index 3504b05..07d27be 100644 --- a/OSDCloud/public/WinPE/Show-WinPEStartupWifi.ps1 +++ b/OSDCloud/public/WinPE/Show-WinpeStartupWifi.ps1 @@ -9,7 +9,7 @@ local IP assignment and renews DHCP leases when needed. .EXAMPLE - Show-WinPEStartupWifi + Show-WinpeStartupWifi Attempts to establish Wi-Fi connectivity and validates network initialization. @@ -17,15 +17,15 @@ System.Void .NOTES - This function is intended for WinPEStartup workflows. + This function is intended for WinpeStartup workflows. If required wireless components are missing, Wi-Fi start is skipped. #> -function Show-WinPEStartupWifi { +function Show-WinpeStartupWifi { [CmdletBinding()] param () #================================================= $Error.Clear() - $host.ui.RawUI.WindowTitle = "[$(Get-Date -format s)] OSDCloud - WinPEStartup Wi-Fi" + $host.ui.RawUI.WindowTitle = "[$(Get-Date -format s)] OSDCloud - WinpeStartup Wi-Fi" #================================================= # Test-OSDCloudInternetConnection if (Test-OSDCloudInternetConnection -Uri 'google.com') { diff --git a/OSDCloud/public/WinPE/Update-WinPEStartupModule.ps1 b/OSDCloud/public/WinPE/Update-WinpeStartupModule.ps1 similarity index 89% rename from OSDCloud/public/WinPE/Update-WinPEStartupModule.ps1 rename to OSDCloud/public/WinPE/Update-WinpeStartupModule.ps1 index 5d32c83..c38174f 100644 --- a/OSDCloud/public/WinPE/Update-WinPEStartupModule.ps1 +++ b/OSDCloud/public/WinPE/Update-WinpeStartupModule.ps1 @@ -11,12 +11,12 @@ Specifies the module name to install or update. .EXAMPLE - Update-WinPEStartupModule -Name OSDCloud + Update-WinpeStartupModule -Name OSDCloud Installs or updates the OSDCloud module and imports it. .EXAMPLE - Update-WinPEStartupModule -Name PSDiskPart + Update-WinpeStartupModule -Name PSDiskPart Installs or updates the PSDiskPart module after the countdown. @@ -24,10 +24,10 @@ System.Void .NOTES - This function is intended for WinPEStartup workflows. + This function is intended for WinpeStartup workflows. Installation uses AllUsers scope, Force, and SkipPublisherCheck. #> -function Update-WinPEStartupModule { +function Update-WinpeStartupModule { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] diff --git a/PRIVACY.md b/PRIVACY.md index ed958dc..c35a257 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -55,7 +55,7 @@ What Data May Be Shared - Deployment analytics events include the fields described in the Deployment Analytics section. - Connectivity and time checks send standard HTTP HEAD requests to endpoints such as Microsoft connectivity test services or Google, depending on the workflow path. - Catalog lookups and content downloads send standard HTTP or HTTPS requests to Microsoft, GitHub, OEM, PowerShell Gallery, or other selected content endpoints. -- User-provided WinPEStartup command URLs may be fetched and executed if configured by the operator. +- User-provided WinpeStartup command URLs may be fetched and executed if configured by the operator. - Third-party services you connect to may log network metadata such as IP address, request headers, requested URL, and timestamp. External Services @@ -69,7 +69,7 @@ OSDCloud may interact with external services when you choose to download content - **PowerShell Gallery** - used for module availability checks and updates. Governed by the Microsoft Privacy Statement. - **OEM driver sites** - Dell, HP, Lenovo, Panasonic, Microsoft Surface, and other selected driver pack sources may be queried or downloaded from vendor-hosted servers. Consult each vendor's privacy policy. - **PostHog** - deployment analytics. Events are sent to `https://us.i.posthog.com`. See the [PostHog Privacy Policy](https://posthog.com/privacy). -- **Operator-provided URLs** - WinPEStartup workflows can be configured to download and execute commands from URLs provided by the operator. Those endpoints are controlled by the operator or their organization. +- **Operator-provided URLs** - WinpeStartup workflows can be configured to download and execute commands from URLs provided by the operator. Those endpoints are controlled by the operator or their organization. Your Choices ------------ diff --git a/README.md b/README.md index a256538..97a04b8 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,26 @@ OSDCloud is a PowerShell module for deploying Windows with cloud-hosted operatin ## Overview -- Current repository module version: `26.10.2.1`. +- Current repository module version: `26.10.4.1`. - Defaults to Windows 11 26H2 for amd64 and arm64 deployments. - Focused on Windows deployment workflows driven by PowerShell. -- Supports WinPEStartup helpers and deployment UX options. +- Supports WinpeStartup helpers and deployment UX options. - Provides cmdlets for device info, Wi-Fi setup, and module updates in PE. +--- + +## What's New in 26.10.4.1 + +Released October 4, 2026. + +- **Consistent WinpeStartup naming:** Exported startup cmdlets, private helpers, module defaults, bundled profiles, messages, and documentation now use `WinpeStartup`, including `Invoke-WinpeStartup` and the `Invoke-WinpeStartup:` JSON key prefix. +- **Consistent media paths:** Startup content discovery uses `WinpeStartup\Drivers`, `WinpeStartup\Files`, and `WinpeStartup\profiles`. +- **Existing behavior preserved:** This is a naming-consistency release. Startup parameters, default settings, and deployment behavior are unchanged, and existing PEStartup compatibility aliases remain available. + +See [CHANGELOG.md](CHANGELOG.md) for the complete release history and [WinpeStartup documentation](docs/about_winpestartup.md) for startup configuration. + +--- + ## Requirements - PowerShell 5.1 or PowerShell 7+ on Windows @@ -55,13 +69,13 @@ Deploy-OSDCloud | Cmdlet | Alias | Description | |---|---|---| -| `Invoke-WinPEStartup` | — | Runs the full WinPEStartup workflow. | -| `Invoke-WinPEStartupManager` | `Invoke-OSDCloudPEStartup` | Dispatches individual startup actions. | -| `Show-WinPEStartupDevices` | `Show-PEStartupHardware` | Shows all PnP devices. | -| `Show-WinPEStartupDeviceErrors` | `Show-PEStartupErrors` | Shows PnP devices with errors. | -| `Show-WinPEStartupIpconfig` | `Show-PEStartupIpconfig` | Displays `ipconfig /all`. | -| `Show-WinPEStartupWifi` | `Show-PEStartupWifi` | Connects to Wi-Fi and waits for DHCP. | -| `Update-WinPEStartupModule` | `Use-PEStartupUpdateModule` | Updates a module from PSGallery. | +| `Invoke-WinpeStartup` | — | Runs the full WinpeStartup workflow. | +| `Invoke-WinpeStartupManager` | `Invoke-OSDCloudPEStartup` | Dispatches individual startup actions. | +| `Show-WinpeStartupDevices` | `Show-PEStartupHardware` | Shows all PnP devices. | +| `Show-WinpeStartupDeviceErrors` | `Show-PEStartupErrors` | Shows PnP devices with errors. | +| `Show-WinpeStartupIpconfig` | `Show-PEStartupIpconfig` | Displays `ipconfig /all`. | +| `Show-WinpeStartupWifi` | `Show-PEStartupWifi` | Connects to Wi-Fi and waits for DHCP. | +| `Update-WinpeStartupModule` | `Use-PEStartupUpdateModule` | Updates a module from PSGallery. | ## Documentation @@ -91,7 +105,7 @@ Task-oriented guides for IT admins. Start at the [docs index](docs/README.md), o | [OSDCloud/docs/Show-OSDCloudDeviceInfo.md](OSDCloud/docs/Show-OSDCloudDeviceInfo.md) | `Show-OSDCloudDeviceInfo` | | [OSDCloud/docs/Start-OSDCloudExplorer.md](OSDCloud/docs/Start-OSDCloudExplorer.md) | `Start-OSDCloudExplorer` | -WinPEStartup cmdlets are currently documented through in-module help. In WinPE, run `Get-Help -Detailed` for usage details. +WinpeStartup cmdlets are currently documented through in-module help. In WinPE, run `Get-Help -Detailed` for usage details. ### External links diff --git a/docs/01-overview.md b/docs/01-overview.md index 35fcbe6..406ce7c 100644 --- a/docs/01-overview.md +++ b/docs/01-overview.md @@ -56,7 +56,7 @@ OSDCloud does **not**: flowchart LR A[OSDeploy
full Windows] -->|Build-OSDeployBoot| B[WinPE boot image
WIM / ISO] B -->|USB / PXE / ISO| C[Target device
booted into WinPE] - C -->|Invoke-WinPEStartup| D[Network up
OSDCloud current] + C -->|Invoke-WinpeStartup| D[Network up
OSDCloud current] D -->|Deploy-OSDCloud| E[Windows 11 installed
drivers applied] E -->|First boot| F[OOBE / Autopilot] G[(Microsoft ESD
OEM driver packs
Microsoft Update Catalog)] -.->|downloaded at runtime| D diff --git a/docs/02-build-boot-image.md b/docs/02-build-boot-image.md index 757450a..683bb0f 100644 --- a/docs/02-build-boot-image.md +++ b/docs/02-build-boot-image.md @@ -73,7 +73,7 @@ Output lands in `%ProgramData%\OSDeployCore\boot\\`: ### 4. Verify the OSDCloud version `Build-OSDeployBoot` copies the currently loaded OSDCloud module into the WIM. -When `Invoke-WinPEStartup` runs, it installs the latest gallery version unless +When `Invoke-WinpeStartup` runs, it installs the latest gallery version unless `-SkipUpdateOSDCloud` is set. For an air-gapped image, load the required OSDCloud version before building diff --git a/docs/04-deploy-windows.md b/docs/04-deploy-windows.md index 8da5189..9416967 100644 --- a/docs/04-deploy-windows.md +++ b/docs/04-deploy-windows.md @@ -10,7 +10,7 @@ a freshly installed Windows 11 at the OOBE screen. OSDCloud splits the deployment into two halves: -1. **WinPEStartup** — `Invoke-WinPEStartup` brings the environment online +1. **WinpeStartup** — `Invoke-WinpeStartup` brings the environment online (drivers, network, current module). 2. **OS deployment** — `Deploy-OSDCloud` runs a 40-step workflow that installs Windows and injects drivers. @@ -34,7 +34,7 @@ sequenceDiagram participant Mod as OSDCloud module participant MS as Microsoft + OEM Op->>PE: Power on, boot WinPE - PE->>Mod: Invoke-WinPEStartup + PE->>Mod: Invoke-WinpeStartup Mod->>Mod: Drivers, network, self-update Op->>Mod: Deploy-OSDCloud Mod->>Op: Show UX (OS / edition / language) @@ -51,13 +51,13 @@ sequenceDiagram ### 1. WinPE boots -If your boot image runs `Invoke-WinPEStartup` from `startnet.cmd`, the +If your boot image runs `Invoke-WinpeStartup` from `startnet.cmd`, the startup sequence begins automatically. Otherwise, run it manually: ```powershell Install-Module OSDCloud -SkipPublisherCheck -Force Import-Module OSDCloud -Invoke-WinPEStartup +Invoke-WinpeStartup ``` What happens during startup: diff --git a/docs/06-unattended-usb-profile.md b/docs/06-unattended-usb-profile.md index 41bec71..bdaba99 100644 --- a/docs/06-unattended-usb-profile.md +++ b/docs/06-unattended-usb-profile.md @@ -14,7 +14,7 @@ difference is the JSON file on the USB. ## Why profiles exist -`Invoke-WinPEStartup` accepts parameters for everything it does. Hard-coding +`Invoke-WinpeStartup` accepts parameters for everything it does. Hard-coding those parameters means rebuilding the boot image whenever a policy changes. Profiles invert that: the boot image is generic, and a JSON file on USB supplies the per-site / per-scenario settings at boot time. @@ -29,7 +29,7 @@ core/PSDefaultParameterValues.json ← module defaults (lowest) The module defaults are loaded into `$PSDefaultParameterValues` when the module imports. A profile overrides any matching key. Explicit parameters -passed on the `Invoke-WinPEStartup` command line override both. +passed on the `Invoke-WinpeStartup` command line override both. ## How to create a profile @@ -38,7 +38,7 @@ passed on the `Invoke-WinPEStartup` command line override both. Place a JSON file at: ``` -:\WinPEStartup\profiles\.json +:\WinpeStartup\profiles\.json ``` Any partition on any drive connected at boot is scanned. The OSDCloud USB's @@ -51,11 +51,11 @@ NTFS data partition (`OSDCloud` label, created by ### 2. Choose keys -Profile keys are the `Invoke-WinPEStartup` parameter names. Both forms work: +Profile keys are the `Invoke-WinpeStartup` parameter names. Both forms work: ```jsonc { "SkipWiFi": true } // plain key -{ "Invoke-WinPEStartup:SkipWiFi": true } // prefixed key +{ "Invoke-WinpeStartup:SkipWiFi": true } // prefixed key ``` `//` line comments and `/* */` block comments are stripped before parsing. @@ -167,7 +167,7 @@ Empty `InvokeMainCommand` means startup runs but no deployment is triggered On any Windows machine with the module installed: ```powershell -Get-Content ':\WinPEStartup\profiles\mysite.json' -Raw | +Get-Content ':\WinpeStartup\profiles\mysite.json' -Raw | ForEach-Object { $_ -replace '//[^\r\n]*','' -replace '/\*.*?\*/','' } | ConvertFrom-Json ``` diff --git a/docs/07-arm64-devices.md b/docs/07-arm64-devices.md index 7d52b36..24957f5 100644 --- a/docs/07-arm64-devices.md +++ b/docs/07-arm64-devices.md @@ -71,7 +71,7 @@ Check what was used in `C:\Windows\Temp\osdcloud-logs\` after deployment. Exactly the same operator flow as amd64: ```powershell -Invoke-WinPEStartup +Invoke-WinpeStartup Deploy-OSDCloud # or -CLI ``` diff --git a/docs/09-troubleshooting.md b/docs/09-troubleshooting.md index f2842af..6cde76d 100644 --- a/docs/09-troubleshooting.md +++ b/docs/09-troubleshooting.md @@ -19,7 +19,7 @@ In order of frequency: | Phase | Path | When | |---|---|---| -| WinPEStartup | `X:\Windows\Temp\osdcloud-logs\` | While in WinPE | +| WinpeStartup | `X:\Windows\Temp\osdcloud-logs\` | While in WinPE | | Workflow (early) | `X:\OSDCloud\Logs\` | Before disk is partitioned | | Workflow (post-disk) | `C:\Windows\Temp\osdcloud-logs\` | After step 14 (log restart) | | First boot | `C:\Windows\Temp\osdcloud-logs\` | After OOBE | @@ -41,10 +41,10 @@ Copy-Item C:\Windows\Temp\osdcloud-logs\* D:\osdcloud-logs\ -Recurse | Cmdlet | What it shows | |---|---| | `Show-OSDCloudDeviceInfo` | Make, model, serial, TPM, Secure Boot, disk, RAM, battery, IP | -| `Show-WinPEStartupDevices` | All PnP devices in WinPE | -| `Show-WinPEStartupDeviceErrors` | PnP devices reporting an error (missing driver) | -| `Show-WinPEStartupIpconfig` | `ipconfig /all` output | -| `Show-WinPEStartupWifi` | Connect / reconnect to Wi-Fi | +| `Show-WinpeStartupDevices` | All PnP devices in WinPE | +| `Show-WinpeStartupDeviceErrors` | PnP devices reporting an error (missing driver) | +| `Show-WinpeStartupIpconfig` | `ipconfig /all` output | +| `Show-WinpeStartupWifi` | Connect / reconnect to Wi-Fi | | `Start-OSDCloudExplorer` | WinForms file browser — useful for reading logs in WinPE | Run any of them at the `X:\` prompt. @@ -54,7 +54,7 @@ Run any of them at the `X:\` prompt. ### "No network adapter" in WinPE ```powershell -Show-WinPEStartupDeviceErrors +Show-WinpeStartupDeviceErrors ``` If the Ethernet or Wi-Fi NIC shows here, WinPE is missing a driver. Fix: @@ -69,8 +69,8 @@ Add-WindowsDriver -Path X:\ -Driver D:\Drivers -Recurse ### "Wi-Fi connects but no IP" ```powershell -Show-WinPEStartupWifi # reconnect -Show-WinPEStartupIpconfig +Show-WinpeStartupWifi # reconnect +Show-WinpeStartupIpconfig ``` DHCP retry is built in. If the IP stays `169.254.x.x`, the access point @@ -135,10 +135,10 @@ session — most steps are skipped outside WinPE (only those with ### A USB profile isn't applied ```powershell -Get-ChildItem -Path *:\WinPEStartup\profiles\*.json +Get-ChildItem -Path *:\WinpeStartup\profiles\*.json ``` -- Profile must be at `:\WinPEStartup\profiles\*.json` — exact path. +- Profile must be at `:\WinpeStartup\profiles\*.json` — exact path. - File must parse as JSON (after stripping `//` and `/* */` comments). Validate on Windows: ```powershell Get-Content profile.json -Raw | @@ -150,7 +150,7 @@ Get-ChildItem -Path *:\WinPEStartup\profiles\*.json ### Module didn't self-update ``` -[Invoke-WinPEStartup] Update-WinPEStartupModule -Name OSDCloud → SKIPPED +[Invoke-WinpeStartup] Update-WinpeStartupModule -Name OSDCloud → SKIPPED ``` `-SkipUpdateOSDCloud` is `true` (somewhere in your profile or call). Either @@ -161,7 +161,7 @@ remove it or run `Install-Module OSDCloud -SkipPublisherCheck -Force` by hand. Run with `-Verbose`: ```powershell -Invoke-WinPEStartup -Verbose +Invoke-WinpeStartup -Verbose Deploy-OSDCloud -CLI -Verbose ``` diff --git a/docs/about_winpestartup.md b/docs/about_winpestartup.md index 0d491e7..090b5f5 100644 --- a/docs/about_winpestartup.md +++ b/docs/about_winpestartup.md @@ -1,29 +1,29 @@ -# WinPEStartup: OSDCloud's Boot-Time Checklist +# WinpeStartup: OSDCloud's Boot-Time Checklist WinPE is a small, temporary operating system. That makes it fast and useful for deployment, but it also means the environment starts with very little state. Drive letters may not be stable, networking may still be waking up, optional storage or network drivers may be needed, and a technician may have plugged in a USB drive with extra files or a startup profile. -`Invoke-WinPEStartup` is OSDCloud's answer to that early boot problem. It gives WinPE a predictable startup checklist before the user or deployment workflow starts making larger decisions. +`Invoke-WinpeStartup` is OSDCloud's answer to that early boot problem. It gives WinPE a predictable startup checklist before the user or deployment workflow starts making larger decisions. ## What it does in plain English -`Invoke-WinPEStartup` runs only when `SystemDrive` is `X:`, which is the normal WinPE RAM disk. If it is called from a full Windows installation, it writes a warning and exits. That guard matters because several startup actions are WinPE-specific and should not change a normal Windows session. +`Invoke-WinpeStartup` runs only when `SystemDrive` is `X:`, which is the normal WinPE RAM disk. If it is called from a full Windows installation, it writes a warning and exits. That guard matters because several startup actions are WinPE-specific and should not change a normal Windows session. At a high level, the startup flow does this: | Phase | What happens | Why it matters | |---|---|---| -| Load defaults | Reads module-level JSON defaults for `Invoke-WinPEStartup:*` keys. | Lets a boot image carry sensible startup behavior without hard-coding it in the function. | +| Load defaults | Reads module-level JSON defaults for `Invoke-WinpeStartup:*` keys. | Lets a boot image carry sensible startup behavior without hard-coding it in the function. | | Prepare the shell | Creates profile folders, sets key environment variables, and configures PowerShell execution policy for the WinPE session. | Gives PowerShell and user-profile paths enough structure to behave like a normal shell. | -| Load drivers | Scans attached drives for `WinPEStartup\Drivers` and loads discovered `.inf` files with `drvload.exe`. | Allows storage, network, or input drivers to be supplied from USB without rebuilding the boot image. | -| Copy files | Scans attached drives for `WinPEStartup\Files` and copies content into the WinPE RAM disk. | Makes helper files, tools, or configuration available at `X:\` for the current session. | +| Load drivers | Scans attached drives for `WinpeStartup\Drivers` and loads discovered `.inf` files with `drvload.exe`. | Allows storage, network, or input drivers to be supplied from USB without rebuilding the boot image. | +| Copy files | Scans attached drives for `WinpeStartup\Files` and copies content into the WinPE RAM disk. | Makes helper files, tools, or configuration available at `X:\` for the current session. | | Initialize WinPE | Runs `wpeinit`, disables the firewall, updates boot info, normalizes USB drive letters, renews networking, and opens a minimized PowerShell session. | Establishes hardware, networking, and predictable removable-drive layout before later steps run. | -| Select a profile | Scans `WinPEStartup\profiles` on attached drives for JSON profiles. A single profile is selected automatically; multiple profiles are shown as a menu. | Lets one USB drive hold site, customer, or workflow-specific startup settings. | +| Select a profile | Scans `WinpeStartup\profiles` on attached drives for JSON profiles. A single profile is selected automatically; multiple profiles are shown as a menu. | Lets one USB drive hold site, customer, or workflow-specific startup settings. | | Apply parameters | Merges defaults, profile values, and explicit caller parameters. Explicit caller parameters win. | Keeps the configuration flexible while preserving operator intent. | | Run startup actions | Optionally launches the on-screen keyboard, device views, Wi-Fi connection UI, IP configuration display, module updates, and startup/main/shutdown commands. | Handles the common things a technician needs immediately after WinPE starts. | ## The basic flow -The entry point is `Invoke-WinPEStartup`. It does not try to deploy Windows by itself. Instead, it prepares the temporary WinPE session so the next command has a sane environment. +The entry point is `Invoke-WinpeStartup`. It does not try to deploy Windows by itself. Instead, it prepares the temporary WinPE session so the next command has a sane environment. The flow is intentionally front-loaded: @@ -42,24 +42,24 @@ That order is deliberate. Drivers and copied files are available before the main ## Defaults and profiles -WinPEStartup configuration has two useful layers. +WinpeStartup configuration has two useful layers. Module defaults are read from the OSDCloud PSDefaultParameterValues JSON file. Keys use the normal PowerShell default-parameter style, such as: ```json { - "Invoke-WinPEStartup:SkipWiFi": true, - "Invoke-WinPEStartup:SkipIPConfig": true + "Invoke-WinpeStartup:SkipWiFi": true, + "Invoke-WinpeStartup:SkipIPConfig": true } ``` Startup profiles are JSON files under this layout on any attached drive: ```text -H:\WinPEStartup\profiles\BranchOffice.json +H:\WinpeStartup\profiles\BranchOffice.json ``` -Profiles may use either prefixed keys, such as `Invoke-WinPEStartup:SkipWiFi`, or plain splat-style keys, such as `SkipWiFi`. That makes profiles easier to read while still supporting the same parameters. +Profiles may use either prefixed keys, such as `Invoke-WinpeStartup:SkipWiFi`, or plain splat-style keys, such as `SkipWiFi`. That makes profiles easier to read while still supporting the same parameters. A profile may also include an unprefixed `Environment` object: @@ -70,7 +70,7 @@ A profile may also include an unprefixed `Environment` object: "OSDCLOUD_DEPLOYMENT_RING": 2, "OSDCLOUD_INTERACTIVE": true }, - "Invoke-WinPEStartup:InvokeMainCommand": [ + "Invoke-WinpeStartup:InvokeMainCommand": [ "Deploy-OSDCloud" ] } @@ -82,11 +82,11 @@ Null values, arrays, nested objects, and invalid variable names produce a warnin If exactly one profile is found, OSDCloud selects it automatically. If several profiles are found, OSDCloud shows a numbered list and lets the operator choose. Pressing Enter or typing `q` cancels the profile selection and stops the remaining startup sequence. -Explicit parameters passed to `Invoke-WinPEStartup` take precedence over JSON values. That rule is important: a profile can supply defaults, but a real command-line choice from the operator should not be silently overridden. +Explicit parameters passed to `Invoke-WinpeStartup` take precedence over JSON values. That rule is important: a profile can supply defaults, but a real command-line choice from the operator should not be silently overridden. ## Command hooks -`Invoke-WinPEStartup` supports three command phases: +`Invoke-WinpeStartup` supports three command phases: | Parameter | When it runs | |---|---| @@ -114,13 +114,13 @@ A startup checklist gives OSDCloud one predictable place to handle that early in ### USB media becomes more useful -The same USB drive can provide more than a boot image. With a `WinPEStartup` folder, it can also carry: +The same USB drive can provide more than a boot image. With a `WinpeStartup` folder, it can also carry: | Folder | Purpose | |---|---| -| `WinPEStartup\Drivers` | Supplemental `.inf` drivers loaded into WinPE. | -| `WinPEStartup\Files` | Files copied into the WinPE RAM disk. | -| `WinPEStartup\profiles` | JSON startup profiles selected at boot. | +| `WinpeStartup\Drivers` | Supplemental `.inf` drivers loaded into WinPE. | +| `WinpeStartup\Files` | Files copied into the WinPE RAM disk. | +| `WinpeStartup\profiles` | JSON startup profiles selected at boot. | That lets a technician adapt one boot image to different sites or hardware without rebuilding the image every time. @@ -142,7 +142,7 @@ The precedence order keeps the broad settings convenient while still letting the ### Optional windows stay optional -Not every startup needs the on-screen keyboard, device hardware window, PnP error window, Wi-Fi UI, or IP configuration window. `Invoke-WinPEStartupManager` routes those actions only when the corresponding setting asks for them. +Not every startup needs the on-screen keyboard, device hardware window, PnP error window, Wi-Fi UI, or IP configuration window. `Invoke-WinpeStartupManager` routes those actions only when the corresponding setting asks for them. That keeps quiet, unattended runs clean while still making technician-driven troubleshooting easy. @@ -154,7 +154,7 @@ That avoids wasting time on module updates when the device is clearly offline an ## What it does not do -`Invoke-WinPEStartup` prepares the WinPE session. By itself, it does **not**: +`Invoke-WinpeStartup` prepares the WinPE session. By itself, it does **not**: - deploy Windows; - partition or wipe disks; @@ -170,16 +170,16 @@ It answers a smaller but important question: **is this WinPE session ready enoug Imagine a technician arriving at a workbench before starting a rebuild. They plug in the USB drive, lay out the extra tools, check that the network is working, make sure the keyboard is usable, pick the right instruction sheet, and only then start the deployment. -`Invoke-WinPEStartup` is that setup routine for WinPE. It does the practical boot-time chores first so deployment logic can start from a cleaner, more predictable place. +`Invoke-WinpeStartup` is that setup routine for WinPE. It does the practical boot-time chores first so deployment logic can start from a cleaner, more predictable place. ## Where to find the details -The main entry point is [OSDCloud/public/WinPE/Invoke-WinPEStartup.ps1](../OSDCloud/public/WinPE/Invoke-WinPEStartup.ps1). Optional startup actions are dispatched by [OSDCloud/public/WinPE/Invoke-WinPEStartupManager.ps1](../OSDCloud/public/WinPE/Invoke-WinPEStartupManager.ps1). +The main entry point is [OSDCloud/public/WinPE/Invoke-WinpeStartup.ps1](../OSDCloud/public/WinPE/Invoke-WinpeStartup.ps1). Optional startup actions are dispatched by [OSDCloud/public/WinPE/Invoke-WinpeStartupManager.ps1](../OSDCloud/public/WinPE/Invoke-WinpeStartupManager.ps1). -The private helper functions live under [OSDCloud/private/WinPEStartup](../OSDCloud/private/WinPEStartup). The most important pieces are: +The private helper functions live under [OSDCloud/private/WinpeStartup](../OSDCloud/private/WinpeStartup). The most important pieces are: -- [Initialize-WinPEStartupEnvironment.ps1](../OSDCloud/private/WinPEStartup/Initialize-WinPEStartupEnvironment.ps1) for shell folders, environment variables, and execution policy. -- [Initialize-WinPEStartupDrivers.ps1](../OSDCloud/private/WinPEStartup/Initialize-WinPEStartupDrivers.ps1) for supplemental driver loading. -- [Initialize-WinPEStartupFiles.ps1](../OSDCloud/private/WinPEStartup/Initialize-WinPEStartupFiles.ps1) for copying startup files into the RAM disk. -- [Initialize-WinPEStartupMain.ps1](../OSDCloud/private/WinPEStartup/Initialize-WinPEStartupMain.ps1) for `wpeinit`, `wpeutil`, drive-letter cleanup, and network refresh. -- [Set-WinPEStartupUSBDriveLetter.ps1](../OSDCloud/private/WinPEStartup/Set-WinPEStartupUSBDriveLetter.ps1) for deterministic USB drive-letter assignment. +- [Initialize-WinpeStartupEnvironment.ps1](../OSDCloud/private/WinpeStartup/Initialize-WinpeStartupEnvironment.ps1) for shell folders, environment variables, and execution policy. +- [Initialize-WinpeStartupDrivers.ps1](../OSDCloud/private/WinpeStartup/Initialize-WinpeStartupDrivers.ps1) for supplemental driver loading. +- [Initialize-WinpeStartupFiles.ps1](../OSDCloud/private/WinpeStartup/Initialize-WinpeStartupFiles.ps1) for copying startup files into the RAM disk. +- [Initialize-WinpeStartupMain.ps1](../OSDCloud/private/WinpeStartup/Initialize-WinpeStartupMain.ps1) for `wpeinit`, `wpeutil`, drive-letter cleanup, and network refresh. +- [Set-WinpeStartupUSBDriveLetter.ps1](../OSDCloud/private/WinpeStartup/Set-WinpeStartupUSBDriveLetter.ps1) for deterministic USB drive-letter assignment.