Skip to content

Zero-touch Windows 11 deployment automation repository for IT professionals.

License

Notifications You must be signed in to change notification settings

Stensel8/WinDeploy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WinDeploy - Windows Deployment Automation

Open-source Windows 11 deployment automation toolkit built with PowerShell 7

License: MIT PowerShell 7.0+ Windows 11 Windows 24H2/25H2

PSScriptAnalyzer DevSkim Dependabot Updates

Zero-touch Windows deployment with automatic driver updates, application installation, bloatware removal, and system configuration. Deploy via USB, network, RMM agents, or AutoUnattend.xml.

Deployment options

Choose how you want to deploy WinDeploy — pick the path that fits your environment.

Local USB / AutoUnattend.xml Intune / Autopilot
Deploy locally via USB, autounattend.xml, or one-liner script. Deploy via Intune Autopilot, targeting specific user groups.
Get started - Local Get started - Intune
View deployment screenshots
Deployment Start Successful Completion
Deployment start Deployment success

Quick Start

Prerequisites: Windows 11 Pro 24H2+, PowerShell 7, internet connection

Option 1: USB Deployment (Fresh installs)

  1. Create bootable Windows 11 USB
  2. Copy autounattend.xml to USB root
  3. (Optional) Copy RMM agent as Agent.exe to USB root
  4. Boot from USB with network connected. Make sure to keep the USB drive connected until deployment is complete.
  5. Wait - everything happens automatically

Option 2: Direct Execution (Existing or fresh installs)

# Run as Administrator in PowerShell 7
iex (irm "https://raw.githubusercontent.com/Stensel8/WinDeploy/$((irm https://api.github.com/repos/Stensel8/WinDeploy/releases/latest).tag_name)/Scripts/Start.ps1")

Option 3: Fastest method (Existing or fresh installs - one-liner)

# Run as Administrator in PowerShell 7
iex (irm windeploy.stensel.nl)

How It Works

graph TD
    A[Start.ps1] --> B{Admin Rights?}
    B -->|No| C[Auto-Elevate]
    C --> D{PowerShell 7?}
    B -->|Yes| D
    D -->|No| E[Install PS7 + WinGet]
    E --> F[Relaunch in PS7]
    D -->|Yes| G[Download Deploy.ps1]
    F --> G
    G --> H[Launch Deploy.ps1]
    H --> I[Install RMM Agent]
    I --> J[Update Drivers]
    J --> K[Windows Hardening]
    K --> L[Install Applications]
    L --> M[Remove Bloatware]
    M --> N[Apply Theme]
    N --> O[Set Hostname]
    O --> P[Install Windows Updates]
    P --> Q[Complete]
Loading

Start.ps1 is the main entry point that ensures the system has PowerShell 7 and WinGet installed, handles elevation, and downloads/launchs Deploy.ps1. Deploy.ps1 orchestrates the actual deployment by downloading and executing each script in sequence.

Configuration

Customize Application List

Edit Scripts/Deployment/Install-Applications.ps1 (lines 20-30):

$Applications = @(
    "Microsoft.VCRedist.2015+.x64",
    "Microsoft.Office",
    "Microsoft.Teams",
    # Add your apps here
)

Customize Bloatware List

Edit Scripts/Deployment/Remove-Bloat.ps1 (lines 15-40):

$BloatwareList = @(
    "Microsoft.BingNews",
    "Microsoft.GamingApp",
    # Add packages to remove
)

Configure RMM Agent Installation

The deployment supports automatic RMM/monitoring agent installation from USB:

  • Place your agent installer as Agent.exe (or any *agent*.exe) on the USB drive root.
  • The script will automatically detect and install it silently during deployment.

This approach works with any RMM solution that supports silent installation (e.g., /S switch).

Supported Devices (Drivers & Firmware)

  • Dell: Latitude, OptiPlex, Precision, XPS series
  • HP: EliteBook, ProBook, EliteDesk, ProDesk, ZBook series

To view all models, check Supported Dell devices or Supported HP devices.


Logging

All operations are logged:

  • Main log: C:\WinDeploy\Logs\Start.log
  • Individual scripts: C:\WinDeploy\Logs\*.log (e.g., Install-Drivers.log)

View logs in real-time:

Get-Content "C:\WinDeploy\Logs\Start.log" -Wait -Tail 20

Dependencies

WinDeploy automatically installs and manages the following dependencies:

PowerShell Gallery (Auto-installed)

Application Dependencies (Auto-installed via WinGet)

  • Windows Package Manager (WinGet) (v1.12.350+) - Installed via winget-install script
  • Dell Command Update (v5.5.0+) - Auto-installed for supported Dell devices
  • HP Image Assistant (v5.3.2+) - Auto-installed for supported HP devices

Note: All dependencies are automatically detected and installed during deployment. No manual installation required.


Troubleshooting

Common Issues

Script won't run due to execution policy error

Set-ExecutionPolicy Bypass  # Allows the script to run for the current session

Windows Spotlight not working after deployment If Windows Spotlight is disabled after running the deployment, run the Fix-Spotlight.ps1 script to re-enable it:

# Run as Administrator
& "C:\WinDeploy\Download\Fix-Spotlight.ps1"

This script sets the necessary registry keys and restarts Explorer. Then, set the lock screen background to "Windows Spotlight" in Settings > Personalization > Lock screen.

WinGet not found

Install WinGet using the winget-install script from PowerShell Gallery (by AsherToto) Open PowerShell as Administrator and run:

Install-Script winget-install -Force

Follow the prompts to complete the installation (tap A to accept all or Y individually). Note: -Force is optional but recommended to update if outdated.

Usage:

winget-install

If WinGet is already installed, use -Force to run anyway. The script is published on PowerShell Gallery under winget-install.

Drivers not installing

Applications failing to install

  • Confirm WinGet is working: Run winget --version.
  • Verify app IDs: Use winget search <app-name> to find the correct ID.
  • Check the logs: C:\WinDeploy\Logs\Install-Applications.log.

Sometimes, app installations fail because WinGet has issues with certain packages. Many apps have both a standard version and a Microsoft Store (msstore) version. If the default ID doesn't work, try the msstore version.

To find the msstore App ID:

  1. Run winget search <app-name> in PowerShell.
  2. Look for entries where the "Source" column shows "Microsoft Store".
  3. Or, go to apps.microsoft.com, search for the app, and copy the App ID from the URL.

For examples, see the images below:

Finding the msstore App ID

Installing the msstore App

Credits & Acknowledgments

Built With

Support & Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Disclaimer

This software is provided "as is" without warranty of any kind. Always test deployments in a safe environment before production use. The authors are not responsible for any damage or data loss.