# Customizing MAS Script Settings Using Configuration Variables: The Complete Guide

> Easily customize Microsoft Activation Scripts MAS settings with configuration variables. Adjust debug output, silent mode, KMS servers and more without altering core logic. Full guide available.

- Repository: [MASSGRAVE/Microsoft-Activation-Scripts](https://github.com/massgravel/Microsoft-Activation-Scripts)
- Tags: how-to-guide
- Published: 2026-02-24

---

**Microsoft Activation Scripts (MAS) exposes batch-style configuration variables at the top of each script file, allowing users to customize behavior ranging from debug output and silent mode to KMS server selection without modifying core activation logic.**

The Microsoft Activation Scripts (MAS) repository by massgravel provides a suite of Windows and Office activation utilities controlled through centralized configuration variables. These settings, defined in the header blocks of each batch file, govern everything from script versioning to runtime behavior such as elevation requirements and logging levels. Understanding how to manipulate these variables enables system administrators to deploy silent activations, redirect update checks, and troubleshoot activation failures across enterprise environments.

## Core Configuration Architecture

The MAS project organizes configuration variables across three primary file categories, with the `:dk_setvar` routine serving as the central mechanism for initializing shared settings.

### Main Entry Point Configuration

The `MAS/All-In-One-Version-KL/MAS_AIO.cmd` file functions as the primary dispatcher and contains the master configuration block between lines 6‑30. This section defines global variables including `masver` (script version), obfuscated URL variables (`mas`, `github`, `selfgit`), and default runtime flags such as `_debug` and `_elev`. When this script calls individual activators, it passes these initialized variables downstream, ensuring consistent behavior across the entire toolkit.

### Individual Utility Scripts

Files within `MAS/Separate-Files-Version/` such as `Change_Windows_Edition.cmd` and `Check_Activation_Status.cmd` replicate a similar configuration pattern near their headers (typically lines 35‑48). Each file maintains local copies of critical variables while inheriting shared definitions through the `:dk_setvar` subroutine, allowing standalone execution without the all-in-one wrapper.

### Activator-Specific Settings

The specialized activation scripts located in `MAS/Separate-Files-Version/Activators/` (including `TSforge_Activation.cmd`, `Online_KMS_Activation.cmd`, and `Ohook_Activation.cmd`) reference a common configuration block spanning lines 54‑82. This shared initialization routine standardizes PowerShell path resolution (`ps` and `psc` variables), output redirection helpers (`nul1`, `nul2`), and unattended mode detection (`_unattended`) across all activation methods.

## Key Configuration Variables Explained

The following variables control distinct aspects of script execution and can be overridden to modify default behavior:

- **`masver`** — Stores the current script version string (e.g., `3.10`) displayed in the title bar and used to construct the `upver` variable for update checks.
- **`_debug`** — Boolean flag (default `0`) that enables verbose diagnostic output when set to `1`, revealing internal state during troubleshooting.
- **`_elev`** — Elevation control flag (default `0`) automatically set to `1` when the `-el` command-line switch is passed, forcing administrator rights verification.
- **`_unattended`** — Silent mode trigger (default `0`) activated when arguments contain `/` or when `/S` is specified, suppressing all interactive prompts for automated deployments.
- **`_args`** — Captures the raw command-line input (`%*`) for downstream parsing of activation-specific switches like `/HWID` or `/K-`.
- **`targetFFN`** — Office-specific variable determining the update channel CDN URL (e.g., `Current` or `Deferred`) used when modifying Office installations via `Change_Office_Edition.cmd`.
- **`ps` / `psc`** — Resolved paths to `powershell.exe` and PowerShell Core executables, ensuring consistent PowerShell invocation across different Windows versions.

## Four Methods to Customize MAS Settings

### Pre-Run Environment Overrides

Because MAS variables utilize standard batch `set` statements, you can override them immediately before script execution without editing source files. The script reads these values immediately after the `:dk_setvar` routine (line 38 in `MAS_AIO.cmd`).

```cmd
set _debug=1
set _unattended=1
MAS_AIO.cmd /K- 10.0.0.10

```

### In-Script Permanent Modifications

For persistent changes across multiple executions, edit the configuration block directly within the target script file. Modifying variables in `MAS_AIO.cmd` propagates to sub-scripts because they all `call :dk_setvar` from the parent context.

```cmd
:: Inside MAS_AIO.cmd, change default KMS behavior
set KMS_HOST=kms.internal.corp.local

```

### System Environment Persistence

Variables can survive across sessions by exporting them to the system environment using `setx`. Subsequent script launches will inherit these values if local definitions are absent.

```cmd
setx MAS_DEBUG 1
setx KMS_HOST "kms.enterprise.com"

```

### Command-Line Switch Mapping

Most scripts expose shorthand switches that map directly to configuration variables:
- `-el` sets `_elev=1` (force elevation)
- `/S` or arguments containing `/` set `_unattended=1` (silent mode)
- `-qedit` disables QuickEdit mode temporarily

## Practical Customization Examples

### Enabling Debug Output for Troubleshooting

Activate verbose logging to diagnose KMS connection failures without permanent file modifications:

```cmd
set _debug=1
MAS_AIO.cmd /K- 10.0.0.5

```

This configuration prints diagnostic blocks (`echo Debug:`) at multiple execution points, revealing exactly where the activation routine encounters errors.

### Silent Deployment for CI/CD Pipelines

Execute fully unattended Windows activation suitable for automated imaging workflows:

```cmd
set _unattended=1
MAS_AIO.cmd /K-

```

When `_unattended` equals `1`, the script suppresses all interactive prompts and writes operational logs to `%TEMP%\MAS_log.txt` (handled by the `:Log` routine at line 520 in `MAS_AIO.cmd`).

### Redirecting to Internal KMS Infrastructure

Override default public KMS servers with internal corporate activation hosts:

```cmd
set KMS_HOST=kms.internal.corp
set KMS_PORT=1688
MAS_AIO.cmd /K- %KMS_HOST%:%KMS_PORT%

```

The `/K-` switch receives the host:port pair, which the script passes to `Set-ItemProperty` commands targeting `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform`.

### Modifying Office Update Channels

Switch Office Click-to-Run installations to the Current channel instead of Deferred:

```cmd
set targetFFN=Current
Change_Office_Edition.cmd /U

```

This updates registry keys `CDNBaseUrl` and `UpdateChannel` using the new `%targetFFN%` value (lines 1261‑1264 in `Change_Office_Edition.cmd`).

### Implementing Persistent Proxy Configuration

Store corporate proxy settings for use across all future script executions:

```cmd
setx MAS_PROXY "http://proxy.corp:3128"

```

To utilize this variable, add the following line after the `:dk_setvar` call in `MAS_AIO.cmd`:

```cmd
if defined MAS_PROXY set _proxy=%MAS_PROXY%

```

## Summary

- **Configuration variables** in MAS are centralized batch `set` statements located in the header blocks of `MAS_AIO.cmd` and individual component scripts.
- **Key variables** include `_debug` for diagnostics, `_unattended` for silent operation, and `targetFFN` for Office channel management.
- **Customization methods** range from temporary pre-run overrides and command-line switches to permanent in-script edits and system environment variables.
- **Enterprise deployment** scenarios benefit from combining `_unattended=1` with custom `KMS_HOST` definitions for automated, infrastructure-specific activation workflows.
- **Extensibility** is supported through the `:dk_setvar` routine, allowing administrators to introduce custom flags (prefixed with `_`) without breaking existing functionality.

## Frequently Asked Questions

### Where are the configuration variables located in the MAS source code?

Configuration variables reside in the header sections of each script file. In `MAS/All-In-One-Version-KL/MAS_AIO.cmd`, the primary block spans lines 6‑30, while individual scripts like `Change_Windows_Edition.cmd` maintain similar blocks around lines 35‑48. Activator scripts initialize shared variables through the `:dk_setvar` subroutine (lines 54‑82 in `TSforge_Activation.cmd`).

### Will customizing variables affect future script updates?

Pre-run environment overrides and command-line switches remain safe across updates because they don't modify source files. However, in-script edits to `MAS_AIO.cmd` or component files will be overwritten when downloading new releases, requiring reapplication of changes. Using `setx` to create persistent environment variables provides a version-agnostic alternative that survives script updates.

### How do I make MAS run silently in an enterprise deployment scenario?

Set the `_unattended` variable to `1` either through environment variables (`set _unattended=1`) or by passing the `/S` switch. Combine this with explicit KMS host definitions using `set KMS_HOST=your.server.com` to ensure the script activates against internal infrastructure without user interaction or prompts.

### Is it safe to add custom configuration variables to the scripts?

Yes, provided you follow the existing naming convention. Prefix custom variables with an underscore (e.g., `_useProxy` or `_customFlag`) to avoid collisions with system environment variables. Add parsing logic near lines 90‑110 in the argument inspection section to detect new switches, then reference your custom variable in the relevant code path (such as prepending proxy settings to `curl` or PowerShell web requests).