Deploy Orb on Windows using Microsoft Configuration Manager
This guide walks you through deploying Orb across a Windows fleet using Microsoft Configuration Manager (ConfigMgr, formerly SCCM). The guide covers:
- Choosing between the Orb sensor and the Orb app
- Building the content source and keeping your Deployment Token out of logs
- Creating the Application and its deployment type
- Deploying, verifying, updating and uninstalling
- The files and processes to allow-list in endpoint security tools
Requirements:
- An Orb Cloud subscription
- A Configuration Manager current branch site with a distribution point and management point
- Windows devices with the ConfigMgr client installed, in a device collection
- A Deployment Token for your Space
Which should I deploy?
Orb offers two Windows deliverables. They behave very differently under managed deployment, so choose deliberately.
| Orb sensor | Orb app | |
|---|---|---|
| Runs as | Windows service (LocalSystem) |
User-session desktop app with a tray icon |
| Starts | Automatically at boot, before any user logs in | At user logon, once a startup entry exists |
| Needs a logged-in user | No | Yes |
| Installer | Windows Installer package (.msi) |
Orb-installer.exe |
| Best for | Unattended fleet monitoring, kiosks, point of sale, servers | Devices where a person wants the Orb UI |
For most managed deployments the sensor is the better fit. It ships as an MSI, so Configuration Manager detects it by product code, generates its own uninstall command, and needs no scripts at all. It also runs as a service, so it starts before login and reports continuously without anyone signing in.
The sensor and the app register with Orb Cloud separately, so a device running both appears twice in your Space, under the same hostname. Deploy one or the other unless you specifically want both.
Before you start
Create a Deployment Token in the Orchestration section of Orb Cloud. A Deployment Token links each Orb to your Space automatically, with no user interaction.
Use a dedicated, revocable token per deployment so you can attribute devices and revoke access without disrupting other rollouts.
Deploy the Orb sensor
Prepare the content source
Create a folder on your content source share, for example \\server\Source$\Orb\OrbSensor, containing the sensor MSI and your token:
OrbSensor\
orb-sensor.msi
deployment_token.txtdeployment_token.txt contains only your token, with no trailing newline:
orb-dt1-yourdeploymenttoken678Ship the token as a file in the content source rather than on the command line. Configuration Manager writes the full command line to AppEnforce.log on every client and shows it in the deployment type's properties in the console. A token supplied by file appears in neither, and the MSI keeps it out of its own log as well.
Create the Application
In the console, go to Software Library → Application Management → Applications and select Create Application.
Leave Automatically detect information about this application from installation files selected, set Type to Windows Installer (*.msi file), and set the location to the MSI on your share, for example
\\server\Source$\Orb\OrbSensor\orb-sensor.msi.Select Next. Configuration Manager reads the package, fills in the name, publisher and version, and creates the detection rule from the MSI product code.
On General Information, set the installation program so it reads the token from the content:
msiexec /i "orb-sensor.msi" /q DEPLOYMENTTOKENFILE=deployment_token.txtSet Install behavior to Install for system.
Complete the wizard.
Open the deployment type's properties and confirm two settings on the User Experience tab:
- Logon requirement: Whether or not a user is logged on
- Installation program visibility: Hidden
On the Programs tab, the uninstall program is already filled in from the package:
msiexec /x {ProductCode} /qBecause the sensor ships as an MSI, this deployment needs no scripts: no installation wrapper, no detection script, and no client setting to allow PowerShell to run. Configuration Manager derives both detection and removal from the package itself, which is also what makes upgrades and supersedence behave predictably.
Distribute and deploy
- Right-click the application and select Distribute Content, then choose your distribution point.
- Right-click the application and select Deploy, choose your device collection, set the Purpose to Required, and set the deadline.
The service installs and starts, then links to your Space with no user interaction and without anyone logging in. The MSI installs the Orb service as LocalSystem with start type Automatic and configures it to restart on failure, so it also returns after every reboot with nothing further to configure.
Configuration properties
Set any of these as PROPERTY=value pairs on the installation program. They are persisted, so they survive upgrades.
| Property | Effect |
|---|---|
DEPLOYMENTTOKENFILE |
Path to a token file in the content source. Relative paths resolve against the package. |
DEPLOYMENTTOKEN |
The token itself. Kept out of the MSI log, but recorded in AppEnforce.log — prefer the file. |
ORB_DEVICE_NAME_OVERRIDE |
Name the device reports in your Space. Quote values containing spaces. |
AUTOUPDATE |
1 lets the sensor update itself on a schedule. Defaults to 0 when installed from the MSI, which is what you want when Configuration Manager manages versions. |
PURGEDATA |
Uninstall only. 1 also removes C:\ProgramData\Orb — see Uninstall Orb. |
Other sensor options from Orb Configuration are available as properties of the same name, including ORB_FIRSTHOP_DISABLED, ORB_BANDWIDTH_DISABLED, ORB_EPHEMERAL_MODE, ORB_MEASURE_SERVER_ENABLED and ORB_MEASURE_SERVER_PORT.
Changing a property and redeploying applies the new value. Removing a property from the command line does not clear it — the previous value is kept, by design, so that settings survive upgrades. To clear a setting, uninstall and reinstall.
Migrating from a scripted sensor installation
If your devices already run a sensor installed by script, the MSI takes over the existing service in place, keeps the device's identity, and removes the old executable, its folder and its firewall rule. Each device stays the same Orb in your Space.
To migrate, configure the MSI application to supersede the older application and leave Uninstall unchecked, because the MSI replaces the old installation in place.
Delete any existing Uninstall deployment of the script-based application first. Its detection rule looks for the Orb service and C:\Program Files\Orb\Orb.exe. On a device that has the MSI sensor, that rule can match and remove the service the MSI just installed.
Install Orb on Windows describes an optional Orb Auto-Update scheduled task for scripted installations. The MSI removes that task if it finds it. Do not recreate it on devices you manage with Configuration Manager: it would replace files owned by the installer, after which the version Configuration Manager reports would no longer match what is running.
Deploy the Orb app
The app has no MSI, so it is deployed as a script installer. It also needs a startup entry that its silent installation does not create.
Allow PowerShell scripts to run
The app's deployment type uses PowerShell for installation and detection. Configuration Manager writes detection scripts to C:\Windows\CCM\SystemTemp and runs them, so the client must be allowed to execute them.
In the console, go to Administration → Client Settings, edit your client settings, select Computer Agent, and set PowerShell execution policy to Bypass.
If this is not set, installation succeeds but detection fails and the deployment reports an error. The symptom in AppDiscovery.log is:
PSSecurityException / UnauthorizedAccess
CScriptHandler::DiscoverApp failed (0x87d00327)
If detection still fails after changing the client setting, confirm the machine's own execution policy is not Restricted (Get-ExecutionPolicy -List).
Prepare the content source
OrbApp\
Orb-installer.exe
Install-OrbApp.ps1
Uninstall-OrbApp.ps1
deployment_token.txtDownload the installer from https://pkgs.orb.net/earlyaccess/windows/Orb-installer.exe.
Install-OrbApp.ps1:
[CmdletBinding()]
param([string] $DeploymentToken)
$ErrorActionPreference = 'Stop'
if (-not $DeploymentToken) {
$sidecar = Join-Path $PSScriptRoot 'deployment_token.txt'
if (Test-Path $sidecar) { $DeploymentToken = (Get-Content $sidecar -Raw).Trim() }
}
if (-not $DeploymentToken) { exit 2 }
$installer = Join-Path $PSScriptRoot 'Orb-installer.exe'
$flags = @('/S', '/LAUNCH_AT_STARTUP=1', '/START_IN_BACKGROUND=1', "/ORB_DEPLOYMENT_TOKEN=$DeploymentToken")
$p = Start-Process -FilePath $installer -ArgumentList $flags -Wait -PassThru
if ($p.ExitCode -ne 0) { exit 1 }
# Create the all-users startup entry so the app runs at each user's next logon.
$startupDir = Join-Path $env:ProgramData 'Microsoft\Windows\Start Menu\Programs\StartUp'
New-Item -ItemType Directory -Path $startupDir -Force | Out-Null
$shell = New-Object -ComObject WScript.Shell
$lnk = $shell.CreateShortcut((Join-Path $startupDir 'Orb.lnk'))
$lnk.TargetPath = 'C:\Program Files\Orb\Orb.exe'
$lnk.WorkingDirectory = 'C:\Program Files\Orb'
$lnk.Save()
exit 0The startup shortcut step is required. Configuration Manager installs as SYSTEM, and /LAUNCH_AT_STARTUP=1 on its own creates no startup entry — it only records the preference under HKLM\SOFTWARE\Orb\MDM. Without the shortcut the app is installed but never runs, so it never links to Orb Cloud and does not appear in your Space until each user launches it by hand.
Do not launch Orb.exe from the installation script instead. The script runs as SYSTEM in session 0, where the app has no visible interface.
Uninstall-OrbApp.ps1:
$ErrorActionPreference = 'Continue'
$lnk = Join-Path $env:ProgramData 'Microsoft\Windows\Start Menu\Programs\StartUp\Orb.lnk'
if (Test-Path $lnk) { Remove-Item $lnk -Force -ErrorAction SilentlyContinue }
Get-Process Orb -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
$un = 'C:\Program Files\Orb\uninstall.exe'
if (Test-Path $un) { Start-Process -FilePath $un -ArgumentList '/S' -Wait }
exit 0Create the Application
Select Create Application and choose Manually specify the application information.
Name the application, for example
Orb App, and set the publisher and version.On Deployment Types, select Add and choose Script Installer.
Set the Content location to your package folder, for example
\\server\Source$\Orb\OrbApp.Set the programs:
Installation program
powershell.exe -ExecutionPolicy Bypass -NoProfile -File .\Install-OrbApp.ps1Uninstall program
powershell.exe -ExecutionPolicy Bypass -NoProfile -File .\Uninstall-OrbApp.ps1On Detection Method, choose Use a custom script to detect the presence of this deployment type, set the script type to PowerShell, and paste:
$MinVersion = '1.5.0' $arp = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*' -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -eq 'Orb' -and $_.Publisher -like 'Orb Forge*' } | Select-Object -First 1 if (-not $arp) { exit 0 } if (-not (Test-Path 'C:\Program Files\Orb\Orb.exe')) { exit 0 } try { if ([version]$arp.DisplayVersion -ge [version]$MinVersion) { Write-Output "Installed $($arp.DisplayVersion)" } } catch { } exit 0On User Experience, set Installation behavior to Install for system, Logon requirement to Whether or not a user is logged on, and Installation program visibility to Hidden.
Detect the app through its Add/Remove Programs entry rather than the presence of C:\Program Files\Orb\Orb.exe. The app's Orb.exe carries no version resource, so no version rule is possible on the file. The Add/Remove Programs entry carries a version and is unambiguous.
If you deploy the installer directly rather than through the wrapper, use the full path in the uninstall command: "C:\Program Files\Orb\uninstall.exe" /S. A relative uninstall.exe /S fails, because the working directory is the client's content cache rather than the installation directory.
Distribute the content and deploy it the same way as the sensor.
Verify the deployment
In the console, select the application and review Deployments for installation status.
On a target device:
# Sensor
Get-Service Orb
& 'C:\Program Files\Orb Sensor\Orb.exe' version
# App
Get-Process OrbIn Orb Cloud, confirm the device appears in your Space and is reporting.
Useful client logs, in C:\Windows\CCM\Logs:
| Log | Shows |
|---|---|
AppEnforce.log |
Installation and uninstallation, including exit codes |
AppDiscovery.log |
Detection results |
AppIntentEval.log |
What the client has been told to install or remove |
DataTransferService.log |
Content download |
For the sensor, add /l*v C:\Windows\Temp\orb-sensor.log to the installation program while troubleshooting, to capture a verbose Windows Installer log.
Update Orb
Sensor. Import the newer MSI as a new application, configure it to supersede the current one with Uninstall unchecked, and deploy it. Windows Installer performs a major upgrade in place, and product-code detection reports the new version automatically.
Upgrading keeps the device's identity: it stays the same Orb in your Space rather than appearing as a duplicate, and its Deployment Token and configuration properties are preserved.
App. Replace Orb-installer.exe in the content source, update the distribution points, and raise $MinVersion in the detection script so clients re-evaluate.
Clients cache package content. After changing files in the content source, a client may keep running its cached copy while the deployment still reports success. Updating distribution points alone is not always enough — changing the detection script, or clearing the client cache, is what makes clients pick up new content.
Uninstall Orb
Change the deployment's Action from Install to Uninstall, or create a new deployment with the Uninstall action against the target collection.
Uninstalling the sensor removes the service, the program folder, the firewall rule and the Add/Remove Programs entry, and leaves C:\ProgramData\Orb in place. That folder holds the sensor's identity and Deployment Token, which is what allows a reinstall to return as the same Orb rather than creating a duplicate in your Space.
When you decommission or repurpose a device, remove C:\ProgramData\Orb as well. It contains the Deployment Token and the sensor's private key. Add PURGEDATA=1 to the uninstall program to remove it — note that a later installation then enrolls as a new Orb:
msiexec /x {ProductCode} /q PURGEDATA=1
Files and processes for endpoint security
Use this section to allow-list the Orb sensor in antivirus, EDR, application control (AppLocker, WDAC) and data loss prevention tools. It describes what the sensor MSI installs and what the sensor writes while it runs. It covers the sensor only, not the Orb app.
Code signing
The MSI, Orb.exe and update.ps1 are all Authenticode-signed with Orb Forge's EV code-signing certificate:
| Field | Value |
|---|---|
| Subject | CN=Orb Forge Inc, O=Orb Forge Inc, SERIALNUMBER=7541876, L=Wilmington, S=Delaware, C=US |
| Issuer | CN=SSL.com EV Code Signing Intermediate CA RSA R3, O=SSL Corp |
Allow by publisher (O=Orb Forge Inc) rather than by file hash or certificate thumbprint. The hash changes with every release and the thumbprint changes each time the certificate is renewed. The subject stays the same.
Processes
| Process | Runs as | When |
|---|---|---|
C:\Program Files\Orb Sensor\Orb.exe windowsservice |
LocalSystem (service Orb) |
Continuously, from boot. Restarts itself 60 seconds after a failure. Starts no child processes. |
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -File "C:\Program Files\Orb Sensor\update.ps1" |
SYSTEM, from the scheduled task Orb Sensor Update |
Every 4 hours, only when installed with AUTOUPDATE=1. |
msiexec.exe /i <downloaded MSI> /qn /norestart |
SYSTEM |
Only when update.ps1 finds a newer release. It starts msiexec through WMI (Win32_Process.Create) so the upgrade survives removal of the task it runs under. EDR tools that flag WMI process creation will report this. |
During installation and uninstallation, Windows Installer also runs the package's custom-action DLLs from C:\Windows\Installer\MSI*.tmp, and calls schtasks.exe and netsh.exe to manage the update task and remove legacy firewall rules.
Files
Program files, installed and removed by the MSI:
| Path | Purpose |
|---|---|
C:\Program Files\Orb Sensor\Orb.exe |
The sensor service and the orb command-line tool. |
C:\Program Files\Orb Sensor\update.ps1 |
Self-updater. Installed every time, but only scheduled when AUTOUPDATE=1. It checks HKLM\SOFTWARE\Orb\Sensor\AutoUpdate on each run and exits if updates are off. |
Data, in C:\ProgramData\Orb. The service writes these files as SYSTEM. The folder is kept on uninstall unless you pass PURGEDATA=1.
| Path | Purpose | Sensitive |
|---|---|---|
deployment_token.txt |
Your Deployment Token. Written by the MSI during installation from DEPLOYMENTTOKEN or DEPLOYMENTTOKENFILE, and read by the service to link to your Space. |
Yes |
private.key |
The Orb's private key (ECC, PEM). This is the device's identity in Orb Cloud. | Yes |
certificate.crt |
Client certificate for that key, issued by Orb Intermediate CA. Valid for 7 days and renewed automatically, so expect this file to be rewritten about once a week. | No |
remoteconfig.json |
Local copy of the configuration pushed from Orb Cloud. | No |
orbstore\filestore\ |
Local measurement database. It holds catalog.json, a filestore.lock, and one folder per dataset (for example scores_1m, responsiveness_1s, speed_results), partitioned by day into .jsonl files that are compressed to .jsonl.gz. Written continuously. |
No |
spool\ |
Queue for results that are waiting to be sent to Orb Cloud. | No |
logs\orb_YYYY-MM-DD.log |
Daily sensor log, one JSON object per line. | No |
On a test device, the folder grew to about 70 MB in its first day.
Updater working files, only present when AUTOUPDATE=1:
| Path | Purpose |
|---|---|
C:\Windows\Temp\OrbSensorUpdate-<random>\ |
Created for each update check, accessible only to SYSTEM and Administrators. Holds the downloaded MSI, update.log and msiexec.log. Folders older than 7 days are removed on the next run. |
The updater downloads only from https://pkgs.orb.net/stable/windows/latest/ (version.txt and orb-sensor-amd64.msi). It refuses to install any file whose Authenticode signature does not match the subject above.
Registry, firewall and scheduled task
| Item | Purpose |
|---|---|
HKLM\SYSTEM\CurrentControlSet\Services\Orb |
The service definition. |
HKLM\SOFTWARE\Orb\Sensor |
Version and AutoUpdate, read by update.ps1. LegacyCleanup marks that a scripted installation was migrated. |
HKLM\SOFTWARE\Orb\Sensor\Environment |
The configuration properties you set on the MSI, kept here so they survive upgrades. |
| Firewall rule Orb Sensor | Inbound, all profiles, for Orb.exe only. The sensor listens on TCP 7080 (the local Data API) and TCP/UDP 7443 (the measurement endpoint). |
| Scheduled task Orb Sensor Update | Present only with AUTOUPDATE=1. Runs update.ps1 as SYSTEM every 4 hours. |
Recommendations
- Treat
deployment_token.txtandprivate.keyas secrets. Anyone who has them can link a device to your Space, or impersonate this Orb. Keep them out of backups and support bundles that leave the device, and rotate the token in Orchestration if it leaks. - Exclude
C:\ProgramData\Orb\orbstorefrom real-time scanning if scanning causes high CPU. The sensor writes many small files there continuously. Leave the rest ofC:\ProgramData\Orbmonitored. - Do not quarantine or block
update.ps1on devices where you install withAUTOUPDATE=1. If Configuration Manager manages versions, leaveAUTOUPDATEat0and the script never runs.
Troubleshooting
The application installs but reports as failed
Detection is failing. For the sensor, confirm the deployment type's detection rule is the product code of the package you deployed; a new version has a new product code. For the app, check AppDiscovery.log, and if you see 0x87d00327 with PSSecurityException, set the PowerShell execution policy client setting to Bypass as described above.
The app is installed but does not appear in Orb Cloud
The app only reports while it is running, and it runs only in a user session. Confirm that C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\Orb.lnk exists and that a user has logged on since installation.
The sensor does not have this constraint: it runs as a service and reports without anyone logging in.
Orb does not link to my Space
- Confirm
C:\ProgramData\Orb\deployment_token.txtexists (sensor), or thatHKLM\SOFTWARE\Orb\MDM\OrbDeploymentTokenis set (app). - Confirm the token is still valid in Orchestration.
- Confirm the device can reach the internet.
If the token was rejected, the sensor MSI fails the installation immediately with 1603 and gives the reason in its verbose log, rather than installing a sensor that never links. If Orb Cloud is merely unreachable, installation succeeds and the device links when it next has connectivity.
Additional configuration
Both deliverables support the configuration options described in Orb Configuration. For the sensor, set them as MSI properties as described above. For the app, MDM settings are read from HKLM\SOFTWARE\Orb\MDM, where OrbDeviceNameOverride sets the name the device reports in your Space.
To deploy Orb with Microsoft Intune instead, see Microsoft Intune.