Windows Desktop Optimization Tool (WDOT)

December 28, 2025 ยท View on GitHub

WDOT

Welcome to the next evolution of the Virtual Desktop Optimization Tool

Static Badge Static Badge

Contributors Forks Stars Commits Issues Languages

๐Ÿ“– Introduction

The Windows Desktop Optimization Tool (WDOT) is a comprehensive PowerShell-based solution designed to optimize Windows devices for Virtual Desktop Infrastructure (VDI), Azure Virtual Desktop (AVD), and standalone machines. This tool automates the application of numerous optimization settings to improve performance, reduce resource consumption, and enhance user experience across various Windows environments.

Key Features

  • ๐ŸŽฏ Targeted Optimizations: Apply specific optimizations for services, applications, scheduled tasks, and system settings
  • ๐Ÿ”ง Configuration-Based: Use customizable JSON configuration files for different environments
  • ๐Ÿ›ก๏ธ Safe Defaults: Conservative settings that can be customized per environment
  • ๐Ÿ“Š Comprehensive Logging: Built-in Windows Event Log integration for monitoring and troubleshooting
  • ๐Ÿ”„ Modular Design: Choose which optimization categories to apply
  • ๐ŸŽ›๏ธ Interactive Configuration: User-friendly tools for customizing optimization settings

๐Ÿ—๏ธ Architecture

The WDOT consists of three main components:

1. Windows_Optimization.ps1 (Main Script)

The primary optimization engine that applies performance and resource optimizations based on configuration profiles.

2. Configuration Management Tools

  • New-WVDConfigurationFiles.ps1: Creates new configuration profiles from templates
  • Set-WVDConfigurations.ps1: Interactive tool for customizing configuration settings

3. Optimization Functions

Modular PowerShell functions in the Functions/ directory that handle specific optimization categories.

๐Ÿ› ๏ธ Installation

Prerequisites

  • Windows 10/11 or Windows Server 2019/2022/2025
  • PowerShell 5.1 or higher
  • Administrator privileges (required for system-level optimizations)
  • Execution Policy: Set to allow script execution

Setup Steps

  1. Clone or Download the Repository

    git clone https://github.com/The-Virtual-Desktop-Team/Windows-Desktop-Optimization-Tool.git
    cd Windows-Desktop-Optimization-Tool
    
  2. Set PowerShell Execution Policy

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
  3. Verify Installation

    # Check available configuration profiles
    Get-ChildItem .\Configurations -Directory | Select-Object Name
    

๐ŸŽฏ Quick Start

Basic Usage

  1. Create a Configuration Profile

    .\New-WVDConfigurationFiles.ps1 -FolderName "MyEnvironment"
    
  2. Customize Your Configuration (Optional)

    .\Set-WVDConfigurations.ps1 -ConfigurationFile "Services" -ConfigFolderName "MyEnvironment"
    
  3. Apply Optimizations

    .\Windows_Optimization.ps1 -ConfigProfile "MyEnvironment" -Optimizations All -AcceptEULA
    

Example Scenarios

VDI/AVD Environment:

# Create and configure for VDI
.\New-WVDConfigurationFiles.ps1 -FolderName "Production-VDI"
.\Set-WVDConfigurations.ps1 -ConfigurationFile "Services" -ConfigFolderName "Production-VDI" -ApplyAll

# Apply aggressive optimizations
.\Windows_Optimization.ps1 -ConfigProfile "Production-VDI" -Optimizations All -AcceptEULA

Development Workstation:

# Create conservative configuration
.\New-WVDConfigurationFiles.ps1 -FolderName "Development"
.\Set-WVDConfigurations.ps1 -ConfigurationFile "Services" -ConfigFolderName "Development" -SkipAll

# Apply selective optimizations
.\Windows_Optimization.ps1 -ConfigProfile "Development" -Optimizations @("DiskCleanup", "NetworkOptimizations") -AcceptEULA

๐Ÿ“Š Windows_Optimization.ps1 - Main Script

The core optimization script that applies various performance and resource optimizations to Windows systems.

Parameters

ParameterTypeDescriptionDefault
ConfigProfileString[Required] Name of configuration profile to useNone
WindowsVersionString[Being Deprecated] This parameter is deprecated and will be removed in a future release. Use -ConfigProfile instead.None
OptimizationsString[]Optimization categories to applyNone
AdvancedOptimizationsString[]Advanced/aggressive optimizationsNone
AcceptEULASwitchAccept EULA without promptingFalse
RestartSwitchAutomatically restart after completionFalse

Optimization Categories

Standard Optimizations (-Optimizations)

CategoryDescriptionImpact
AllApply all standard optimizationsHigh
ServicesDisable unnecessary Windows servicesHigh
AppxPackagesRemove unwanted Microsoft Store appsMedium
ScheduledTasksDisable unnecessary scheduled tasksMedium
DefaultUserSettingsOptimize default user profile settingsLow
LocalPolicyApply local group policy optimizationsMedium
AutologgersDisable Windows diagnostic loggingLow
NetworkOptimizationsOptimize network settings (SMB, etc.)Medium
DiskCleanupClean temporary files and cachesLow
WindowsMediaPlayerRemove Windows Media PlayerLow

Advanced Optimizations (-AdvancedOptimizations)

CategoryDescriptionImpactWarning
AllApply all advanced optimizationsHighโš ๏ธ Aggressive
EdgeOptimize Microsoft Edge settingsMediumโš ๏ธ May affect browsing
RemoveLegacyIERemove Internet ExplorerHighโš ๏ธ Irreversible
RemoveOneDriveRemove OneDrive integrationHighโš ๏ธ Affects file sync

Usage Examples

Apply All Standard Optimizations:

.\Windows_Optimization.ps1 -ConfigProfile "Windows11_24H2" -Optimizations All -AcceptEULA

Selective Optimization:

.\Windows_Optimization.ps1 -ConfigProfile "MyConfig" -Optimizations @("Services", "AppxPackages", "DiskCleanup") -AcceptEULA

VDI-Focused Optimization:

.\Windows_Optimization.ps1 -ConfigProfile "VDI-Production" -Optimizations @("Services", "AppxPackages", "ScheduledTasks", "NetworkOptimizations") -AdvancedOptimizations @("Edge", "RemoveLegacyIE") -AcceptEULA -Restart

Conservative Optimization:

.\Windows_Optimization.ps1 -ConfigProfile "Conservative" -Optimizations @("DiskCleanup", "NetworkOptimizations") -AcceptEULA

๐Ÿ”ง Configuration Management

Creating Configuration Profiles

Use New-WVDConfigurationFiles.ps1 to create new configuration profiles:

.\New-WVDConfigurationFiles.ps1 -FolderName "MyCustomConfig"

This creates a new folder in Configurations/ with template files that can be customized.

Customizing Configurations

Use Set-WVDConfigurations.ps1 for interactive configuration:

# Interactive configuration
.\Set-WVDConfigurations.ps1 -ConfigurationFile "Services" -ConfigFolderName "MyConfig"

# Apply all optimizations
.\Set-WVDConfigurations.ps1 -ConfigurationFile "AppxPackages" -ConfigFolderName "MyConfig" -ApplyAll

# Skip all optimizations (safe defaults)
.\Set-WVDConfigurations.ps1 -ConfigurationFile "ScheduledTasks" -ConfigFolderName "MyConfig" -SkipAll

๐Ÿ“– For detailed configuration instructions, see: Configuration Files User Guide

๐Ÿ“ Project Structure

Windows-Desktop-Optimization-Tool/
โ”œโ”€โ”€ Windows_Optimization.ps1           # Main optimization script
โ”œโ”€โ”€ New-WVDConfigurationFiles.ps1      # Configuration profile creator
โ”œโ”€โ”€ Set-WVDConfigurations.ps1          # Interactive configuration tool
โ”œโ”€โ”€ EULA.txt                           # End User License Agreement
โ”œโ”€โ”€ Configuration Files User Guide.md  # Detailed configuration guide
โ”œโ”€โ”€ Configurations/                    # Configuration profiles
โ”‚   โ”œโ”€โ”€ Templates/                     # Default template files
โ”‚   โ”‚   โ”œโ”€โ”€ Services.json             # Windows services configuration
โ”‚   โ”‚   โ”œโ”€โ”€ AppxPackages.json         # Store apps configuration
โ”‚   โ”‚   โ”œโ”€โ”€ ScheduledTasks.json       # Scheduled tasks configuration
โ”‚   โ”‚   โ”œโ”€โ”€ DefaultUserSettings.json  # User profile settings
โ”‚   โ”‚   โ”œโ”€โ”€ PolicyRegSettings.json    # Group policy settings
โ”‚   โ”‚   โ”œโ”€โ”€ EdgeSettings.json         # Microsoft Edge settings
โ”‚   โ”‚   โ”œโ”€โ”€ Autologgers.Json          # Diagnostic logging settings
โ”‚   โ”‚   โ”œโ”€โ”€ LanManWorkstation.json    # Network optimization settings
โ”‚   โ”‚   โ””โ”€โ”€ DefaultAssociationsConfiguration.xml # File associations
โ”‚   โ””โ”€โ”€ [Custom Profiles]/            # User-created configuration profiles
โ”œโ”€โ”€ Functions/                         # Optimization function modules
โ””โ”€โ”€ Images/                           # Project icons and images

๐Ÿ“‹ Configuration Files

Each configuration profile contains JSON files that control optimization behavior:

Configuration File Types

FilePurposeItemsOptimizationState Values
Services.jsonWindows services to disable/enable~45 servicesApply / Skip
AppxPackages.jsonStore apps to remove/keep~80 packagesApply / Skip
ScheduledTasks.jsonScheduled tasks to disable~30 tasksApply / Skip
DefaultUserSettings.jsonUser profile registry settings~20 settingsApply / Skip
PolicyRegSettings.jsonLocal policy registry settings~15 policiesApply / Skip
EdgeSettings.jsonMicrosoft Edge optimizations~10 settingsApply / Skip
Autologgers.JsonDiagnostic logging services~15 loggersApply / Skip
LanManWorkstation.jsonNetwork performance settings~5 settingsApply / Skip

OptimizationState Values

  • Apply: The optimization will be applied during execution
  • Skip: The optimization will be ignored (safe/conservative choice)

๐Ÿ” Monitoring and Logging

WDOT includes comprehensive logging capabilities:

Windows Event Log Integration

  • Log Name: WDOT
  • Event Sources: Multiple sources for different optimization categories
  • Event Types: Information, Warning, Error
  • Log Size: 64KB with automatic rotation

Viewing WDOT Logs

# View recent WDOT events
Get-WinEvent -LogName "WDOT" -MaxEvents 50

# View specific optimization results
Get-WinEvent -LogName "WDOT" | Where-Object {$_.Id -eq 1}

Registry Tracking

WDOT maintains execution tracking in the registry:

  • Location: HKLM:\SOFTWARE\WDOT
  • Values: Version, LastRunTime
  • Purpose: Track optimization history and version compatibility

โš ๏ธ Important Considerations

Testing Requirements

โš ๏ธ WARNING: These optimizations modify system behavior. Always test in a non-production environment first.

Environment Suitability

  • VDI/AVD: All optimizations suitable with proper testing
  • Physical Workstations: Use conservative settings, avoid hardware-specific optimizations
  • Server Environments: Carefully review service and application optimizations
  • Development Machines: Use minimal optimizations to preserve development tools

Backup Recommendations

  1. System Restore Point: Create before running optimizations
  2. Registry Backup: Export relevant registry keys
  3. Configuration Backup: Use -CreateBackup flag with Set-WVDConfigurations.ps1

๐Ÿค Contributing

We welcome contributions to improve WDOT:

  1. Fork the repository
  2. Create a feature branch
  3. Test your changes thoroughly
  4. Submit a pull request with detailed description

Development Guidelines

  • Follow PowerShell best practices
  • Include proper error handling
  • Add verbose logging for troubleshooting
  • Test on multiple Windows versions
  • Document new optimization categories

๐Ÿ“„ License

This project is provided under the Microsoft Sample Code License. See EULA.txt for complete terms.

Key Points:

  • Provided "AS IS" for illustration purposes
  • Not intended for production without testing
  • No warranty or support guarantees
  • User assumes all risks and responsibilities

๐Ÿ†˜ Support

Getting Help

  1. Check the Documentation: Review this README and the Configuration Files User Guide
  2. Review Event Logs: Check the WDOT Windows Event Log for detailed error information
  3. GitHub Issues: Search existing issues or create a new one
  4. Community Support: Engage with the community through GitHub Discussions

Troubleshooting

Common Issues:

  • Execution Policy: Ensure PowerShell execution policy allows script execution
  • Permissions: Run PowerShell as Administrator
  • Configuration Not Found: Verify configuration profile exists in Configurations/ folder
  • Service Dependencies: Some services may have dependencies that prevent disabling

Useful Commands

# Check execution policy
Get-ExecutionPolicy

# View available configurations
Get-ChildItem .\Configurations -Directory

# Test configuration file validity
if ($PSVersionTable.PSVersion -gt [version]'6.0.0') {
 Test-Json -Path ".\Configurations\MyConfig\Services.json"
}
# Check WDOT version and last run
Get-ItemProperty "HKLM:\SOFTWARE\WDOT"

Authors: Robert M. Smith and Tim Muessig (Microsoft)
Project: Windows Desktop Optimization Tool
Last Updated: October 2025