3 minute read

Every workday used to begin with the same repetitive routine: opening Outlook, launching Visual Studio, starting browsers with specific tabs, and opening note-taking applications. None of these tasks are difficult, but performing them repeatedly adds friction before actual work even begins.

To eliminate that overhead, I built a lightweight workspace launcher that starts everything I need from a single configuration file. Instead of hardcoding application paths inside a batch script, the solution uses a JSON file for configuration, a PowerShell script for execution, and a small VBScript launcher for silent startup.

Automating Daily Workspace Initialization on Windows
Automating Daily Workspace Initialization on Windows

Why Move Beyond Traditional Batch Files?

Batch files are great for simple automation, but they become harder to maintain as the number of applications grows.

Typical challenges include:

  • Hardcoded application paths
  • Duplicate code for each application
  • Difficulty enabling or disabling tools
  • Managing administrator privileges
  • Maintaining different workspace configurations

I wanted something that could be modified without touching the launcher logic itself.

The result was a configuration-driven approach where the launcher reads a list of applications from a JSON file.

Project Structure

The solution consists of three small files:

RegularWorkSpaceAutomation/
│
├── apps.json
├── launcher.ps1
└── AutoRun.vbs

Each component has a specific responsibility:

File Purpose
apps.json Stores application definitions
launcher.ps1 Reads configuration and launches applications
AutoRun.vbs Starts PowerShell silently without showing a console window

Defining Applications in JSON

All applications are maintained in a single configuration file.

[
  {
    "name": "Chrome YouTube",
    "filePath": "chrome",
    "arguments": "--incognito https://www.youtube.com/",
    "admin": false
  },
  {
    "name": "Outlook",
    "filePath": "outlook",
    "arguments": "",
    "admin": false
  }
]

Adding a new application is as simple as adding another object.

Removing an application requires deleting only a single entry.

No launcher code changes are necessary.

Launching Applications with PowerShell

The launcher reads the JSON file and starts each application dynamically.

$apps = Get-Content "$PSScriptRoot\apps.json" -Raw | ConvertFrom-Json

For every application entry, the script determines:

  • Application path
  • Command-line arguments
  • Whether elevation is required

Applications that require administrator privileges are launched using:

Start-Process -FilePath $app.filePath -Verb RunAs

Standard applications launch normally.

This keeps the configuration simple while allowing different launch behaviors.

Silent Startup Using VBScript

To avoid displaying a PowerShell console window at login, a small VBScript wrapper starts the launcher silently.

Set WshShell = CreateObject("WScript.Shell")

scriptFolder = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)

WshShell.Run "powershell.exe -ExecutionPolicy Bypass -File """ & scriptFolder & "\launcher.ps1""", 0, False

Set WshShell = Nothing

The window style value 0 ensures the startup process remains invisible.

Current Workspace Configuration

My daily workspace currently launches:

  • Microsoft Sticky Notes
  • Outlook
  • Chrome in Incognito mode
  • Chrome with a dedicated TFS dashboard
  • Visual Studio with administrator privileges

The exact set of applications changes occasionally, but updating the workspace only requires editing the JSON file.

Automatic Startup at Login

To launch the workspace automatically when Windows starts:

  1. Create a shortcut to AutoRun.vbs
  2. Place the shortcut in the Startup folder
shell:startup

Windows automatically executes the launcher after login.

Benefits of a Configuration-Driven Workspace

After using this setup for several months, a few advantages became obvious:

Easier Maintenance

Applications can be added or removed without modifying scripts.

Consistent Startup Experience

The same tools are available every morning without relying on memory.

Cleaner Separation of Responsibilities

Configuration lives in JSON while execution logic remains in PowerShell.

Reduced Friction

A complete workspace is ready with a single action—or automatically after login.

Future Improvements

Potential enhancements include:

  • Startup delays per application
  • Enable/disable flags
  • Application groups (Development, Meetings, Writing)
  • Process detection to avoid duplicate launches
  • Logging and error reporting
  • Workspace profiles for different projects

Because the launcher is configuration-driven, these features can be added without redesigning the overall structure.

Final Thoughts

What started as a simple batch file evolved into a small but flexible automation tool. The combination of JSON configuration, PowerShell execution, and silent startup provides a clean way to prepare a working environment with minimal effort.

The biggest benefit is not the few minutes saved each morning. It’s removing a repetitive task entirely and starting work in a consistent environment every day.

Comments are configured with provider: disqus, but are disabled in non-production environments.