A deterministic audio and display baseline enforcement system for shared Windows PCs.
- Administrators of shared computers installed in conference rooms, classrooms, or similar environments.
- Admins or owners of computers installed as part of complex AV systems, including home theaters.
- Admins or owners of computers used as kiosks or digital signage.
This system is designed to keep audio and display configuration stable and predictable.
- Prevent Windows from selecting the wrong audio devices or display configuration.
- Prevent Windows from "guessing" or defaulting to last connected device/configuration state by deterministically recalling known-good settings at login.
- Prevent AV configuration drift caused by Windows updates.
- Allow users to temporarily make custom audio/display changes, then restore a standard configuration for the next user.
Windows and users often change audio and display configuration in shared environments. This system restores a known-good baseline at login.
Optional: This system can also deploy Sysinternals BGInfo to write information over the desktop wallpaper at login. This is useful for showing who is logged in and for displaying asset or service tag information that helps users submit support tickets.
Both the deployment script and individual scripts can target local or remote PC's via WinRM. If you plan on deploying remotely, make sure your workstation has the proper permissions and WinRM is working:
Test-WSMan -ComputerName <name of a remote PC>
If you plan to run individual scripts directly, no additional setup is required. Run the PowerShell script you need from the installer_scripts folder. When prompted for a target PC, provide a remote hostname or localhost.
If you plan to deploy to multiple PCs at once:
- Install Python 3.14 or later on your workstation. This project currently uses only the standard library.
- Follow the Remote Deploy instructions below.
If you plan to deploy BGInfo, place the latest BGInfo64.exe, one .bgi file, and one background image in the folder configured by $folder in InstallBGInfo.ps1. The script scans BGInfo\<folder> and requires exactly one match for each asset type.
This system is modular, so you can choose which features and installers to deploy. You can either run scripts under installer_scripts directly, or use 00_remote_deploy.py to install a selected set of scripts across multiple computers.
The deploy script processes multiple target PCs concurrently. For each target PC, it runs the selected installer scripts in the order listed in pwsh_scripts. For normal deployments, this is the only file you need to run.
- Clone this repository to your admin workstation. The 'main' branch is the most up-to-date but may not always be fully tested, so you may wish to use a release version. You can find a changelog at the end of this readme.
- Create
targets.txtin the repository root (usetargets.txt.exampleas a reference). - Add one PC target per line in
targets.txt. - Create and configure
config.pyin the repository root. You can copyconfig.py.example.
Run:
cd <to your repo root>
python .\00_remote_deploy.py- Each line in
targets.txtshould contain one hostname. - Keep
Cleanup.ps1last in thepwsh_scriptslist. - Remove or comment out installers you do not want to ship in your environment.
The below can either be deployed by the main deployment script, or can be run individually against either the localhost or a remote PC with WinRM.
Installs a custom fork of AudioDeviceCmdlets, which is maintained specifically for this system. (Thank you to all of those who made AudioDeviceCmdlets possible!)
It performs the following:
- Installs the fork of AudioDeviceCmdlets.
- Installs a local script to save audio settings (I/O devices, recording volume, playback volume).
- Installs a startup script that recalls saved settings at user login. If no settings are saved, no action is taken.
- Writes a log to
C:\ProgramData\CTS\AudioDeviceStartup.log.
If you are installing multiple tools and running Cleanup.ps1 last, continue to the Cleanup section. If you are only installing AudioDeviceCmdlets, the installer places SAVE_AUDIO_SETTINGS.bat on the desktop. Configure audio devices/levels as desired, then run that file to save the configuration.
Installs a fork of DisplayConfig, created by MartinGC94. The fork is maintained specifically for this system.
It performs the following:
- Installs a pinned
DisplayConfigmodule version from GitHub release assets. - Copies display save/recall scripts to
C:\ProgramData\CTS. - Installs a startup launcher at
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\cts_display_startup.bat. - Prints a prompt to run the display profile save script after installation.
If you are installing multiple tools and running Cleanup.ps1 last, continue to the Cleanup section, otherwise follow the below steps:
- After install, run
C:\ProgramData\CTS\run_display_config_save_profile.baton the target machine to capture a known-good display profile. - On future logins, the startup script recalls that saved display profile.
This installer deploys Sysinternals BGInfo assets from the repo and configures startup execution.
It performs the following:
- Copies the discovered BGInfo executable, config, and background image to
C:\ProgramData\CTS. - Installs startup launcher
cts_bginfo_startup.batin the Windows Startup folder. - Replaces the BGInfo config each run to keep the deployed profile current.
- Place the required BGInfo assets in
BGInfo\<folder>, where<folder>matches the$foldervalue in yourconfig.py. - That folder must contain exactly one
BGInfo64.exe, exactly one.bgifile, and exactly one supported image file (.jpg,.jpeg,.png,.bmp, or.gif). Note: you can keep multiple folders for different backgrounds and styles, but only what's specified inconfig.pywill be deployed. - Include
InstallBGInfo.ps1inpwsh_scriptsonly on systems where you want BGInfo applied at login.
If more than one script was executed per machine, make sure Cleanup.ps1 runs last. This script consolidates installer artifacts into a single SAVE_AV_SETTINGS.bat file on the Public Desktop to save both audio and display settings, and creates one optimized startup script to recall saved settings in the proper order. This script will also apply your BGInfo settings if specified.
The SAVE_AV_SETTINGS.bat file is placed on the Public Desktop, requires admin rights, and self-destructs after running. For edits or reruns, a persistent copy is stored in C:\ProgramData\CTS.
- Consolidates separate startup launchers into one ordered startup batch file.
- Preserves display recall before audio recall and BGInfo execution.
- Removes the standalone
SAVE_AUDIO_SETTINGS.batdesktop file when settings are consolidated intoSAVE_AV_SETTINGS.bat. - Creates
Log OutandRebootshortcuts on the Public Desktop, which recall the AV settings first. - Stores persistent recall-first launchers batch files and SAVE_AV_SETTINGS.bat in
C:\ProgramData\CTS.
- The startup script is fast and lightweight, but Windows may take several seconds after login to execute Startup-folder items. Users may also briefly see a blank command prompt window (which is immediately minimized) before the saved settings are applied.
- It is best practice to hide the power options in the start menu and direct users to the
RebootandLog Outdesktop shortcuts so AV settings are recalled at logout.
4 May 2026
- Backwards incompatible change: Move feature flags and script-specific params to the new
config.py - Bump DisplayConfig version to 6.0.1
- Modify
RebootandLog Outshortcuts to instantly display the user a message saying they will be logged out shortly.
10 April 2026
- Bug fix: record null value for audio levels if device does not exist (like no recording device)
- Harden: Elevate audio save script to admin if not already
- Harden: audio level recall. Check if value is non-numeric first.
27 March 2026
- Added changelog
- New feature: Add
RebootandLog Outshortcuts, which recall saved Audio and Display settings first.
26 March 2026
- Initial feature-complete release