Mac Health Check 5.0.0 adds a dedicated AI skill for easier Mac Admin customization, historical Memory Pressure warnings, targeted post-remediation verification, Jamf Pro clock-skew detection and macOS 27 compatibility improvements
Version
5.0.1corrects Palo Alto Networks GlobalProtect VPN detection, and version5.0.2fixes a Mosyle Check-In error which could leaveSelf Servicestuck when Mosyle had not recorded a check-in date (thanks, @bigdoodr!)

Overview
Mac Health Check provides a practical, user-friendly, MDM-agnostic approach to surfacing Mac compliance information directly to end-users via an MDM’s self-service app.
Built using the open-source utility swiftDialog, the solution acts as a “heads-up display” presenting real-time system health and policy compliance status in a clear and interactive format.
Administrators can customize the user interface using swiftDialog’s visual capabilities, making the experience both informative and approachable.
The tool logs results for review, while not altering device configuration, and a “Silent” Operation Mode makes Mac Health Check ideal for IT visibility without end-user intrusion.
Mac Health Check version
4.0.0(and later) generates client-side JSON — leveraging new Inspect Mode features of swiftDialog3.1.0— which can optionally be delivered via Splunk HEC; version5.0.0(and later) requires swiftDialog3.1.1.4997(or later)






Use Cases
Mac Health Check is particularly valuable in IT support workflows, serving as an initial triage point for Tier 1 support, while also acting as a verification tool for Tier 2 teams both during and after remediation efforts.
Step 0 for Tier 1
- User has a working Internet connection
- User knows their directory credentials
- Mac can execute policies
- Validates Network Access Controls
Step 99 for Tier 2
- Initial assessment for support sessions
- Easily confirms remediation efforts with targeted rechecks 🎉
- Provides peace-of-mind for end-users
Silent Mode
- No dialog is presented to the end-user
- Silently performs all health checks and logs results
- Ideal for background compliance reporting
- Complements existing MDM compliance frameworks
Targeted Post-remediation Verification
New in version
5.0.0, targeted post-remediation verification helps both end-users and support representatives quickly validate remediation efforts were successful.
When a Self Service run reports warnings or failures and the end-user (or support representative) addresses the issue(s), instead of repeating every check (as with previous versions), Mac Health Check 5.0.0 re-runs only the sideways checks and merges the fresh results into the last full report. Confirming a fix takes seconds, rather than a complete health check. (See: Feature Request #103, thanks for the suggestion, @abercrombiejc-cloud!)
Slideshow
- Applies only to
Self Service;Silent,Debug,DevelopmentandTestbehave as before - The previous report (
/Library/Management/org.churchofjesuschrist/MacHealthCheck-Report.json) must come from aSelf ServiceorSilentrun on the same Mac, with the same MDM, check list and script version (so the first run after each upgrade is a full run), and its full-run baseline must be less than 36 hours old (targetedRecheckMaximumAgeSeconds); nightly Client-Side Cache reports also qualify - Rechecked results replace only their matching checks; all other results — and the original full-run timestamp — are preserved, so repeated rechecks never extend the 36-hour baseline
- The detached Inspect summary still presents every check, distinguishing the recent rechecks from the older full-run results
- On Jamf Pro, targeted rechecks also run Computer Inventory, so verified fixes reach the server, and send a Microsoft Teams or Slack webhook message (when configured) only when a rechecked status changes
- A missing, stale or mismatched report automatically falls back to a full run, while a healthy report less than 15 minutes old replays the cached summary instead
- Force a complete run with Parameter 11 (
forceFreshRun=true) or a root-owned trigger file:sudo touch /var/tmp/MacHealthCheck-Force-Fresh-Run
Presentation
Features
The following health checks and information reporting are included in version 5.0.2, which operates in Self Service mode by default. (Use Debug, Development or Test while testing; deploy with Self Service or Silent.)
Health Checks

🎉 New or improved in version 5.0.0, 5.0.1 or 5.0.2
- macOS Version
- Available Updates (including deferred, staged and DDM-enforced updates) 🎉
- System Integrity Protection
- Signed System Volume (SSV)
- Firewall
- FileVault Encryption
- Gatekeeper / XProtect
- Touch ID
- Password Hint (not run on Jamf Pro or Kandji)
- AirDrop
- AirPlay Receiver 🎉
- Bluetooth Sharing
- VPN Client 🎉
- Last Reboot
- Free Disk Space
- User’s Directory Size and Item Count
- Desktop
- Downloads
- Trash
- MDM Profile
- Entra ID Registration**
- MDM Certificate Expiration
- Apple Push Notification service 🎉
- Mosyle Check-In*** 🎉
- Jamf Pro Check-In** 🎉
- Jamf Pro Inventory**
- Clock Skew** 🎉
- Extended Network Checks
- Apple Push Notification Hosts
- Apple Device Management
- Apple Software and Carrier Updates
- Apple Certificate Validation
- Apple Identity and Content Services
- Jamf Hosts**
- App Auto-Patch 🎉
- Homebrew Status
- Electron Corner Mask 🔗 🎉
- Organizationally required Applications (e.g., Microsoft Teams)
- BeyondTrust Privilege Management*
- Cisco Umbrella*
- CrowdStrike Falcon*
- Palo Alto GlobalProtect* 🎉
- Wi-Fi Strength
- Memory Pressure 🎉
- Network Quality Test
- Computer Inventory**
*Requires external check (Jamf Pro only)
**Requires Jamf Pro
***Requires Mosyle
Each MDM runs its own list-item array: Jamf Pro runs 42 items, Mosyle 34, Addigy, Fleet, JumpCloud and Microsoft Intune 33, Filewave and Kandji 32, and the MDM-agnostic fallback 29.
Information Reporting

- IT Support
- Telephone
- Website
- Knowledge Base Article
- User Information
- Full Name
- User Name
- User ID
- Volume Owners
- Secure Token
- Location Services
- Microsoft OneDrive Sync Date
- Platform Single Sign-on Extension
- Computer Information
- macOS version (build)
- System Memory
- System Storage
- Dialog version
- Script version
- Computer Name
- Serial Number
- Wi-Fi SSID
- IP Address (first active network service)
- VPN IP Address
- Jamf Pro Information**
- Jamf Pro Computer ID
- Site
**Requires Jamf Pro and a configuration profile that uses Payload Variables for Configuration Profiles
Policy Log Reporting
- Warning when logged-in user is a member of
admin - Logged-in user full name, username and UID
- Security Mode
- DEP-allowed MDM Control
- Activation Lock
- Bootstrap Token
- Location Services
- SSH
- Microsoft OneDrive Sync Date
- Time Machine destinations and last backup date
- Battery Cycle Count
- Rosetta-required apps
- Wi-Fi SSID
- VPN status
- Network Time Server
- Jamf Pro Computer ID and Site (Jamf Pro only)
At the end of each run, Mac Health Check logs a one-line summary (wrapped below for readability), plus a second line on Jamf Pro:
MHC (5.0.1): 2026-10-14 08:15:42 - [NOTICE] WARNING: 'localadmin' IS A MEMBER OF 'admin'; User: macOS Server Administrator (localadmin) [503]; Security Mode: Full; DEP-allowed MDM Control: Enabled; Activation Lock: Disabled; Bootstrap Token supported on server: YES; Bootstrap Token escrowed to server: YES; Location Services: Enabled; SSH: On; Microsoft OneDrive Sync Date: Not Configured; Time Machine Backup Date: Not configured; Battery Cycle Count: 12; Rosetta-required apps: None detected; Wi-Fi: Liahona; VPN: None; Network Time Server: time.apple.com MHC (5.0.1): 2026-10-14 08:15:42 - [NOTICE] Jamf Pro Computer ID: 007; Site: Servers
Deployment

Deployment of Mac Health Check involves configuring organizational defaults, uploading the script to your MDM server, creating a policy to run it on-demand and testing to ensure proper output and behavior.
1. Local Test
Jumpstart your Mac Health Check implementation by first conducting a local test on a fully enrolled, non-production Mac
- Visit the Mac Health Check repository on GitHub
- Download the
mainbranch by selecting Code > Download ZIP

- In an elevated Terminal session, change to the downloaded
Mac-Health-Check-maindirectory
cd ~/Downloads/Mac-Health-Check-main
- Execute the
Mac-Health-Check.zshscript
zsh Mac-Health-Check.zsh


- Review the various checks and the static computer information (visible after clicking the Help button in the bottom, right-hand corner).
- Review the script’s output:
root@XDT8675309 Mac-Health-Check-main # zsh Mac-Health-Check.zsh
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] ###
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] # Mac Health Check (5.0.2)
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] # https://snelson.us/mhc
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] #
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] # Operation Mode: Self Service
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] ###
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT]
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] Initiating …
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] Dan K. Snelson MacBook Air (M2, 2022) (S/N XDT8675309)
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] Dan K. Snelson (dan) [502]
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] jq found; using jq for JSON validation and formatting.
MHC (5.0.2): 2026-10-19 04:42:13 - [NOTICE] Client-Side Cache: installing client-side script at /Library/Management/org.churchofjesuschrist/MHC.zsh
MHC (5.0.2): 2026-10-19 04:42:13 - [INFO] Client-Side Cache: generated LaunchDaemon plist validated at /Library/LaunchDaemons/org.churchofjesuschrist.MHC.plist
MHC (5.0.2): 2026-10-19 04:42:13 - [NOTICE] Client-Side Cache: client-side assets already current; install skipped.
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] swiftDialog version 3.1.0.4994 found; proceeding …
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] Forcible-quit for all other running dialogs …
MHC (5.0.2): 2026-10-19 04:42:13 - [INFO] The 'Dialog' process isn’t running.
MHC (5.0.2): 2026-10-19 04:42:13 - [PRE-FLIGHT] Complete
MHC (5.0.2): 2026-10-19 04:42:13 - [NOTICE] Current Elapsed Time: 0h:0m:2s
MHC (5.0.2): 2026-10-19 04:42:13 - [NOTICE] Operation Mode is Self Service; using MDM-specific dialogJSONFile.
MHC (5.0.2): 2026-10-19 04:42:15 - [INFO] dialogJSONFile verified: /var/tmp/dialogJSONFile_MHC.yCwp
MHC (5.0.2): 2026-10-19 04:42:15 - [INFO] Dock icon source: /var/tmp/dockicon.png
MHC (5.0.2): 2026-10-19 04:42:15 - [INFO] Launching dialog binary: /Library/Application Support/Dialog/Mac Health Check.app/Contents/MacOS/dialogcli
MHC (5.0.2): 2026-10-19 04:42:16 - [INFO] Dialog PID: 25564
MHC (5.0.2): 2026-10-19 04:42:17 - [NOTICE] Operation Mode is Self Service; using MDM-specific Health Checks.
MHC (5.0.2): 2026-10-19 04:42:17 - [NOTICE] Check macOS Version …
MHC (5.0.2): 2026-10-19 04:42:19 - OS Build, 25F80, ends with a number; proceeding with SOFA compliance check …
MHC (5.0.2): 2026-10-19 04:42:19 - Using cached SOFA data (age within 1d)
MHC (5.0.2): 2026-10-19 04:42:19 - Model Identifier: Mac14,2
MHC (5.0.2): 2026-10-19 04:42:19 - System Version: 26.5.1
MHC (5.0.2): 2026-10-19 04:42:19 - Latest Compatible macOS: Tahoe 26
MHC (5.0.2): 2026-10-19 04:42:21 - [INFO] macOS 26.5.1 (25F80)
MHC (5.0.2): 2026-10-19 04:42:22 - [NOTICE] Check Available Software Updates …
MHC (5.0.2): 2026-10-19 04:42:23 - [NOTICE] MDM Client Available OS Updates | Deferred Until
MHC (5.0.2): 2026-10-19 04:42:23 - [INFO] HumanReadableName = XProtectPayloads; | 2026-08-31 17:14:47 +0000";
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] DDM Resolver: source=currentApplicableDeclaration | date=Wed Jul 15 04:55:44 2026 | dateSource=padded | version=26.5.2 | build=(null)
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Found 3 update snapshot(s)
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Using Preboot UUID directory: /System/Volumes/Preboot/D1D5F7C8-B608-413F-9DFD-D0FFA24F074A
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Analyzing Preboot path: /System/Volumes/Preboot/D1D5F7C8-B608-413F-9DFD-D0FFA24F074A
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Listing contents of Preboot UUID directory:
total 0
drwxrwxrwx 4 root wheel 128 Jul 15 02:39 Library
drwxr-xr-x 4 root wheel 128 Jul 15 02:57 PreLoginData
drwxrwxrwx 3 root wheel 96 Jul 15 02:25 System
drwxr-xr-x 3 root wheel 96 Jul 15 03:00 Users
drwxrwxrwx 6 root wheel 192 Jul 15 02:54 boot
drwxrwxrwx 4 root wheel 128 Jul 15 02:47 cryptex1
drwxr-xr-x 3 root wheel 96 Jul 15 02:41 etc
drwxrwxrwx 11 root wheel 352 Jul 15 02:32 restore
drwxr-xr-x 80 _nsurlsessiond wheel 2560 Jul 15 02:54 restore-staged
drwxr-xr-x 4 root wheel 128 Jul 15 02:35 usr
drwxr-xr-x 3 root wheel 96 Jul 15 02:34 var
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Staged update detected: 26.57 GB in cryptex1
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Additional staged content: 1.59 GB in restore-staged
MHC (5.0.2): 2026-10-19 04:42:24 - [NOTICE] Update Staging Status: Fully staged
MHC (5.0.2): 2026-10-19 04:42:24 - [NOTICE] Update Size: 26.57 GB
MHC (5.0.2): 2026-10-19 04:42:24 - [NOTICE] Location: /System/Volumes/Preboot/D1D5F7C8-B608-413F-9DFD-D0FFA24F074A/cryptex1
MHC (5.0.2): 2026-10-19 04:42:24 - [INFO] Available Software Updates: macOS 26.5.2 (15-Jul-2026)
MHC (5.0.2): 2026-10-19 04:42:25 - [NOTICE] Check System Integrity Protection …
MHC (5.0.2): 2026-10-19 04:42:28 - [INFO] System Integrity Protection: Enabled
MHC (5.0.2): 2026-10-19 04:42:29 - [NOTICE] Check Signed System Volume …
MHC (5.0.2): 2026-10-19 04:42:32 - [INFO] Signed System Volume: Enabled
MHC (5.0.2): 2026-10-19 04:42:33 - [NOTICE] Check Firewall …
MHC (5.0.2): 2026-10-19 04:42:36 - [INFO] Firewall: Enabled
MHC (5.0.2): 2026-10-19 04:42:37 - [NOTICE] Check FileVault …
MHC (5.0.2): 2026-10-19 04:42:39 - [INFO] FileVault: Enabled
MHC (5.0.2): 2026-10-19 04:42:41 - [NOTICE] Check Gatekeeper / XProtect …
MHC (5.0.2): 2026-10-19 04:42:43 - [INFO] Gatekeeper / XProtect: Enabled
MHC (5.0.2): 2026-10-19 04:42:45 - [NOTICE] Check Touch ID …
MHC (5.0.2): 2026-10-19 04:42:48 - [INFO] Touch ID: Enabled & Enrolled (1 template(s))
MHC (5.0.2): 2026-10-19 04:42:49 - [NOTICE] Checking AirDrop Settings …
MHC (5.0.2): 2026-10-19 04:42:52 - [INFO] Run "defaults read /Users/dan/Library/Preferences/com.apple.sharingd.plist DiscoverableMode" as "502" …
MHC (5.0.2): 2026-10-19 04:42:52 - [ERROR] AirDrop Settings: Discoverable by Everyone (value: Everyone)
MHC (5.0.2): 2026-10-19 04:42:53 - [NOTICE] Checking AirPlay Receiver status …
MHC (5.0.2): 2026-10-19 04:42:56 - [INFO] Run "/usr/bin/defaults -currentHost read com.apple.controlcenter AirplayReceiverEnabled" as "502" …
MHC (5.0.2): 2026-10-19 04:42:56 - [INFO] Run "/usr/bin/defaults -currentHost read com.apple.controlcenter AirplayRecieverEnabled" as "502" …
MHC (5.0.2): 2026-10-19 04:42:56 - [INFO] Run "/usr/bin/defaults -currentHost read com.apple.controlcenter AirplayReceiverAdvertising" as "502" …
MHC (5.0.2): 2026-10-19 04:42:56 - [INFO] AirPlay Receiver: Disabled (key not found on macOS 26.5)
MHC (5.0.2): 2026-10-19 04:42:57 - [NOTICE] Checking Bluetooth Sharing status …
MHC (5.0.2): 2026-10-19 04:43:00 - [INFO] Run "defaults -currentHost read com.apple.Bluetooth PrefKeyServicesEnabled" as "502" …
MHC (5.0.2): 2026-10-19 04:43:00 - [INFO] Bluetooth Sharing: Disabled
MHC (5.0.2): 2026-10-19 04:43:01 - [NOTICE] Check GlobalProtect VPN Client …
MHC (5.0.2): 2026-10-19 04:43:02 - [INFO] GlobalProtect VPN Client Connected
MHC (5.0.2): 2026-10-19 04:43:03 - [NOTICE] Check Uptime …
MHC (5.0.2): 2026-10-19 04:43:06 - [INFO] Uptime: 49 mins
MHC (5.0.2): 2026-10-19 04:43:07 - [NOTICE] Check Free Disk Space …
MHC (5.0.2): 2026-10-19 04:43:10 - [INFO] Free Disk Space: 440.7 GB free (89.15% available)
MHC (5.0.2): 2026-10-19 04:43:11 - [NOTICE] Check Desktop directory size and item count …
MHC (5.0.2): 2026-10-19 04:43:14 - [INFO] Desktop: 2.2M (3 items) — 0% of disk
MHC (5.0.2): 2026-10-19 04:43:15 - [NOTICE] Check Downloads directory size and item count …
MHC (5.0.2): 2026-10-19 04:43:17 - [INFO] Downloads: 37M (1 items) — 0% of disk
MHC (5.0.2): 2026-10-19 04:43:19 - [NOTICE] Check Trash directory size and item count …
MHC (5.0.2): 2026-10-19 04:43:21 - [INFO] Trash: 35M (1 items) — 0% of disk
MHC (5.0.2): 2026-10-19 04:43:23 - [NOTICE] Check Jamf Pro MDM Profile …
MHC (5.0.2): 2026-10-19 04:43:25 - [INFO] Jamf Pro MDM Profile: Installed
MHC (5.0.2): 2026-10-19 04:43:27 - [NOTICE] Check Entra ID Registration …
MHC (5.0.2): 2026-10-19 04:43:29 - [INFO] Entra ID Registration: Registered (PSSO registration metadata detected for /Users/dan)
MHC (5.0.2): 2026-10-19 04:43:31 - [NOTICE] Check the expiration date of the Jamf Pro Certificate Authority …
MHC (5.0.2): 2026-10-19 04:43:33 - [INFO] Jamf Pro Certificate Authority Expiration: 09-Dec-2027
MHC (5.0.2): 2026-10-19 04:43:35 - [NOTICE] Check Apple Push Notification service …
MHC (5.0.2): 2026-10-19 04:43:41 - [INFO] Apple Push Notification service: 2026-10-19 04:29:17
MHC (5.0.2): 2026-10-19 04:43:42 - [NOTICE] Checking Last Jamf Pro check-in …
MHC (5.0.2): 2026-10-19 04:43:44 - [INFO] Last Jamf Pro check-in: 4:29 AM
MHC (5.0.2): 2026-10-19 04:43:46 - [NOTICE] Check Last Jamf Pro inventory update …
MHC (5.0.2): 2026-10-19 04:43:48 - [INFO] Last Jamf Pro inventory update: 4:29 AM
MHC (5.0.2): 2026-10-19 04:43:49 - [NOTICE] Check Apple Push Notification Hosts …
MHC (5.0.2): 2026-10-19 04:43:53 - [INFO] Apple Push Notification Hosts: courier.push.apple.com:5223 PASS; courier.push.apple.com:443 PASS; api.push.apple.com:443 PASS; api.push.apple.com:2197 PASS;
MHC (5.0.2): 2026-10-19 04:43:54 - [NOTICE] Check Apple Device Management …
MHC (5.0.2): 2026-10-19 04:43:59 - [INFO] Apple Device Management: albert.apple.com:443 PASS; captive.apple.com:80 PASS; captive.apple.com:443 PASS; gs.apple.com:443 PASS; humb.apple.com:443 PASS; static.ips.apple.com:80 PASS; static.ips.apple.com:443 PASS; sq-device.apple.com:443 PASS; tbsc.apple.com:443 PASS; time-ios.apple.com:123 PASS; time.apple.com:123 PASS; time-macos.apple.com:123 PASS; deviceenrollment.apple.com:443 PASS; deviceservices-external.apple.com:443 PASS; gdmf.apple.com:443 PASS; identity.apple.com:443 PASS; iprofiles.apple.com:443 PASS; mdmenrollment.apple.com:443 PASS; setup.icloud.com:443 PASS; vpp.itunes.apple.com:443 PASS;
MHC (5.0.2): 2026-10-19 04:44:00 - [NOTICE] Check Apple Software and Carrier Updates …
MHC (5.0.2): 2026-10-19 04:44:06 - [INFO] Apple Software and Carrier Updates: appldnld.apple.com:80 PASS; configuration.apple.com:443 PASS; gdmf.apple.com:443 PASS; gg.apple.com:80 PASS; gg.apple.com:443 PASS; gs.apple.com:80 PASS; gs.apple.com:443 PASS; ig.apple.com:443 PASS; mesu.apple.com:80 PASS; mesu.apple.com:443 PASS; oscdn.apple.com:80 PASS; oscdn.apple.com:443 PASS; osrecovery.apple.com:80 PASS; osrecovery.apple.com:443 PASS; skl.apple.com:443 PASS; swcdn.apple.com:80 PASS; swdist.apple.com:443 PASS; swdownload.apple.com:80 PASS; appldnld.apple.com.edgesuite.net:80 PASS; itunes.com:80 PASS; itunes.apple.com:443 PASS; updates-http.cdn-apple.com:80 PASS; updates.cdn-apple.com:443 PASS;
MHC (5.0.2): 2026-10-19 04:44:07 - [NOTICE] Check Apple Certificate Validation …
MHC (5.0.2): 2026-10-19 04:44:11 - [INFO] Apple Certificate Validation: certs.apple.com:80 PASS; certs.apple.com:443 PASS; crl.apple.com:80 PASS; crl.entrust.net:80 PASS; crl3.digicert.com:80 PASS; crl4.digicert.com:80 PASS; ocsp.apple.com:80 PASS; ocsp.digicert.cn:80 PASS; ocsp.digicert.com:80 PASS; ocsp.entrust.net:80 PASS; ocsp2.apple.com:443 PASS; valid.apple.com:443 PASS;
MHC (5.0.2): 2026-10-19 04:44:13 - [NOTICE] Check Apple Identity and Content Services …
MHC (5.0.2): 2026-10-19 04:44:17 - [INFO] Apple Identity and Content Services: appleid.apple.com:443 PASS; appleid.cdn-apple.com:443 PASS; idmsa.apple.com:443 PASS; gsa.apple.com:443 PASS; app-site-association.cdn-apple.com:443 PASS; app-site-association.networking.apple:443 PASS; audiocontentdownload.apple.com:80 PASS; audiocontentdownload.apple.com:443 PASS; devimages-cdn.apple.com:80 PASS; devimages-cdn.apple.com:443 PASS; download.developer.apple.com:80 PASS; download.developer.apple.com:443 PASS; playgrounds-assets-cdn.apple.com:443 PASS; playgrounds-cdn.apple.com:443 PASS; sylvan.apple.com:80 PASS; sylvan.apple.com:443 PASS;
MHC (5.0.2): 2026-10-19 04:44:18 - [NOTICE] Check Jamf Hosts …
MHC (5.0.2): 2026-10-19 04:44:27 - [INFO] Jamf Hosts: jamf.com:443 PASS; test.jamfcloud.com:443 PASS; account.jamf.com:443 PASS; idpcs.jamf.com:443 PASS; account-cdn.jamf.com:443 PASS; cdn.mfe.jamf.io:443 PASS; api.apigw.jamf.com:443 PASS; us.apigw.jamf.com:443 PASS; eu.apigw.jamf.com:443 PASS; apac.apigw.jamf.com:443 PASS; appinstallers-packages.services.jamfcloud.com:443 PASS; registration.cloudconnector.gov.services.jamfcloud.com:443 PASS; registration.cloudconnector.services.jamfcloud.com:443 PASS; ics.services.jamfcloud.com:443 PASS; csa.services.jamfcloud.com:443 PASS; jcds.apne1.inf.jamf.one:443 PASS; jcds.apse2.inf.jamf.one:443 PASS; jcds.euw2.inf.jamf.one:443 PASS; jcds.euc1.inf.jamf.one:443 PASS; jcds.use1.inf.jamf.one:443 PASS; packages.soup.services.jamfcloud.com:443 PASS; www.jamfroutines.com:443 PASS; icon-staging-production-use1-ics-application.s3.amazonaws.com:443 PASS; clientstream.launchdarkly.com:443 PASS; mobile.launchdarkly.com:443 PASS; app.launchdarkly.com:443 PASS; nom.telemetrydeck.com:443 PASS;
MHC (5.0.2): 2026-10-19 04:44:29 - [NOTICE] Checking App Auto-Patch last run …
MHC (5.0.2): 2026-10-19 04:44:31 - [INFO] App Auto-Patch last run: Today
MHC (5.0.2): 2026-10-19 04:44:32 - [NOTICE] Check Homebrew Status …
MHC (5.0.2): 2026-10-19 04:44:35 - [INFO] Homebrew Status: Not installed
MHC (5.0.2): 2026-10-19 04:44:36 - [NOTICE] Check Electron Corner Mask …
MHC (5.0.2): 2026-10-19 04:44:39 - [INFO] Electron Corner Mask: No Electron-based apps detected.
MHC (5.0.2): 2026-10-19 04:44:40 - [NOTICE] Internal Check: /Applications/Microsoft Teams.app …
MHC (5.0.2): 2026-10-19 04:44:43 - [INFO] Microsoft Teams installed
MHC (5.0.2): 2026-10-19 04:44:46 - [NOTICE] External Check: /Applications/PrivilegeManagement.app …
MHC (5.0.2): 2026-10-19 04:44:55 - [INFO] PrivilegeManagement running
MHC (5.0.2): 2026-10-19 04:44:56 - [NOTICE] External Check: /Applications/Cisco/Cisco Secure Client.app …
MHC (5.0.2): 2026-10-19 04:45:04 - [INFO] Cisco Secure Client running
MHC (5.0.2): 2026-10-19 04:45:05 - [NOTICE] External Check: /Applications/Falcon.app …
MHC (5.0.2): 2026-10-19 04:45:14 - [INFO] Falcon running
MHC (5.0.2): 2026-10-19 04:45:15 - [NOTICE] External Check: /Applications/GlobalProtect.app …
MHC (5.0.2): 2026-10-19 04:45:23 - [INFO] GlobalProtect running
MHC (5.0.2): 2026-10-19 04:45:25 - [NOTICE] Check Wi-Fi Signal …
MHC (5.0.2): 2026-10-19 04:45:28 - [INFO] Wi-Fi Signal: Excellent (-35 dBm)
MHC (5.0.2): 2026-10-19 04:45:29 - [NOTICE] Check Network Quality …
MHC (5.0.2): 2026-10-19 04:45:29 - [INFO] Using cached Network Quality Test
MHC (5.0.2): 2026-10-19 04:45:30 - [INFO] Download: 526.44 Mbps, Responsiveness: 996.0095825195312;
MHC (5.0.2): 2026-10-19 04:45:31 - [NOTICE] Update Computer Inventory …
MHC (5.0.2): 2026-10-19 04:45:31 - [NOTICE] Including '-endUsername' in 'jamf recon' (source: Platform SSOe; value: danksnelson)
MHC (5.0.2): 2026-10-19 04:46:08 - [INFO] Update Computer Inventory: Completed "jamf recon -endUsername danksnelson"
MHC (5.0.2): 2026-10-19 04:46:10 - [QUIT] Exiting …
MHC (5.0.2): 2026-10-19 04:46:10 - [NOTICE] User: Dan K. Snelson (dan) [502]; Security Mode: Full; DEP-allowed MDM Control: Enabled; Activation Lock: Disabled; Bootstrap Token supported on server: YES; Bootstrap Token escrowed to server: YES; Location Services: Enabled; SSH: On; Microsoft OneDrive Sync Date: Not Configured; Time Machine Backup Date: Not configured; Battery Cycle Count: 15; Rosetta-required apps: None detected; Wi-Fi: NO SIGNAL; VPN: Connected 10.254.97.89; Network Time Server: time.apple.com
MHC (5.0.2): 2026-10-19 04:46:10 - [NOTICE] Jamf Pro Computer ID: ; Site:
MHC (5.0.2): 2026-10-19 04:46:11 - [ERROR] Available Updates; AirDrop
MHC (5.0.2): 2026-10-19 04:46:11 - [NOTICE] Generating Splunk JSON report …
MHC (5.0.2): 2026-10-19 04:46:11 - [NOTICE] Splunk Reporting: local report written to /var/tmp/MacHealthCheck-Report.json
MHC (5.0.2): 2026-10-19 04:46:11 - [NOTICE] Splunk Reporting: test mode enabled; skipping Splunk HEC transmission.
MHC (5.0.2): 2026-10-19 04:46:13 - [NOTICE] Inspect Summary: wrote /var/tmp/MacHealthCheck-Inspect-Compliance.plist.
MHC (5.0.2): 2026-10-19 04:46:13 - [NOTICE] Inspect Summary: wrote /var/tmp/MacHealthCheck-Inspect-Config.json.
MHC (5.0.2): 2026-10-19 04:46:13 - [NOTICE] Inspect Summary: launched detached Preset 6 summary (PID 32917; log /var/tmp/MacHealthCheck-Inspect-Summary.log).
MHC (5.0.2): 2026-10-19 04:46:14 - [NOTICE] Inspect Summary: detached Preset 6 summary launched; retaining the existing completion countdown on the main dialog.
MHC (5.0.2): 2026-10-19 04:47:12 - [NOTICE] Total Elapsed Time: 0h:5m:1s
MHC (5.0.2): 2026-10-19 04:47:12 - [QUIT] Good manners don’t cost nothing, do they, eh?
- Wait for all checks to complete, then review the client-side report:



- Remediate one or more findings (optional), then re-execute the
Mac-Health-Check.zshscript
zsh Mac-Health-Check.zsh
- Observe the second run, which depends on the results of the first:
- Warnings or failures: only those checks are re-run (see: Targeted Post-remediation Verification)
- Healthy (and less than 15 minutes old): the cached report is immediately displayed
root@XDT8675309 Mac-Health-Check-main # zsh Mac-Health-Check.zsh MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] Created specified scriptLog: /var/log/org.churchofjesuschrist.log MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] ### MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] # Mac Health Check (5.0.1) MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] # https://snelson.us/mhc MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] # MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] # Operation Mode: Self Service MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] ### MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] Initiating … MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] Dan K. Snelson MacBook Air (M2, 2022) (S/N XDT8675309) MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] Dan K. Snelson (dan) [502] MHC (5.0.1): 2026-10-19 04:34:29 - [PRE-FLIGHT] jq found; using jq for JSON validation and formatting. MHC (5.0.1): 2026-10-19 04:34:29 - [NOTICE] Client-Side Cache: installing client-side script at /Library/Management/org.churchofjesuschrist/MHC.zsh MHC (5.0.1): 2026-10-19 04:34:29 - [INFO] Client-Side Cache: generated LaunchDaemon plist validated at /Library/LaunchDaemons/org.churchofjesuschrist.MHC.plist MHC (5.0.1): 2026-10-19 04:34:29 - [NOTICE] Client-Side Cache: installed client-side script and LaunchDaemon org.churchofjesuschrist.MHC. MHC (5.0.1): 2026-10-19 04:34:30 - [PRE-FLIGHT] swiftDialog version 3.1.0.4994 found; proceeding … MHC (5.0.1): 2026-10-19 04:34:30 - [PRE-FLIGHT] Forcible-quit for all other running dialogs … MHC (5.0.1): 2026-10-19 04:34:30 - [INFO] The 'Dialog' process isn’t running. MHC (5.0.1): 2026-10-19 04:34:30 - [PRE-FLIGHT] Complete MHC (5.0.1): 2026-10-19 04:34:30 - [NOTICE] Inspect Summary Replay: launching cached Preset 6 summary from the last 900 seconds. MHC (5.0.1): 2026-10-19 04:34:30 - [NOTICE] Inspect Summary: launched detached Preset 6 summary (PID 24098; log /var/tmp/MacHealthCheck-Inspect-Summary.log). MHC (5.0.1): 2026-10-19 04:34:30 - [QUIT] Replayed cached inspect summary.

2. Customize Variables
Customize variables for your environment
- Review and adjust the Global Variables and Script Parameters as required for your environment
scriptLog(i.e., the location of your client-side logs)operationMode(i.e., defaults toSelf Service; useDebug,DevelopmentorTestwhile testing, andSelf ServiceorSilentin production)webhookURL(i.e., Microsoft Teams or Slack Webhook URL; beginning in5.0.0, deploy it — along with any Splunk HEC token — in the root-only/Library/Management/org.churchofjesuschrist/MacHealthCheck-Secrets.plistand leave Parameter 5 blank)
####################################################################################################
#
# Global Variables
#
####################################################################################################
# `/usr/local/bin` is intentionally excluded: Homebrew can make it user-writable, and this script runs as root
# (swiftDialog, Jamf and `jq` are called through the root-owned absolute paths resolved below)
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
function isTrustedRootPath() {
local candidatePath="${1}"
local resolvedPath=""
local pathComponent=""
local pathComponentMode=""
[[ -n "${candidatePath}" ]] && [[ -e "${candidatePath}" ]] || return 1
resolvedPath="${candidatePath:A}"
[[ -f "${resolvedPath}" ]] || return 1
# The resolved file and every parent directory must be root-owned and not group- or world-writable
# (a sticky directory such as `/private/var/tmp` is accepted because other users cannot replace root's entries;
# `%Mp%Lp` keeps the sticky bit, which `%Lp` alone drops)
pathComponent="${resolvedPath}"
while [[ -n "${pathComponent}" ]]; do
[[ "$( stat -f %u "${pathComponent}" 2>/dev/null )" == "0" ]] || return 1
pathComponentMode="$( stat -f %Mp%Lp "${pathComponent}" 2>/dev/null )"
[[ "${pathComponentMode}" == <-> ]] || return 1
if (( ( 8#${pathComponentMode} & 8#022 ) != 0 )); then
[[ -d "${pathComponent}" ]] && (( ( 8#${pathComponentMode} & 8#1000 ) != 0 )) || return 1
fi
[[ "${pathComponent}" == "/" ]] && break
pathComponent="${pathComponent:h}"
done
return 0
}
# jq: prefer the macOS-bundled binary (macOS 15+); otherwise accept only a root-owned install
jqBinary=""
for jqCandidate in "/usr/bin/jq" "/usr/local/bin/jq" "/opt/homebrew/bin/jq"; do
if [[ -x "${jqCandidate}" ]] && isTrustedRootPath "${jqCandidate}"; then
jqBinary="${jqCandidate}"
break
fi
done
unset jqCandidate
if [[ -n "${jqBinary}" ]] && [[ "${jqBinary}" != "/usr/bin/jq" ]]; then
function jq() { "${jqBinary}" "$@"; }
fi
# Script Version
scriptVersion="5.0.2"
# Client-side Log
scriptLog="/var/log/org.churchofjesuschrist.log"
# Load is-at-least for version comparison
autoload -Uz is-at-least
# Minimum Required Version of swiftDialog
swiftDialogMinimumRequiredVersion="3.1.1.4997"
# Force locale to English (so `date` does not error on localization formatting)
LANG="en_us_88591"
# Elapsed Time
SECONDS="0"
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Parameters
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Parameter 4: Operation Mode [ Debug | Development | Self Service | Silent | Test ]
operationMode="${4:-"Self Service"}"
# Parameter 5: Microsoft Teams or Slack Webhook URL [ Leave blank to disable (default) | https://microsoftTeams.webhook.com/URL | https://hooks.slack.com/services/URL ]
webhookURL="${5:-""}"
- Set your preferred Organization Variables, some of which include:
organizationBrandingBannerURL(i.e., the URL of your banner)organizationOverlayiconURL(i.e., the URL of your Self Service branding icon)organizationDefaultsDomain(i.e., for External Checks)organizationColorScheme(i.e., your organization’s corporate colors)previousMinorOS(i.e., the number of previous minor OS versions which can pass the OS health check; thanks, @robjschroeder!)allowedMinimumFreeDiskPercentage(i.e., the allowed minimum percentage of free disk space)allowedMaximumDirectoryPercentage(i.e., the allowed maximum percentage of disk space for user directories such as Desktop, Downloads and Trash)networkQualityTestMaximumAge(i.e., frequency with which the time-intensive Network Quality Test should be executed)allowedUptimeMinutes(i.e., the allowed number of minutes since the last reboot)excessiveUptimeAlertStyle(i.e., should excessive uptime result in a “warning” or “error”?)vpnClientVendor(i.e., your organization’s VPN client:none,paloalto,ciscoortailscale)memoryPressureLookbackDays/memoryPressureRequiredAdverseDays(i.e., the number of days of Memory Pressure history to review, and the number of distinct days with yellow or red pressure required for a warning)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Organization Variables
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Script Human-readable Name
humanReadableScriptName="Mac Health Check"
# Organization's Script Name
organizationScriptName="MHC"
# Organization's Reverse Domain Name Notation (i.e., com.company.division; used for plist domains)
reverseDomainNameNotation="org.churchofjesuschrist"
# Client-side Deployment
# Organization's Directory (i.e., where client-side scripts reside)
organizationDirectory="/Library/Management/${reverseDomainNameNotation}"
clientSideScriptPath="${organizationDirectory}/${organizationScriptName}.zsh"
memoryPressureHistoryPath="${organizationDirectory}/MacHealthCheck-MemoryPressure-History.jsonl"
# LaunchDaemon Name & Path
launchDaemonLabel="${reverseDomainNameNotation}.${organizationScriptName}"
launchDaemonPath="/Library/LaunchDaemons/${launchDaemonLabel}.plist"
clientSideSkipChecks="false"
clientSideMaximumCacheAgeSeconds="129600"
currentScriptPath="${0:A}"
forceFreshRunTriggerFilePath="/var/tmp/MacHealthCheck-Force-Fresh-Run"
forceFreshRunDetected="false"
forceFreshRunSource="not_requested"
function isTrustedForceFreshRunTrigger() {
# Honor only a root-owned regular file; any local user can create files in world-writable `/var/tmp`
[[ -f "${forceFreshRunTriggerFilePath}" ]] && [[ ! -L "${forceFreshRunTriggerFilePath}" ]] \
&& [[ "$( stat -f %u "${forceFreshRunTriggerFilePath}" 2>/dev/null )" == "0" ]]
}
function removeUntrustedForceFreshRunTrigger() {
if { [[ -e "${forceFreshRunTriggerFilePath}" ]] || [[ -L "${forceFreshRunTriggerFilePath}" ]]; } \
&& ! isTrustedForceFreshRunTrigger; then
[[ $(id -u) -eq 0 ]] && rm -f -- "${forceFreshRunTriggerFilePath}" 2>/dev/null
return 0
fi
return 1
}
# Per-run, root-owned temporary directory for downloaded icons and other transient files
# (`mktemp -d` creates a unique directory that local users cannot pre-plant or redirect)
runtimeTemporaryDirectory="$( mktemp -d "/var/tmp/${organizationScriptName}.XXXXXX" 2>/dev/null )"
if [[ -z "${runtimeTemporaryDirectory}" ]] || [[ ! -d "${runtimeTemporaryDirectory}" ]]; then
echo "Error: Unable to create a per-run temporary directory; exiting."
exit 1
fi
chmod 755 "${runtimeTemporaryDirectory}" 2>/dev/null
trap 'rm -rf -- "${runtimeTemporaryDirectory}"' EXIT
# Optional root-only reporting secrets file (keeps the Splunk HEC token and webhook URL out of the process list)
# Keys: `splunkHECToken`, `webhookURL`; must be a root-owned, `600` regular file inside `organizationDirectory`
reportingSecretsPath="${organizationDirectory}/MacHealthCheck-Secrets.plist"
splunkHECTokenSource="not configured"
webhookURLSource="not configured"
reportingSecretsFileStatus="missing"
# Allow Parameters 5 and 8 to supply reporting secrets [ true | false (default) ]
# (Legacy opt-in only; parameter values remain visible to local users in the process list)
allowParameterSecrets="false"
function refreshReportingSecretFlags() {
webhookConfigured="false"
webhookService="teams"
[[ -n "${webhookURL}" ]] && webhookConfigured="true"
[[ "${webhookURL}" == *"slack"* ]] && webhookService="slack"
splunkHECTokenConfigured="false"
[[ -n "${splunkHECToken}" ]] && splunkHECTokenConfigured="true"
}
function loadReportingSecrets() {
local secretsFileMode=""
local secretsDirectoryMode=""
local secretValue=""
# Keep secret values out of `set -x` output
setopt localoptions noxtrace
[[ "${splunkHECTokenConfigured}" == "true" ]] && splunkHECTokenSource="Parameter 8"
[[ "${webhookConfigured}" == "true" ]] && webhookURLSource="Parameter 5"
if [[ ! -e "${reportingSecretsPath}" ]] && [[ ! -L "${reportingSecretsPath}" ]]; then
return 0
fi
secretsFileMode="$( stat -f %Lp "${reportingSecretsPath}" 2>/dev/null )"
secretsDirectoryMode="$( stat -f %Lp "${organizationDirectory}" 2>/dev/null )"
if [[ -L "${reportingSecretsPath}" ]] || [[ ! -f "${reportingSecretsPath}" ]] \
|| [[ "$( stat -f %u "${reportingSecretsPath}" 2>/dev/null )" != "0" ]] \
|| [[ "${secretsFileMode}" != <-> ]] || (( ( 8#${secretsFileMode} & 8#077 ) != 0 )) \
|| [[ -L "${organizationDirectory}" ]] || [[ "$( stat -f %u "${organizationDirectory}" 2>/dev/null )" != "0" ]] \
|| [[ "${secretsDirectoryMode}" != <-> ]] || (( ( 8#${secretsDirectoryMode} & 8#022 ) != 0 )); then
reportingSecretsFileStatus="untrusted"
return 1
fi
reportingSecretsFileStatus="trusted"
secretValue="$( /usr/libexec/PlistBuddy -c "Print :splunkHECToken" "${reportingSecretsPath}" 2>/dev/null )"
if [[ -n "${secretValue}" ]]; then
[[ "${splunkHECTokenSource}" == "Parameter 8" ]] && splunkHECTokenSource="secrets file (Parameter 8 ignored)" || splunkHECTokenSource="secrets file"
splunkHECToken="${secretValue}"
fi
secretValue="$( /usr/libexec/PlistBuddy -c "Print :webhookURL" "${reportingSecretsPath}" 2>/dev/null )"
if [[ -n "${secretValue}" ]]; then
[[ "${webhookURLSource}" == "Parameter 5" ]] && webhookURLSource="secrets file (Parameter 5 ignored)" || webhookURLSource="secrets file"
webhookURL="${secretValue}"
fi
# Refresh the secret-free configuration flags
refreshReportingSecretFlags
return 0
}
function enforceReportingSecretsSource() {
# Keep secret values out of `set -x` output
setopt localoptions noxtrace
[[ "${allowParameterSecrets}" == "true" ]] && return 0
# Fail closed: discard reporting secrets supplied only through script parameters
if [[ "${splunkHECTokenSource}" == "Parameter 8" ]]; then
splunkHECToken=""
splunkHECTokenSource="Parameter 8 (rejected)"
fi
if [[ "${webhookURLSource}" == "Parameter 5" ]]; then
webhookURL=""
webhookURLSource="Parameter 5 (rejected)"
fi
refreshReportingSecretFlags
}
loadReportingSecrets
enforceReportingSecretsSource
# Splunk and JSON reporting defaults
# (Persistent root-written state lives in the root-owned `organizationDirectory`, never in world-writable `/var/tmp`)
splunkJSONReportPath="${organizationDirectory}/MacHealthCheck-Report.json"
splunkJSONReportLockDirectory="${organizationDirectory}/MacHealthCheck-Report.lock"
cachedReportJSON=""
cachedReportModificationEpoch="0"
cachedReportAgeSeconds="0"
cachedReportValidationStatus="not_checked"
function isProductionReportOperationMode() {
case "${1}" in
"Self Service" | "Silent" ) return 0 ;;
* ) return 1 ;;
esac
}
function validateCachedSplunkReport() {
local cachedReportPath="${1:-${splunkJSONReportPath}}"
cachedReportJSON=""
cachedReportModificationEpoch="0"
cachedReportAgeSeconds="0"
cachedReportValidationStatus="missing"
if [[ ! -f "${cachedReportPath}" ]] && [[ ! -L "${cachedReportPath}" ]]; then
return 1
fi
# Only trust a root-owned regular file (never a symlink or a file a local user could have planted)
if [[ -L "${cachedReportPath}" ]] || [[ ! -f "${cachedReportPath}" ]] \
|| [[ "$( stat -f %u "${cachedReportPath}" 2>/dev/null )" != "0" ]]; then
cachedReportValidationStatus="untrusted_owner"
return 1
fi
cachedReportModificationEpoch=$( stat -f %m "${cachedReportPath}" 2>/dev/null )
if [[ "${cachedReportModificationEpoch}" != <-> ]] || (( cachedReportModificationEpoch <= 0 )); then
cachedReportValidationStatus="invalid_mtime"
return 1
fi
cachedReportJSON="$( < "${cachedReportPath}" )"
if ! printf '%s' "${cachedReportJSON}" | jq -e . >/dev/null 2>&1; then
cachedReportValidationStatus="invalid_json"
return 1
fi
# Never upload a report produced by a non-production mode (e.g., `Test` marks every check successful)
if ! isProductionReportOperationMode "$( printf '%s' "${cachedReportJSON}" | jq -r '.metadata.operationMode // empty' 2>/dev/null )"; then
cachedReportValidationStatus="non_production_mode"
return 1
fi
local cachedReportRunScope=""
local cachedReportFullRunEpoch=""
cachedReportRunScope="$( printf '%s' "${cachedReportJSON}" | jq -r '.metadata.runScope // "legacy"' 2>/dev/null )"
if [[ "${cachedReportRunScope}" == "targeted" ]]; then
cachedReportFullRunEpoch="$( printf '%s' "${cachedReportJSON}" | jq -r '.metadata.fullRunTimestampEpoch // empty' 2>/dev/null )"
if [[ "${cachedReportFullRunEpoch}" != <-> ]] || (( cachedReportFullRunEpoch <= 0 )); then
cachedReportValidationStatus="invalid_full_run_timestamp"
return 1
fi
cachedReportAgeSeconds=$(( $( date +%s ) - cachedReportFullRunEpoch ))
else
cachedReportAgeSeconds=$(( $( date +%s ) - cachedReportModificationEpoch ))
fi
if (( cachedReportAgeSeconds < 0 || cachedReportAgeSeconds >= clientSideMaximumCacheAgeSeconds )); then
cachedReportValidationStatus="stale"
return 1
fi
cachedReportValidationStatus="valid"
return 0
}
splunkOperationModeRequested="${splunkOperationMode}"
splunkOperationModeUnrecognized="false"
case "${splunkOperationMode:l}" in
"off" )
splunkOperationMode="off"
;;
"test" )
splunkOperationMode="test"
;;
"production" )
splunkOperationMode="production"
;;
* )
# Fail safe: an unrecognized value (e.g., a typo) must never enable production reporting
splunkOperationModeUnrecognized="true"
splunkOperationMode="test"
;;
esac
if [[ "${operationMode}" == "Silent" ]] && [[ "${splunkOperationMode}" == "production" ]]; then
suppressNonSplunkConsoleLogging="true"
if { : >> "${scriptLog}" } 2>/dev/null; then
exec 2>> "${scriptLog}"
fi
else
suppressNonSplunkConsoleLogging="false"
fi
function clientSideEarlyLog() {
local messageText="${1}"
messageText="${messageText//$'\r'/ }"
messageText="${messageText//$'\n'/; }"
local logEntry="${organizationScriptName} (${scriptVersion}): $( date +%Y-%m-%d\ %H:%M:%S ) - [NOTICE] Client-Side Cache: ${messageText}"
printf '%s\n' "${logEntry}" >> "${scriptLog}" 2>/dev/null
if [[ "${suppressNonSplunkConsoleLogging}" != "true" ]]; then
printf '%s\n' "Client-Side Cache: ${messageText}"
fi
}
# Reporting-first `Silent` cannot succeed without an HEC token; exit before slow discovery so a rejected
# Parameter 8 value spends as little time as possible in the process list
if [[ "${operationMode}" == "Silent" ]] && [[ "${splunkOperationMode}" == "production" ]] \
&& [[ "${splunkHECTokenSource}" == "Parameter 8 (rejected)" ]] && [[ "${splunkHECTokenConfigured}" != "true" ]]; then
printf '%s\n' "${organizationScriptName} (${scriptVersion}): $( date +%Y-%m-%d\ %H:%M:%S ) - [ERROR] Splunk Reporting: rejected Splunk HEC token supplied through Parameter 8; store it in ${reportingSecretsPath} (root:wheel, mode 600) and clear Parameters 5 and 8. Exiting before health checks." >> "${scriptLog}" 2>/dev/null
printf '%s\n' "Splunk Reporting: rejected Splunk HEC token supplied through Parameter 8; store it in ${reportingSecretsPath} and clear Parameters 5 and 8. Exiting before health checks."
exit 1
fi
# Client-Side Cache version check
if [[ "${operationMode}" == "Silent" ]] && [[ "${splunkOperationMode}" == "production" ]]; then
if removeUntrustedForceFreshRunTrigger; then
clientSideEarlyLog "Ignored untrusted Force Fresh Run trigger at ${forceFreshRunTriggerFilePath} (must be a root-owned regular file)."
fi
if isTrustedForceFreshRunTrigger || [[ "${forceFreshRun:l}" == "true" ]]; then
forceFreshRunDetected="true"
if isTrustedForceFreshRunTrigger && [[ "${forceFreshRun:l}" == "true" ]]; then
forceFreshRunSource="trigger file and Parameter 11"
elif isTrustedForceFreshRunTrigger; then
forceFreshRunSource="trigger file"
else
forceFreshRunSource="Parameter 11"
fi
clientSideSkipChecks="false"
clientSideEarlyLog "FORCE FRESH RUN triggered via ${forceFreshRunSource} — bypassing cache and forcing complete health check run."
if isTrustedForceFreshRunTrigger; then
rm -f "${forceFreshRunTriggerFilePath}"
fi
if [[ -f "${splunkJSONReportPath}" ]]; then
rm -f "${splunkJSONReportPath}"
clientSideEarlyLog "Removed cached Splunk report at ${splunkJSONReportPath} before forced run."
fi
elif [[ "${currentScriptPath}" == "${clientSideScriptPath}" ]]; then
clientSideEarlyLog "Running from client-side script path; skipping cached-upload shortcut."
elif [[ -f "${clientSideScriptPath}" ]]; then
clientVersion=$( grep -m1 '^scriptVersion=' "${clientSideScriptPath}" 2>/dev/null | awk -F'"' '{print $2}' )
if [[ "${clientVersion}" == "${scriptVersion}" ]]; then
if validateCachedSplunkReport "${splunkJSONReportPath}"; then
clientSideSkipChecks="true"
clientSideEarlyLog "Client-side script version matches (${scriptVersion}); cached report is valid and ${cachedReportAgeSeconds}s old. Skipping health checks."
else
case "${cachedReportValidationStatus}" in
"missing" )
clientSideEarlyLog "Client-side script version matches (${scriptVersion}) but no cached report exists. Falling back to full health check."
;;
"invalid_json" )
clientSideEarlyLog "Cached report exists but is invalid JSON. Falling back to full health check."
;;
"stale" )
clientSideEarlyLog "Cached report is stale (${cachedReportAgeSeconds}s old; maximum ${clientSideMaximumCacheAgeSeconds}s). Falling back to full health check."
;;
* )
clientSideEarlyLog "Cached report could not be validated (${cachedReportValidationStatus}). Falling back to full health check."
;;
esac
fi
else
clientSideEarlyLog "Version mismatch (client=${clientVersion:-not found}, server=${scriptVersion}). Running full health check."
fi
else
clientSideEarlyLog "Client-side script not found at ${clientSideScriptPath}. Running full health check."
fi
fi
# Organization's Self Service Marketing Name
organizationSelfServiceMarketingName="Workforce App Store"
# Organization's Boilerplate Compliance Message
organizationBoilerplateComplianceMessage="Meets organizational standards"
# Organization's Branding Banner URL
organizationBrandingBannerURL="https://img.freepik.com/free-photo/black-wall-texture_1194-5564.jpg" # [Image by rawpixel.com on Freepik](https://www.freepik.com/author/rawpixel-com)
# Organization's Overlayicon URL
organizationOverlayiconURL="/System/Library/CoreServices/Apple Diagnostics.app"
# Enable Dock integration in non-Silent modes [ true | false ]
enableDockIntegration="true"
# Organization's Dock Icon URL / Path [ default | file://path | /local/path | https://... ]
dockIcon="https://usw2.ics.services.jamfcloud.com/icon/hash_08f287b1d7a9da36b733c0784031a4943bef3b82a2981eb937ab2f5b2bd55e91"
# Organization's Defaults Domain for External Checks
organizationDefaultsDomain="org.churchofjesuschrist.external"
# Organization's Color Scheme
if [[ $( defaults read "/Users/$(stat -f %Su /dev/console)/Library/Preferences/.GlobalPreferences.plist" AppleInterfaceStyle 2>/dev/null ) == "Dark" ]]; then
# Dark Mode
organizationColorScheme="weight=semibold,colour1=#D1D5DC,colour2=#F5F5F5"
else
# Light Mode
organizationColorScheme="weight=semibold,colour1=#18181B,colour2=#4D4D56"
fi
# Status Colors
statusColorSuccess="#65C466"
statusColorFail="#EB4C46"
statusColorError="#F5BE0A"
# Organization's Kerberos Realm (leave blank to disable check)
kerberosRealm=""
# Organization's Firewall Type [ socketfilterfw | pf ]
organizationFirewall="socketfilterfw"
# Organization's VPN client type [ none | paloalto | cisco | tailscale ]
vpnClientVendor="paloalto"
# Organization's VPN data type [ basic | extended ]
vpnClientDataType="extended"
# "Anticipation" Duration (in seconds)
if [[ "${operationMode}" == "Silent" ]]; then
anticipationDuration="0"
else
anticipationDuration="2"
fi
# How many previous minor OS versions will be marked as compliant
previousMinorOS="2"
# Allowed minimum percentage of free disk space
allowedMinimumFreeDiskPercentage="10"
# Memory pressure history and pattern defaults
memoryPressureHistoryRetentionDays="14"
memoryPressureLookbackDays="7"
memoryPressureRequiredAdverseDays="2"
# Allowed maximum percentage of disk space for user directories (i.e., Desktop, Downloads, Trash)
allowedMaximumDirectoryPercentage="5"
# Network Quality Test Maximum Age
# Leverages `date -v-`; One of either y, m, w, d, H, M or S
# must be used to specify which part of the date is to be adjusted
networkQualityTestMaximumAge="4H"
# SOFA Cache Maximum Age
# Leverages `date -v-`; One of either y, m, w, d, H, M or S
# must be used to specify which part of the date is to be adjusted
sofaCacheMaximumAge="1d"
# Allowed number of uptime minutes
# - 1 day = 24 hours × 60 minutes/hour = 1,440 minutes
# - 7 days, multiply: 7 × 1,440 minutes = 10,080 minutes
# - 30 days, multiply: 30 × 1,440 minutes = 43,200 minutes
# Use maxUptimeMinutes="" to turn the max uptime check off if desired.
allowedUptimeMinutes="10080"
maxUptimeMinutes="43200"
# Should excessive uptime result in a "warning" or "error" ?
# Setting this to error will disable the max uptime check above
excessiveUptimeAlertStyle="warning"
# Completion Timer (in seconds)
completionTimer="60"
- Adjust the various IT Support-related variables for your environment
- Dynamic
supportLabel1/supportValue1throughsupportLabel6/supportValue6 - Empty Label / Value pairs are skipped automatically
- Legacy fallback still works when all dynamic pairs are empty:
- Telephone (
supportTeamPhone) - Email (
supportTeamEmail) - Website (
supportTeamWebsite) - Knowledge Base Article (
supportKBURL)
- Telephone (
- Info button target now uses the first URL-like dynamic support value; if none is found, it falls back to legacy Knowledge Base values
- Dynamic
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# IT Support Variables
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
supportTeamName="IT Support"
supportTeamPhone="+1 (801) 555-1212"
supportTeamEmail="rescue@domain.org"
supportTeamWebsite="https://support.domain.org"
supportTeamHyperlink="[${supportTeamWebsite}](${supportTeamWebsite})"
supportKB="KB8675309"
infobuttonaction="https://servicenow.domain.org/support?id=kb_article_view&sysparm_article=${supportKB}"
supportKBURL="[${supportKB}](${infobuttonaction})"
infobuttontext="${supportKB}"
# Optional dynamic IT support label/value pairs
# Leave a supportLabel blank (or its matching supportValue blank) to hide that line.
supportLabel1="Telephone"
supportValue1="${supportTeamPhone}"
supportLabel2="Email"
supportValue2="${supportTeamEmail}"
supportLabel3="Website"
supportValue3="${supportTeamWebsite}"
supportLabel4="Knowledge Base Article"
supportValue4="${supportKBURL}"
supportLabel5=""
supportValue5=""
supportLabel6=""
supportValue6=""
3. Customize Health Checks
Mac Health Check includes MDM-specific pairs of List Items and Health Checks
MDM-specific List Items determine what is displayed to the end-user, while matching individual Health Checks control which functions are executed. (See: List Items & Checks.)
🎉 New in version 5.0.0, the AI-agnostic Mac Health Check Selector skill asks which MDM you use, presents a categorized checklist and — after you confirm — writes a validated, MDM-specific, date-stamped copy of the script (plus a sidecar .md recording your selection) to the git-ignored Artifacts/ directory; Mac-Health-Check.zsh itself is never modified.
List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Main Dialog Window
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
mainDialogJSON='
{
"commandfile" : "'"${dialogCommandFile}"'",
"bannerimage" : "'"${organizationBrandingBannerURL}"'",
"bannertext" : "'"${humanReadableScriptName} (${scriptVersion})"'",
"title" : "'"${humanReadableScriptName} (${scriptVersion})"'",
"titlefont" : "shadow=true, size=36, colour=#FFFDF4",
"ontop" : true,
"moveable" : true,
"windowbuttons" : "min",
"quitkey" : "k",
"icon" : "'"${icon}"'",
"overlayicon" : "'"${overlayicon}"'",
"message" : "none",
"iconsize" : "198",
"infobox" : "**User:** '"{userfullname}"'<br><br>**Computer Model:** '"{computermodel}"'<br><br>**Serial Number:** '"{serialnumber}"'<br><br>**System Memory:** '"${systemMemory}"'<br><br>**System Storage:** '"${systemStorage}"' ",
"infobuttontext" : "'"${infobuttontext}"'",
"infobuttonaction" : "'"${infobuttonaction}"'",
"button1text" : "Wait",
"button1disabled" : "true",
"helpmessage" : "'"${helpmessage}"'",
"helpimage" : "'"${helpimage}"'",
"position" : "center",
"progress" : "'"${progressSteps}"'",
"progresstext" : "Please wait …",
"height" : "750",
"width" : "975",
"messagefont" : "size=14"
}
'
# Validate mainDialogJSON is valid JSON
if ! validateJson "${mainDialogJSON}"; then
echo "Error: mainDialogJSON is invalid JSON"
echo "$mainDialogJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Addigy MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
addigyMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Teams", "subtitle" : "The hub for teamwork in Microsoft 365.", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate addigyMdmListitemJSON is valid JSON
if ! validateJson "${addigyMdmListitemJSON}"; then
echo "Error: addigyMdmListitemJSON is invalid JSON"
echo "$addigyMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Filewave MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
filewaveMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate filewaveMdmListitemJSON is valid JSON
if ! validateJson "${filewaveMdmListitemJSON}"; then
echo "Error: filewaveMdmListitemJSON is invalid JSON"
echo "$filewaveMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Fleet MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
fleetMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Fleet Desktop", "subtitle" : "Visibility into the security posture of your Mac.", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate fleetMdmListitemJSON is valid JSON
if ! validateJson "${fleetMdmListitemJSON}"; then
echo "Error: fleetMdmListitemJSON is invalid JSON"
echo "$fleetMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Kandji MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
kandjiMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=18.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=19.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=20.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=21.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=22.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Teams", "subtitle" : "The hub for teamwork in Microsoft 365.", "icon" : "SF=23.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft One Drive", "subtitle" : "Microsoft cloud storage for your important files.", "icon" : "SF=24.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Outlook", "subtitle" : "Email and Calendar from Microsoft.", "icon" : "SF=25.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Company Portal", "subtitle" : "Required for Platform Single Sign-On.", "icon" : "SF=26.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Zoom", "subtitle" : "Web Conferencing Tool.", "icon" : "SF=27.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Cortex", "subtitle" : "Cortex Security Software.", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Netskope", "subtitle" : "Netskope Connection Software.", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate kandjiMdmListitemJSON is valid JSON
if ! validateJson "${kandjiMdmListitemJSON}"; then
echo "Error: kandjiMdmListitemJSON is invalid JSON"
echo "$kandjiMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Jamf Pro List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
jamfProListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Entra ID Registration", "subtitle" : "Checks Microsoft Entra registration for current user context", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Jamf Pro Check-In", "subtitle" : "Your Mac should check-in with the Jamf Pro MDM server multiple times each day", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Jamf Pro Inventory", "subtitle" : "Your Mac should submit its inventory to the Jamf Pro MDM server daily", "icon" : "SF=23.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Clock Skew", "subtitle" : "Checks local clock offset against time.apple.com before Jamf Pro inventory submission", "icon" : "SF=24.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=28.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=29.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Jamf Hosts","subtitle":"Test connectivity to Jamf Pro cloud and on-prem endpoints","icon":"SF=30.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Teams", "subtitle" : "The hub for teamwork in Microsoft 365.", "icon" : "SF=34.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "BeyondTrust Privilege Management", "subtitle" : "Privilege Management for Mac pairs powerful least-privilege management and application control", "icon" : "SF=35.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Cisco Umbrella", "subtitle" : "Cisco Umbrella combines multiple security functions so you can extend data protection anywhere.", "icon" : "SF=36.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "CrowdStrike Falcon", "subtitle" : "Technology, intelligence, and expertise come together in CrowdStrike Falcon to deliver security that works.", "icon" : "SF=37.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Palo Alto GlobalProtect", "subtitle" : "Virtual Private Network (VPN) connection to Church headquarters", "icon" : "SF=38.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=39.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=40.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=41.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Computer Inventory", "subtitle" : "The listing of your Mac’s apps and settings", "icon" : "SF=42.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate jamfProListitemJSON is valid JSON
if ! validateJson "${jamfProListitemJSON}"; then
echo "Error: jamfProListitemJSON is invalid JSON"
echo "$jamfProListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# JumpCloud MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
jumpcloudMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Teams", "subtitle" : "The hub for teamwork in Microsoft 365.", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate jumpcloudMdmListitemJSON is valid JSON
if ! validateJson "${jumpcloudMdmListitemJSON}"; then
echo "Error: jumpcloudMdmListitemJSON is invalid JSON"
echo "$jumpcloudMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Microsoft Intune MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
microsoftMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Microsoft Company Portal", "subtitle" : "Securely access and manage corporate apps, resources, and devices via Intune.", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate microsoftMdmListitemJSON is valid JSON
if ! validateJson "${microsoftMdmListitemJSON}"; then
echo "Error: microsoftMdmListitemJSON is invalid JSON"
echo "$microsoftMdmListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Mosyle List Items (thanks, @precursorca and @bigdoodr!)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
mosyleListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "App Auto-Patch", "subtitle" : "Keep your apps up-to-date to ensure their security and performance", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Profile", "subtitle" : "The presence of the '${mdmVendor}' MDM profile helps ensure your Mac is enrolled", "icon" : "SF=20.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' MDM Certificate Expiration", "subtitle" : "Validate the expiration date of the '${mdmVendor}' MDM certificate", "icon" : "SF=21.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=22.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Mosyle Check-In", "subtitle" : "Your Mac should check-in with the Mosyle MDM server multiple times each day", "icon" : "SF=23.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.4},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=25.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=26.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=27.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=28.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "'${mdmVendor}' Self-Service", "subtitle" : "Your one-stop shop for all things '${mdmVendor}'.", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=30.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=31.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=32.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=33.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=34.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate mosyleListitemJSON is valid JSON
if ! validateJson "${mosyleListitemJSON}"; then
echo "Error: mosyleListitemJSON is invalid JSON"
echo "$mosyleListitemJSON"
exit 1
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Generic MDM List Items
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
genericMdmListitemJSON='
[
{"title" : "macOS Version", "subtitle" : "Organizational standards are the current and immediately previous versions of macOS", "icon" : "SF=01.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Available Updates", "subtitle" : "Keep your Mac up-to-date to ensure its security and performance", "icon" : "SF=02.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "System Integrity Protection", "subtitle" : "System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code.", "icon" : "SF=03.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Signed System Volume", "subtitle" : "Signed System Volume (SSV) ensures macOS is booted from a signed, cryptographically protected volume.", "icon" : "SF=04.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Firewall", "subtitle" : "The built-in macOS firewall helps protect your Mac from unauthorized access.", "icon" : "SF=05.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "FileVault Encryption", "subtitle" : "FileVault is built-in to macOS and provides full-disk encryption to help prevent unauthorized access to your Mac", "icon" : "SF=06.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Gatekeeper / XProtect", "subtitle" : "Prevents the execution of Apple-identified malware and adware.", "icon" : "SF=07.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Touch ID", "subtitle" : "Touch ID provides secure biometric authentication for unlock your Mac and authorize third-party apps.", "icon" : "SF=08.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "VPN Client", "subtitle" : "Your Mac should have the proper VPN client installed and usable", "icon" : "SF=09.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Last Reboot", "subtitle" : "Restart your Mac regularly — at least once a week — can help resolve many common issues", "icon" : "SF=10.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Free Disk Space", "subtitle" : "Checks for the amount of free disk space on your Mac’s boot volume", "icon" : "SF=11.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Desktop Size and Item Count", "subtitle" : "Checks the size and item count of the Desktop", "icon" : "SF=12.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Downloads Size and Item Count", "subtitle" : "Checks the size and item count of the Downloads folder", "icon" : "SF=13.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Trash Size and Item Count", "subtitle" : "Checks the size and item count of the Trash", "icon" : "SF=14.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Password Hint", "subtitle" : "Ensure no password hint is set for better security", "icon" : "SF=15.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirDrop", "subtitle" : "Ensure AirDrop is not set to Everyone for security", "icon" : "SF=16.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "AirPlay Receiver", "subtitle" : "Ensure AirPlay Receiver is disabled when not needed", "icon" : "SF=17.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Bluetooth Sharing", "subtitle" : "Ensure Bluetooth Sharing is disabled when not needed", "icon" : "SF=18.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification service", "subtitle" : "Validate communication between Apple, '${mdmVendor}' and your Mac", "icon" : "SF=19.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Apple Push Notification Hosts","subtitle":"Test connectivity to Apple Push Notification hosts","icon":"SF=20.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Device Management","subtitle":"Test connectivity to Apple device enrollment and MDM services","icon":"SF=21.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Software and Carrier Updates","subtitle":"Test connectivity to Apple software update endpoints","icon":"SF=22.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Certificate Validation","subtitle":"Test connectivity to Apple certificate and OCSP services","icon":"SF=23.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Apple Identity and Content Services","subtitle":"Test connectivity to Apple Identity and Content services","icon":"SF=24.circle,'"${organizationColorScheme}"'", "status":"pending","statustext":"Pending …", "iconalpha" : 0.5},
{"title" : "Homebrew Status", "subtitle" : "If installed, compares the latest Homebrew release and any outdated packages", "icon" : "SF=25.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Electron Corner Mask", "subtitle" : "Detects susceptible Electron apps that may cause GPU slowdowns on macOS 26 Tahoe", "icon" : "SF=26.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Wi-Fi Strength", "subtitle" : "Checks current Wi-Fi signal strength and gives a simple quality rating.", "icon" : "SF=27.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Memory Pressure", "subtitle" : "Reviews memory pressure across recent days", "icon" : "SF=28.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5},
{"title" : "Network Quality Test", "subtitle" : "Various networking-related tests of your Mac’s Internet connection", "icon" : "SF=29.circle,'"${organizationColorScheme}"'", "status" : "pending", "statustext" : "Pending …", "iconalpha" : 0.5}
]
'
# Validate genericMdmListitemJSON is valid JSON
if ! validateJson "${genericMdmListitemJSON}"; then
echo "Error: genericMdmListitemJSON is invalid JSON"
echo "$genericMdmListitemJSON"
exit 1
fi
Health Checks
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Generate Health Checks based on Operation Mode and MDM Vendor (where "n" represents the listitem order)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
if [[ "${operationMode}" == "Development" ]]; then
# Operation Mode: Development
notice "Operation Mode is ${operationMode}; using ${operationMode}-specific Health Check."
dialogUpdate "title: ${humanReadableScriptName} (${scriptVersion})<br>Operation Mode: ${operationMode}"
# set -x
checkClockSkew "0"
checkMemoryPressure "1"
checkAPNs "2"
# set +x
else
notice "Operation Mode is ${operationMode}; using MDM-specific Health Checks."
if [[ "${operationMode}" != "Test" ]]; then
# Operation Mode: Debug
if [[ "${operationMode}" == "Debug" ]]; then
dialogUpdate "title: ${humanReadableScriptName} (${scriptVersion})<br>Operation Mode: ${operationMode}"
fi
# Operation Mode: Self Service
case ${mdmVendor} in
"Addigy" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "27" checkInternal "/Applications/Microsoft Teams.app" "/Applications/Microsoft Teams.app" "Microsoft Teams"
runConfiguredHealthCheck "28" checkHomebrewStatus
runConfiguredHealthCheck "29" checkElectronCornerMask
runConfiguredHealthCheck "30" checkWiFiStrength
runConfiguredHealthCheck "31" checkMemoryPressure
runConfiguredHealthCheck "32" checkNetworkQuality
;;
"Filewave" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "27" checkHomebrewStatus
runConfiguredHealthCheck "28" checkElectronCornerMask
runConfiguredHealthCheck "29" checkWiFiStrength
runConfiguredHealthCheck "30" checkMemoryPressure
runConfiguredHealthCheck "31" checkNetworkQuality
;;
"Fleet" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "27" checkInternal "/opt/orbit/bin/desktop/macos/stable/Fleet Desktop.app" "/opt/orbit/bin/desktop/macos/stable/Fleet Desktop.app" "Fleet Desktop"
runConfiguredHealthCheck "28" checkHomebrewStatus
runConfiguredHealthCheck "29" checkElectronCornerMask
runConfiguredHealthCheck "30" checkWiFiStrength
runConfiguredHealthCheck "31" checkMemoryPressure
runConfiguredHealthCheck "32" checkNetworkQuality
;;
"Jamf Pro" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkSIP
runConfiguredHealthCheck "3" checkSSV
runConfiguredHealthCheck "4" checkFirewall
runConfiguredHealthCheck "5" checkFileVault
runConfiguredHealthCheck "6" checkGatekeeperXProtect
runConfiguredHealthCheck "7" checkTouchID
runConfiguredHealthCheck "8" checkAirDropSettings
runConfiguredHealthCheck "9" checkAirPlayReceiver
runConfiguredHealthCheck "10" checkBluetoothSharing
runConfiguredHealthCheck "11" checkVPN
runConfiguredHealthCheck "12" checkUptime
runConfiguredHealthCheck "13" checkFreeDiskSpace
runConfiguredHealthCheck "14" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "15" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "16" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "17" checkMdmProfile
runConfiguredHealthCheck "18" checkEntraIDRegistration
runConfiguredHealthCheck "19" checkMdmCertificateExpiration
runConfiguredHealthCheck "20" checkAPNs
runConfiguredHealthCheck "21" checkJamfProCheckIn
runConfiguredHealthCheck "22" checkJamfProInventory
runConfiguredHealthCheck "23" checkClockSkew
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "27" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "28" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "29" checkNetworkHosts "Jamf Hosts" "${jamfHosts[@]}"
runConfiguredHealthCheck "30" checkAppAutoPatch
runConfiguredHealthCheck "31" checkHomebrewStatus
runConfiguredHealthCheck "32" checkElectronCornerMask
runConfiguredHealthCheck "33" checkInternal "/Applications/Microsoft Teams.app" "/Applications/Microsoft Teams.app" "Microsoft Teams"
runConfiguredHealthCheck "34" checkExternalJamfPro "symvBeyondTrustPMfM" "/Applications/PrivilegeManagement.app"
runConfiguredHealthCheck "35" checkExternalJamfPro "symvCiscoUmbrella" "/Applications/Cisco/Cisco Secure Client.app"
runConfiguredHealthCheck "36" checkExternalJamfPro "symvCrowdStrikeFalcon" "/Applications/Falcon.app"
runConfiguredHealthCheck "37" checkExternalJamfPro "symvGlobalProtect" "/Applications/GlobalProtect.app"
runConfiguredHealthCheck "38" checkWiFiStrength
runConfiguredHealthCheck "39" checkMemoryPressure
runConfiguredHealthCheck "40" checkNetworkQuality
runConfiguredHealthCheck "41" updateComputerInventory
;;
"JumpCloud" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "27" checkInternal "/Applications/Microsoft Teams.app" "/Applications/Microsoft Teams.app" "Microsoft Teams"
runConfiguredHealthCheck "28" checkHomebrewStatus
runConfiguredHealthCheck "29" checkElectronCornerMask
runConfiguredHealthCheck "30" checkWiFiStrength
runConfiguredHealthCheck "31" checkMemoryPressure
runConfiguredHealthCheck "32" checkNetworkQuality
;;
"Kandji" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkSIP
runConfiguredHealthCheck "3" checkSSV
runConfiguredHealthCheck "4" checkFirewall
runConfiguredHealthCheck "5" checkFileVault
runConfiguredHealthCheck "6" checkGatekeeperXProtect
runConfiguredHealthCheck "7" checkTouchID
runConfiguredHealthCheck "8" checkVPN
runConfiguredHealthCheck "9" checkUptime
runConfiguredHealthCheck "10" checkFreeDiskSpace
runConfiguredHealthCheck "11" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Downloads" "arrow.down.circle.fill" "Downloads"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "14" checkBluetoothSharing
runConfiguredHealthCheck "15" checkMdmCertificateExpiration
runConfiguredHealthCheck "16" checkAPNs
runConfiguredHealthCheck "17" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "18" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "19" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "20" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "21" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "22" checkInternal "/Applications/Microsoft Teams.app" "/Applications/Microsoft Teams.app" "Microsoft Teams"
runConfiguredHealthCheck "23" checkInternal "/Applications/OneDrive.app" "/Applications/OneDrive.app" "Microsoft One Drive"
runConfiguredHealthCheck "24" checkInternal "/Applications/Microsoft Outlook.app" "/Applications/Microsoft Outlook.app" "Microsoft Outlook"
runConfiguredHealthCheck "25" checkInternal "/Applications/Company Portal.app" "/Applications/Company Portal.app" "Company Portal"
runConfiguredHealthCheck "26" checkInternal "/Applications/zoom.us.app" "/Applications/zoom.us.app" "Zoom"
runConfiguredHealthCheck "27" checkInternal "/Applications/Cortex XDR.app" "/Applications/Cortex XDR.app" "Cortex"
runConfiguredHealthCheck "28" checkInternal "/Applications/Netskope Client.app" "/Applications/Netskope Client.app" "Netskope"
runConfiguredHealthCheck "29" checkWiFiStrength
runConfiguredHealthCheck "30" checkMemoryPressure
runConfiguredHealthCheck "31" checkNetworkQuality
;;
"Microsoft Intune" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "27" checkInternal "/Applications/Company Portal.app" "/Applications/Company Portal.app" "Microsoft Company Portal"
runConfiguredHealthCheck "28" checkHomebrewStatus
runConfiguredHealthCheck "29" checkElectronCornerMask
runConfiguredHealthCheck "30" checkWiFiStrength
runConfiguredHealthCheck "31" checkMemoryPressure
runConfiguredHealthCheck "32" checkNetworkQuality
;;
"Mosyle" )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkAppAutoPatch
runConfiguredHealthCheck "3" checkSIP
runConfiguredHealthCheck "4" checkSSV
runConfiguredHealthCheck "5" checkFirewall
runConfiguredHealthCheck "6" checkFileVault
runConfiguredHealthCheck "7" checkGatekeeperXProtect
runConfiguredHealthCheck "8" checkTouchID
runConfiguredHealthCheck "9" checkVPN
runConfiguredHealthCheck "10" checkUptime
runConfiguredHealthCheck "11" checkFreeDiskSpace
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "14" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "15" checkPasswordHint
runConfiguredHealthCheck "16" checkAirDropSettings
runConfiguredHealthCheck "17" checkAirPlayReceiver
runConfiguredHealthCheck "18" checkBluetoothSharing
runConfiguredHealthCheck "19" checkMdmProfile
runConfiguredHealthCheck "20" checkMdmCertificateExpiration
runConfiguredHealthCheck "21" checkAPNs
runConfiguredHealthCheck "22" checkMosyleCheckIn
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "24" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "25" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "26" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "27" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "28" checkInternal "/Applications/Self-Service.app" "/Applications/Self-Service.app" "Self-Service"
runConfiguredHealthCheck "29" checkHomebrewStatus
runConfiguredHealthCheck "30" checkElectronCornerMask
runConfiguredHealthCheck "31" checkWiFiStrength
runConfiguredHealthCheck "32" checkMemoryPressure
runConfiguredHealthCheck "33" checkNetworkQuality
;;
* )
runConfiguredHealthCheck "0" checkOS
runConfiguredHealthCheck "1" checkAvailableSoftwareUpdates
runConfiguredHealthCheck "2" checkSIP
runConfiguredHealthCheck "3" checkSSV
runConfiguredHealthCheck "4" checkFirewall
runConfiguredHealthCheck "5" checkFileVault
runConfiguredHealthCheck "6" checkGatekeeperXProtect
runConfiguredHealthCheck "7" checkTouchID
runConfiguredHealthCheck "8" checkVPN
runConfiguredHealthCheck "9" checkUptime
runConfiguredHealthCheck "10" checkFreeDiskSpace
runConfiguredHealthCheck "11" checkUserDirectorySizeItems "Desktop" "desktopcomputer.and.macbook" "Desktop"
runConfiguredHealthCheck "12" checkUserDirectorySizeItems "Downloads" "folder.fill.badge.plus" "Downloads"
runConfiguredHealthCheck "13" checkUserDirectorySizeItems ".Trash" "trash.fill" "Trash"
runConfiguredHealthCheck "14" checkPasswordHint
runConfiguredHealthCheck "15" checkAirDropSettings
runConfiguredHealthCheck "16" checkAirPlayReceiver
runConfiguredHealthCheck "17" checkBluetoothSharing
runConfiguredHealthCheck "18" checkAPNs
runConfiguredHealthCheck "19" checkNetworkHosts "Apple Push Notification Hosts" "${pushHosts[@]}"
runConfiguredHealthCheck "20" checkNetworkHosts "Apple Device Management" "${deviceMgmtHosts[@]}"
runConfiguredHealthCheck "21" checkNetworkHosts "Apple Software and Carrier Updates" "${updateHosts[@]}"
runConfiguredHealthCheck "22" checkNetworkHosts "Apple Certificate Validation" "${certHosts[@]}"
runConfiguredHealthCheck "23" checkNetworkHosts "Apple Identity and Content Services" "${idAssocHosts[@]}"
runConfiguredHealthCheck "24" checkHomebrewStatus
runConfiguredHealthCheck "25" checkElectronCornerMask
runConfiguredHealthCheck "26" checkWiFiStrength
runConfiguredHealthCheck "27" checkMemoryPressure
runConfiguredHealthCheck "28" checkNetworkQuality
;;
esac
dialogUpdate "icon: ${icon}"
dialogUpdate "progresstext: Final Analysis …"
sleep "${anticipationDuration}"
else
# Operation Mode: Test
dialogUpdate "title: ${humanReadableScriptName} (${scriptVersion})<br>Operation Mode: ${operationMode}"
for (( i=0; i<listitemLength; i++ )); do
notice "[Operation Mode: ${operationMode}] Check ${i} …"
dialogUpdate "icon: SF=$(printf "%02d" $(($i+1))).square,${organizationColorScheme}"
dialogUpdate "listitem: index: ${i}, icon: SF=$(printf "%02d" $(($i+1))).circle.fill $(echo "${organizationColorScheme}" | tr ',' ' '), iconalpha: 1, status: wait, statustext: Checking …"
dialogUpdate "progress: increment"
dialogUpdate "progresstext: [Operation Mode: ${operationMode}] • Item No. ${i} …"
# sleep "${anticipationDuration}"
dialogUpdate "listitem: index: ${i}, icon: SF=$(printf "%02d" $(($i+1))).circle.fill weight=semibold colour=${statusColorSuccess}, iconalpha: 0.9, subtitle: ${organizationBoilerplateComplianceMessage}, status: success, statustext: ${operationMode}"
done
dialogUpdate "icon: ${icon}"
dialogUpdate "progresstext: Final Analysis …"
sleep "${anticipationDuration}"
fi
fi
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Quit Script
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
quitScript
Support
Community-based, best-effort support is available on the Mac Admins Slack (free, registration required) #mac-health-check Channel, or you can open an issue on GitHub.




