A lightweight PowerShell 7 scheduler for running multiple MaxQuant jobs in parallel on Windows, using a queue-based submission model, CPU affinity, and robust success/failure classification.
This repository provides a minimal local scheduler for MaxQuant on Windows systems.
It is designed for labs and individual users who:
- must run MaxQuant on Windows
- want to run multiple jobs in parallel safely
- need explicit resource control (CPU threads / affinity)
- want deterministic success/failure detection
- do not need a full HPC or cluster scheduler
The scheduler runs continuously, watches a queue directory for MaxQuant XML files, and launches jobs when sufficient CPU resources are available.
- Queue-based job submission (drop XML files into a directory)
- Parallel execution with CPU thread accounting
- CPU affinity enforcement (no oversubscription)
- Supports both
<outputFolder>and<fixedCombinedFolder>XML layouts - Robust success/failure classification based on MaxQuant outputs
- Persistent audit trail (
summary.log) - Explicit failure diagnostics (
FAILED_REASON.txt) - PowerShell 7–native (no deprecated cmdlets)
- Windows (Windows 10/11 or Windows Server)
- PowerShell 7 or newer
(pwsh, not Windows PowerShell 5.1) - MaxQuant installed locally
This script will not run under Windows PowerShell 5.1.
The scheduler expects the following directory structure:
C:\MQ\
├─ queue\ # submit XML files here
├─ running\ # XML files currently running
├─ done\ # successfully completed jobs
├─ failed\ # failed jobs
└─ logs\ # scheduler logs and job stdout/stderr
Additional directories are user-defined in the XML files:
- MaxQuant executable directory (e.g.
C:\MQ_EXE) - Andromeda index directory (e.g.
C:\MQ_INDEX) - RAW data directories
- Output directories
- Clone the repository:
git clone https://github.com/<your-username>/maxquant-windows-scheduler.git
- Ensure PowerShell 7 is available:
pwsh --version - Edit
mq-scheduler.ps1and set:- path to
MaxQuantCmd.exe - maximum number of threads (
$MAX_THREADS) - base scheduler directory (default:
C:\MQ)
- path to
From PowerShell 7:
pwsh -ExecutionPolicy Bypass -File mq-scheduler.ps1The scheduler will start and run continuously.
To submit a MaxQuant job:
- Prepare a valid MaxQuant XML file
- Ensure it contains:
<numThreads>- either
<outputFolder>or<fixedCombinedFolder>
- Copy or move the XML file into:
C:\MQ\queue\
That is the only submission step.
The scheduler determines the output directory using the following precedence:
<outputFolder>under<MaxQuantParams><fixedCombinedFolder>under<MaxQuantParams><outputFolder>at top level<fixedCombinedFolder>at top level If no output folder can be resolved, the job is rejected and marked as failed.
A job is classified as SUCCESS if all of the following are true:
- MaxQuant exits with code
0 - Output directory exists
combined/txt/summary.txtexistscombined/txt/proteinGroups.txtexists Otherwise, the job is classified as FAILURE.
For failed jobs:
- The XML file is moved to
C:\MQ\failed - A
FAILED_REASON.txtfile is written to the output directory (if available) - A detailed entry is added to
logs/summary.logExample failure reason:
ExitCode=0; OutputExists=True; SummaryTxt=True; ProteinGroupsTxt=False
This indicates that MaxQuant ran and produced output, but protein inference did not complete successfully.
- Scheduler audit log:
C:\MQ\logs\summary.log - Per-job stdout:
C:\MQ\logs\<jobname>.out - Per-job stderr:
C:\MQ\logs\<jobname>.err
This tool is intentionally minimal:
- Not a cluster or HPC scheduler
- No retries or job migration
- No MaxQuant parameter validation
- No cloud or container support
- Single-machine only
It is designed for local, deterministic execution, not for distributed workloads.
This project is licensed under the MIT License.
If you use this scheduler in published work, please cite it as:
G. Justino, maxquant-windows-scheduler, Zenodo (2025).
https://doi.org/10.5281/zenodo.18070281