Running MAS Without User Interaction: Complete Guide to Unattended Mode

Microsoft Activation Scripts (MAS) supports fully automated, non-interactive execution through an internal _unattended environment variable that activates when command-line arguments contain forward slashes (such as /actwin or /actoff).

The massgravel/Microsoft-Activation-Scripts repository provides enterprise-grade activation utilities that can deploy Windows and Office licenses without manual prompts. By leveraging the built-in unattended mode, system administrators can embed MAS into imaging pipelines, configuration management tools, or startup scripts where human supervision is impossible.

How the Unattended Flag Works

At the core of MAS automation is a single environment variable _unattended that propagates from the entry script down to every child process. When this flag equals 1, the script bypasses all interactive blocks—including pause, choice, and set /p prompts—and proceeds directly to activation logic.

Argument Detection Logic

The entry script MAS_AIO.cmd detects automation intent by scanning command-line arguments for forward slashes. In MAS/All-In-One-Version-KL/MAS_AIO.cmd at lines 29-30, the code executes:

if defined _args echo "%_args%" | find /i "/" >nul && set _unattended=1

Any argument containing / (such as /actwin, /actoff, or /silent) forces the script into headless mode. This convention is consistent across the entire codebase, allowing the same triggering mechanism to work for both the All-In-One bundle and individual activation modules.

Conditional Execution Flow

Throughout the source, interactive sections are guarded by conditional checks:

if %_unattended%==1 goto :skipInteraction

:: Interactive code only runs when _unattended is 0
pause

:skipInteraction
:: Activation logic continues here

When _unattended is 1, the script jumps over quality-engine checks and user prompts, executing the activation routine silently. At termination, the script uses if %_unattended%==1 timeout /t 2 & exit /b to pause briefly for log visibility before exiting without further input.

Source Code Implementation

The unattended mechanism is implemented consistently across the repository, from the main orchestrator to specialized activation methods.

Entry Point Detection (MAS_AIO.cmd)

The primary entry point MAS/All-In-One-Version-KL/MAS_AIO.cmd initializes the automation flag and parses incoming parameters. When it detects slash-prefixed arguments, it sets _unattended=1 and exports this environment to all child scripts. This ensures that whether you are running HWID, KMS, TSforge, or Ohook activation, the non-interactive behavior remains consistent.

Activation Script Propagation

Individual activation scripts in the MAS/Separate-Files-Version/Activators/ directory inherit the flag and can also trigger it independently:

  • TSforge_Activation.cmd (lines 205-206): for %%A in (%_actwin% …) do (if "%%A"=="1" set _unattended=1)
  • Online_KMS_Activation.cmd (lines 191-192): Uses identical logic driven by %_actwin% %_actoff% variables
  • HWID_Activation.cmd, Ohook_Activation_AIO.cmd, and others: Initialize _unattended=0 at startup (around line 106-108), then toggle to 1 based on parameters

Utility scripts such as Extract_OEM_Folder.cmd, Change_Windows_Edition.cmd, and Change_Office_Edition.cmd also respect the _unattended flag, ensuring that edition changes and OEM extractions can run silently within the same automation pipeline.

Command-Line Examples for Silent Deployment

The following patterns demonstrate how to run MAS without user interaction in various deployment scenarios.

All-In-One Silent Activation

To activate both Windows and Office without prompts using the consolidated script:

MAS_AIO.cmd /actwin /actoff /silent

The forward slashes in /actwin and /actoff trigger _unattended=1, causing the script to skip all menus and exit automatically after completion.

Modular Separate-Files Execution

For granular control using individual components:

Change_Windows_Edition.cmd /edition pro
HWID_Activation.cmd /actwin

Each script detects the / character in its arguments and independently sets the unattended flag, allowing chained execution without interactive pauses between steps.

PowerShell Provisioning Wrapper

Embed MAS within larger automation frameworks:

$masPath = "C:\Deploy\MAS_AIO.cmd"
& $masPath /actwin /actoff /silent | Out-Null

The PowerShell invocation requires no additional logic to suppress prompts; the batch file handles the unattended state internally based on the provided switches.

Summary

  • MAS uses the _unattended environment variable to toggle between interactive and headless execution modes.
  • The flag is automatically set to 1 when command-line arguments contain forward slashes, as implemented in MAS_AIO.cmd lines 29-30.
  • All child scripts—including TSforge_Activation.cmd, Online_KMS_Activation.cmd, and HWID_Activation.cmd—inherit and respect this flag.
  • Interactive blocks are bypassed using conditional jumps (if %_unattended%==1 goto), allowing silent deployment in SCCM, MDT, or custom imaging pipelines.
  • The script exits cleanly after a brief timeout when running unattended, ensuring proper log capture without hanging the process.

Frequently Asked Questions

How do I know if MAS is running in unattended mode?

When _unattended is set to 1, the script suppresses all pause commands and menu selections. You will see activation progress messages in the console, but the process will not wait for keyboard input and will automatically terminate after the activation routine completes, typically with a 2-second delay.

Can I force unattended mode without using slash arguments?

Yes. While the standard method relies on detecting / characters in arguments, you can manually export the variable before execution: set _unattended=1 in your parent batch file or command prompt before calling any MAS script. This forces non-interactive behavior regardless of the arguments passed.

Does unattended mode work with all activation methods?

Yes. The _unattended flag is implemented consistently across HWID, TSforge, Online KMS, and Ohook activation methods in the Separate-Files-Version directory, as well as the All-In-One bundle. Each script checks this flag before presenting interactive options, ensuring uniform behavior for automated deployments.

What happens if an error occurs during unattended execution?

The script will still output error messages to the console or log file, but it will not pause for user acknowledgment. Error handling routines bypass pause commands when _unattended==1, allowing the process to continue or exit with an error code that can be captured by parent scripts or configuration management tools.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →