Skip to content

Pnwcomputers/DeployWorkstation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

142 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

๐Ÿš€ DeployWorkstation

Automated Application Setup, Bloatware Removal & Updating Utility for Windows 10/11 Computers

A PowerShell-based, automated provisioning solution that transforms a Windows 10 or Windows 11 workstation deployment process into a single plug-and-play operation.

Automation Level Windows Support PowerShell Version Enterprise Ready GitHub issues Maintenance

Zero-Touch Windows Workstation Provisioning & Maintenance Toolkit

A PowerShell-based, automated provisioning solution that transforms Windows 10 & 11 workstation deployment from a 30-step manual process into a single "plug-and-play" operation. Whether you're imaging bare metal, cleaning up an existing PC, or running routine maintenance on already-deployed machines, DeployWorkstation handles bloatware removal, essential application installation, and in-place app upgrades.

๐Ÿ› Bugs Fixed in v5.2

# File Issue Fix
1 QuickStart.cmd All 4 menu options passed -ConfigFile - a parameter that doesn't exist in the PS1. Every choice errored immediately. Rewrote to use the actual -SkipBloatwareRemoval, -SkipAppInstall, -SkipSystemConfig, and -UpdateApps params.
2 QuickStart.cmd goto start on invalid input โ†’ no :start label existed โ†’ cmd.exe crashed the script. Added :start label at the top of the menu block.
3 tests/DeployWorkstation.Tests.ps1:42 Test asserted DeployWorkstation.cmd exists - it never did - permanent CI failure. Changed to check QuickStart.cmd which actually exists.
4 .github/workflows/test-powershell.yml:37 upload-artifact@v3 was deprecated and removed by GitHub. Upgraded to @v4.
5 DeployWorkstation.ps1:587 winget--version can output multiple lines; -replace on an array returns an array; [Version] cast on an array throws and silently skips the minimum version check. Added Where-Object + Select-Object-Last 1 before the replace.

Code Quality Updates/Fixes:

# File Issue Fix
6 DeployWorkstation.ps1:529 Set-ExecutionPolicy was placed mid-file after all function definitions - if it threw, the machine would be left partially configured. Moved to line 26, right after $ProgressPreference.
7 DeployWorkstation.ps1:535 $script:IsWin11 computed but never referenced anywhere. Removed.
8 Export-HtmlReport Called Get-CimInstance Win32_OperatingSystem a second time at report generation, even though it was already cached as $script:OsInfo. Replaced with $script:OsInfo.

โœจ Key Features

  • ๐Ÿ” Self-Elevating & Policy-Bypassing - Automatically relaunches under Windows PowerShell 5.1 with -ExecutionPolicy Bypass and UAC elevation
  • ๐Ÿ—‘๏ธ UWP "Bloatware" Purge - Comprehensive removal of built-in apps including Copilot, Teams, New Outlook, Clipchamp, OneDrive, Xbox, and more
  • โš™๏ธ Win32/MSI Removal & DISM Cleanup - Enterprise software removal via WinGet, DISM, and registry manipulation
  • ๐Ÿ“ฆ Standard App Installation & Upgrade - Automated install and in-place upgrade of essential third-party tools via WinGet
  • ๐Ÿ“‹ Centralized Logging - Detailed operation logs plus a dark-themed HTML report with system info summary and full event log
  • ๐Ÿ”„ App Update Support - Detects and upgrades already-installed applications in-place; safe to re-run on existing machines
  • ๐Ÿ›ก๏ธ Winget Auto-Bootstrap - Automatically downloads and installs winget on OEM machines where it's missing or outdated
  • ๐Ÿ” Network Retry Logic - Automatic retries with delay on transient network errors during installation
  • ๐Ÿ–ฅ๏ธ Windows Edition Awareness - Detects Home vs. Pro/Enterprise and warns when policy keys will have no effect
  • ๐Ÿ—‘๏ธ OEM OneDrive Removal - Three-path removal covering both Appx and embedded OEM binaries
  • ๐ŸŒ Multi-Language Support - Auto-detects locale via Get-Culture; ships with en-US and es-ES
  • โœ… Real-time Progress - Write-Progress console bars throughout all major operations

๐Ÿ›ก๏ธ Automated Removal Capabilities

UWP Applications Removed

  • ๐Ÿ“ง New Outlook (Microsoft.OutlookForWindows)
  • ๐Ÿค– Copilot Assistant
  • ๐Ÿ‘ฅ Microsoft Teams (Consumer)
  • ๐ŸŽฌ Clipchamp Video Editor
  • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family Safety & Parental Controls
  • โ˜๏ธ OneDrive Sync Client (Appx + OEM binary)
  • ๐Ÿ’ผ LinkedIn Integration
  • ๐Ÿ“ž Skype for Windows
  • ๐ŸŽฎ Xbox Gaming Suite
  • ๐Ÿฅฝ Mixed Reality Portal
  • ๐Ÿ–ฅ๏ธ Remote Desktop App
  • ๐Ÿ†˜ Quick Assist

Windows Capabilities Removed

  • ๐Ÿ†˜ Quick Assist capability
  • ๐ŸŽฎ Xbox TCUI, Game Overlay & Speech-to-Text overlays
  • ๐Ÿ”‘ OpenSSH Client

Enterprise Software Removal

  • ๐Ÿ›ก๏ธ McAfee Security Suite (registry-based uninstall)

Privacy & Telemetry Hardening

  • Disables Windows telemetry collection
  • Disables Windows Error Reporting
  • Disables CEIP (Customer Experience Improvement Program)
  • Disables Advertising ID

๐Ÿ“ฅ Essential Applications Installed

Security & Maintenance

  • ๐Ÿฆ  Malwarebytes - Malware protection
  • ๐Ÿงน BleachBit - System cleanup and privacy tool

Productivity Suite

  • ๐ŸŒ Google Chrome - Web browser
  • ๐Ÿ—œ๏ธ 7-Zip - Universal archive manager
  • ๐Ÿ“„ Adobe Acrobat Reader DC (64-bit) - PDF viewer
  • ๐Ÿ“น VLC Media Player - Universal media player

Development Runtimes

  • โš™๏ธ .NET Framework 4.8 - Legacy app compatibility
  • โš™๏ธ .NET 8 Desktop Runtime - LTS, supported through November 2026
  • โš™๏ธ .NET 10 Desktop Runtime - LTS, supported through November 2030
  • ๐Ÿ”ง Visual C++ 2015โ€“2022 Redistributables (x64 & x86)

๐Ÿš€ Installation & Usage

Prerequisites

  • ๐Ÿ’ป Windows 10/11 (Most Editions)
  • ๐ŸŒ Internet Connection (for WinGet packages - Winget auto-installs if missing)
  • ๐Ÿ‘ค Administrator Access
  • ๐Ÿ’พ USB Drive or Network Share (Optional)

Quick Start

  1. ๐Ÿ“ฅ Download the Repository

    git clone https://github.com/Pnwcomputers/DeployWorkstation.git
    cd DeployWorkstation
  2. ๐Ÿ’พ Prepare Deployment Media

    copy DeployWorkstation.ps1 E:\
    copy DeployWorkstation.bat E:\
  3. โ–ถ๏ธ Execute Deployment

    :: Method 1: Double-click the .bat launcher (recommended)
    DeployWorkstation.bat
    
    :: Method 2: Direct PowerShell execution
    powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\DeployWorkstation.ps1
  4. โณ Select Deployment Mode

    The launcher presents six options:

    Option Description
    1 - Full Deployment Bloatware removal + app install + system config
    2 - Bloatware Removal Only Skips app installation and system config
    3 - App Installation Only Skips bloatware removal and system config
    4 - System Config Only Registry/policy hardening only
    5 - Update Installed Apps Upgrades managed apps in-place
    6 - Exit
  5. โœ… Review & Reboot

  • Script pauses for final review on completion
  • HTML report generated: DeployWorkstation.html
  • Detailed log available: DeployWorkstation.log
  • System reboot recommended for a clean finish

Re-Running on Existing Machines

v5.2 is safe to run on already-deployed workstations. The upgrade logic updates any managed apps with newer versions available via winget.

# Update managed apps only
.\DeployWorkstation.ps1 -SkipBloatwareRemoval -SkipSystemConfig -UpdateApps

# Re-run app install on a previously cleaned machine
.\DeployWorkstation.ps1 -SkipBloatwareRemoval

๐Ÿ”ง Advanced Configuration

Command-Line Parameters

Parameter Description
-SkipAppInstall Skip all application installation
-SkipBloatwareRemoval Skip bloatware and UWP removal
-SkipSystemConfig Skip registry/policy hardening
-UpdateApps Upgrade already-installed managed apps in-place
-LogPath <path> Custom path for the log file
-ReportPath <path> Custom path for the HTML report

Adding Applications

To add or change which apps are installed, edit the $script:ManagedApps array near the top of DeployWorkstation.ps1. Each entry needs a winget ID and a display name:

$script:ManagedApps = @(
    @{ Id = 'Google.Chrome';        Name = 'Google Chrome'   },
    @{ Id = 'Notepad++.Notepad++';  Name = 'Notepad++'       },
    # add more entries here
)

Find winget IDs with: winget search <AppName>

๐ŸŽช Configuration Profiles

Profile Use Case Applications Configuration
Corporate Business workstations Office tools, security software Details
Developer Programming workstations IDEs, development tools Details
Home User Personal computers Media, communication apps Details

๐Ÿ“Š Feature Comparison

Feature Manual Deployment Other Tools DeployWorkstation
Automation Level โŒ Manual (8+ hours) โš ๏ธ Partial (2-4 hours) โœ… Full Automation (30 minutes)
Bloatware Removal โŒ Manual deletion โš ๏ธ Basic removal โœ… Comprehensive purge
Enterprise Software โŒ Manual uninstall โŒ Often skipped โœ… Registry-based removal
App Updates โŒ Manual per-app โš ๏ธ Separate tool needed โœ… In-place upgrade on re-run
Error Handling โŒ Manual intervention โš ๏ธ Basic logging โœ… Retry logic + HTML report
Multi-Language โŒ โŒ โœ… en-US & es-ES auto-detected

๐Ÿ“ˆ Performance Metrics

Metric Traditional Method DeployWorkstation
Total Time 4-8 hours 30-45 minutes
Manual Steps 30+ operations 1 double-click
Error Rate ~15% (human error) <2% (automated)
Consistency Variable 100% standardized

๐ŸŽฏ Use Cases

๐Ÿข Enterprise Deployment

  • New employee workstation setup
  • Hardware refresh projects
  • Standardized corporate imaging
  • Remote office provisioning

๐Ÿ”ง IT Service Providers

  • Client workstation deployment and routine maintenance
  • Malware cleanup and rebuild
  • Hardware upgrade services
  • Maintenance contract fulfillment - re-run to keep apps current

๐Ÿซ Educational Institutions

  • Lab computer preparation
  • Student workstation imaging
  • Faculty equipment setup
  • Semester refresh operations

๐Ÿ  Home & Small Business

  • Personal computer setup
  • Family PC maintenance
  • Small office standardization

๐Ÿ” Troubleshooting

Common Issues

Script won't execute

  • Ensure PowerShell execution policy allows scripts
  • Verify UAC elevation is working
  • Check Windows PowerShell 5.1 is available

WinGet installation failures

  • The script will attempt to auto-install/repair winget on OEM machines
  • Verify internet connectivity if bootstrap also fails
  • Update Windows to latest version

Bloatware returns after reboot

  • Run script as Administrator
  • Ensure all user profiles are processed
  • Check Group Policy restrictions

App install fails with "package not found"

  • Run winget source update to refresh the package index
  • Verify the winget ID is still current: winget search <AppName>

Log Analysis

# Check for errors and warnings in the deployment log
Get-Content .\DeployWorkstation.log | Select-String "ERROR|WARN"

# Verify WinGet package status
winget list --source winget

The HTML report (DeployWorkstation.html) provides the same information in a readable format - open it in any browser after the run completes.

๐Ÿ› ๏ธ Project Structure

DeployWorkstation/
โ”œโ”€โ”€ DeployWorkstation.ps1      # Main PowerShell script
โ”œโ”€โ”€ DeployWorkstation.bat      # Self-elevating launcher with full menu
โ”œโ”€โ”€ QuickStart.cmd             # Simplified quick-launch menu
โ”œโ”€โ”€ Installers/                # Place offline installers here (optional)
โ”œโ”€โ”€ Logs/                      # Auto-created; holds log and HTML report
โ”‚   โ”œโ”€โ”€ DeployWorkstation.log
โ”‚   โ””โ”€โ”€ DeployWorkstation.html # Post-run HTML report
โ”œโ”€โ”€ Config/
โ”‚   โ””โ”€โ”€ Examples/
โ”‚       โ”œโ”€โ”€ Corporate.json     # Example corporate profile
โ”‚       โ”œโ”€โ”€ Developer.json     # Example developer profile
โ”‚       โ””โ”€โ”€ HomeUser.json      # Example home user profile
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ CONFIGURATION.md
โ”‚   โ”œโ”€โ”€ INSTALLATION.md
โ”‚   โ”œโ”€โ”€ TROUBLESHOOTING.md
โ”‚   โ”œโ”€โ”€ FAQ.md
โ”‚   โ””โ”€โ”€ COMPATABILITY.md
โ””โ”€โ”€ tests/
    โ””โ”€โ”€ DeployWorkstation.Tests.ps1

๐Ÿ”ฎ Roadmap

  • ๐Ÿ–ฅ๏ธ GUI Configuration Interface (pre-run checkbox dialog)
  • ๐ŸŒ Web-based Management Console
  • ๐Ÿš€ Domain Integration
  • ๐Ÿš€ Cloud Configuration Sync
  • ๐Ÿš€ Windows Server Hardening Mode (no app install)
  • ๐Ÿ“Š Analytics & Telemetry (CSV/JSON export for fleet tracking)

๐Ÿค Contributing

We welcome contributions! Here's how to get started:

  • ๐Ÿ“– Documentation - Improve README clarity, add configuration examples, create troubleshooting guides
  • ๐Ÿ› Bug Reports - Open issues with detailed descriptions, system info, and log excerpts
  • ๐Ÿ’ก Feature Requests - Open issues with [FEATURE] tag, describe use case and benefits
  • ๐Ÿ”’ Security Issues - Email support@pnwcomputers.com with proof of concept; allow reasonable disclosure time

๐Ÿ“„ License

This project is licensed under the MIT License - See the LICENSE file for details.

๐Ÿ“ž Support & Contact

  • ๐Ÿ“– Documentation: Check this README and the project wiki
  • ๐Ÿ› Bug Reports: Open an issue on GitHub
  • ๐Ÿ’ก Feature Requests: Open an issue with [FEATURE] tag
  • ๐Ÿ’ฌ General Support: support@pnwcomputers.com

๐Ÿ“Š Statistics

GitHub stars GitHub forks GitHub issues GitHub license

๐ŸŽฏ Transform your Windows deployment process from hours to minutes, and keep it current with every re-run.

Built with โค๏ธ for efficiency, reliability, and zero-touch automation.

โญ Star this repo if it saved you time and effort!


Updated June 2026 Tested on Windows 10 (1909+) and Windows 11 - Pro & Home Editions