MDM Providers

MDM provider abstraction for Jamf Pro and Intune parameter parsing.

Auto-Detection

get_provider(provider: str | None = None) MdmParamParser[source]

Get the MDM parameter provider instance.

Detection order: 1. Explicit provider argument (“jamf”, “intune”, or “generic”) 2. PYMDM_MDM_PROVIDER environment variable 3. Platform-based default: “intune” on Windows, “generic” everywhere else

Parameters:

provider (str | None, optional) – Explicit provider name, defaults to None (auto-detect)

Returns:

MDM provider instance

Return type:

MdmParamParser

Raises:

ValueError – If the provider name is not recognized

GenericParamParser

class GenericParamParser[source]

Bases: MdmParamParser

Generic positional parameter parser.

The neutral default for providers that pass parameters as plain positional sys.argv arguments with no reserved indices. Used when no provider is specified and the platform isn’t recognized as Jamf or Intune.

get(key: int | str) str | None[source]

Get a positional parameter by sys.argv index.

Parameters:

key (int | str) – Positional argument index

Returns:

Parameter value, or None if the index is out of range

Return type:

str | None

Raises:

TypeError – If key is not an integer

JamfParamParser

class JamfParamParser[source]

Bases: GenericParamParser

Jamf Pro parameter parser.

Jamf Pro reserves parameters 0-3: - $0 = Script name - $1 = Mount point of the target drive - $2 = Computer name - $3 = Username of logged in user

User-defined parameters are $4 through $11 (indices 4-11 in sys.argv).

Extends GenericParamParser with Jamf’s reserved-index validation.

get(key: int | str) str | None[source]

Safely retrieve Jamf parameter by index.

Parameters:

key (int | str) – Parameter index (must be int in range 4-11)

Returns:

Parameter value, or None if not provided

Return type:

str | None

Raises:

TypeError – If key is not an integer

IntuneParamParser

class IntuneParamParser[source]

Bases: GenericParamParser

Intune parameter parser.

Intune scripts can receive parameters in multiple ways: 1. Command-line arguments (sys.argv) – addressed by integer key 2. Environment variables – addressed by string key

Unlike Jamf, Intune does not reserve specific parameter indices. Integer keys map directly to sys.argv indices (0 = script name, 1+ = args). String keys are looked up as environment variables, optionally with an INTUNE_ prefix.

Extends GenericParamParser with environment-variable lookup for string keys.

Example:
>>> provider = IntuneParamParser()
>>> # Get from sys.argv[1]
>>> value = provider.get(1)
>>> # Get from environment variable
>>> value = provider.get("WEBHOOK_URL")
get(key: int | str) str | None[source]

Get a script parameter by key.

Integer keys are looked up in sys.argv. String keys are looked up as environment variables (with optional INTUNE_ prefix fallback).

Parameters:

key (int | str) – Parameter key (int for argv index, str for env var name)

Returns:

Parameter value, or None if not set

Return type:

str | None