Runtimes, installed modules, inputs, environment variables, network, timeouts, size limits, credits and device runs for actions
This page lists the facts you need to write an action script: what each runtime provides, how inputs and credentials reach the script, what the cloud sandbox can reach, and the limits that apply in the sandbox and on devices.
Runtimes
| Runtime (UI label) | Where it runs | What's installed |
|---|---|---|
| PowerShell | Cloud sandbox or a device | Sandbox: PowerShell 7 with the ExchangeOnlineManagement module 3.9.2. The Microsoft.Graph PowerShell SDK isn't installed, so Connect-MgGraph fails; call Graph with Invoke-RestMethod. On a device: Windows PowerShell (powershell.exe) with whatever the device has installed. |
| Python | Cloud sandbox only | Python 3 standard library and the playwright package. pip isn't available, so you can't install other packages. |
| Playwright/Python | Cloud sandbox only | Playwright 1.63 for Python with Chromium, launched headless for you. Scripts are Python, not TypeScript. |
Each cloud run gets a fresh container that's discarded afterwards, so nothing persists between runs. PowerShell and Python runs get 512 MiB of memory; Playwright runs get 2 GiB.
Script contract
| PowerShell | Python | Playwright/Python | |
|---|---|---|---|
| Read an input | $ctx.inputs.<name> |
input_context["<name>"] |
input_context["<name>"] |
| Optional input left blank | $null -eq $ctx.inputs.<name> |
input_context.get("<name>") is None |
as Python |
| Injected objects | $ctx |
input_context |
page, browser_context, input_context |
| Return structured output | Set $result = @{ ... } |
Assign a top-level result |
Assign a top-level output |
| Log a line | Write-Output |
print() |
print() |
| Fail the run | Throw an error or exit non-zero | Raise an exception or exit non-zero | Raise an exception |
- PowerShell scripts start with
$ErrorActionPreference = "Stop"already set, so any error stops the script and fails the run. - Playwright scripts may use top-level
await, for exampleawait page.goto(url). - Read inputs from
$ctxorinput_context, not from aparam()block.
Inputs
| Type in the editor | The person running it sees | The script receives |
|---|---|---|
| string | A text box | What they typed |
| textarea | A multi-line box | What they typed |
| An email box, format-checked | "[email protected]" |
|
| boolean | An on/off switch | "true" or "false" |
| date | A date picker | "2026-01-31" (YYYY-MM-DD) |
| select | A list of the choices | One choice, exactly as written |
| string[] | A comma-separated text box | "a, b, c"; split it yourself |
- Every input arrives as a string. Compare booleans explicitly:
if ($ctx.inputs.notify -eq 'true')in PowerShell,if input_context["notify"] == "true":in Python. A plainiftreats"false"as true. - A blank optional input is absent. Default values in the editor aren't passed to the script, so handle the missing case yourself.
- A Required boolean must be switched on to run. Use it for confirmations.
- SuperIT checks required inputs, select choices, email format, dates and unknown input names before the run starts.
Environment variables
| Variable | Contains |
|---|---|
CREDENTIAL_<NAME>_TOKEN |
For an OAuth credential, such as Microsoft Graph: a fresh access token. Send it as Authorization: Bearer <token>. |
CREDENTIAL_<NAME>_<HEADER> |
For an API key credential: the full value of that header, for example Bearer … or Basic …. |
<NAME> and <HEADER> are the credential name and header name in upper case, with every run of other characters replaced by _. For example, "M365 Graph (tenant)" gives CREDENTIAL_M365_GRAPH_TENANT_TOKEN. Read them with $env:NAME in PowerShell or os.environ["NAME"] in Python. See Credentials.
Network
- The cloud sandbox can reach the public internet. If a vendor restricts API access by IP address, email [email protected].
- The sandbox runs in SuperIT's cloud and has no route to your private networks. To reach something inside a client's network, run a PowerShell action on a device there.
- Scripts run as an unprivileged account.
Timeouts
| Limit | Value |
|---|---|
| Script timeout, cloud sandbox | 5 minutes by default; set Script timeout (minutes) up to 60 |
| Script timeout, device | 5 minutes by default; set Script timeout (minutes) up to 60 |
| Waiting for approval | 7 days, then the run ends with "Approval expired" |
Limits
| Limit | Value |
|---|---|
| Script, inputs and credentials together | About 28 KiB. A larger run fails before the script starts, so keep scripts short. |
| Stored output | 256 KB each for Stdout and Stderr; longer output is truncated with a marker. |
| Retries | None. A failed run isn't retried automatically. |
| Script length per action | One script. Actions can't call other actions. |
Credits
Runs use SuperIT credits, shown under the Workflows billing category. For current pricing, see superit.ai.
Test runs aren't billed. Runs that never start, for example because they were rejected or cancelled before launch, aren't billed.
Device runs
- Runtime: PowerShell only, in Windows PowerShell on the device.
- Devices: online Windows devices with the SuperIT RMM agent. macOS and Linux devices can't run actions.
- Account: the script runs as SYSTEM, with no signed-in user session, so it can't show anything to the user or reach their mapped drives or user profile settings directly.
- Setup: the action must be set to run on a device. See Set an action to run on a device.
- Credentials: linked credentials are passed to the device as environment variables for the run.
- Testing: Test isn't available for device actions.
- Output: the SuperIT RMM agent keeps the first and last 128 KiB of each output stream.
- Policies: the action's authorization policy applies. Command policies don't, so the authorization policy is the only check. Don't let Anyone run a device action without approval. See Authorization policies and approvals.
- Ticket recommendations: a device action started from a ticket recommendation isn't necessarily sent to the ticket contact's device, so leave Run automatically off for device actions.