A green-screen automation framework for Windows. Drive terminal emulators and their GUI faceplates from PowerShell and VBA, with approval gates and audit logging built in, using only the runtimes shipped with Windows.
Status: v0.1 — early. API will change. License: MIT
Terminal emulators like Rocket BlueZone, IBM Personal Communications, and
Reflection Desktop expose automation surfaces that have been used for decades to
script against the mainframe, midrange, and legacy applications behind them.
greenscript wraps those surfaces in a small, intentional PowerShell module and
VBA module, adds an approval model and a JSONL audit log, and ships recipe
scripts for the patterns people actually need.
The library is dealer-, vendor-, and vertical-agnostic. If you have a
BlueZone-driven line-of-business system, greenscript gives you a cleaner API
than raw COM calls and a safer execution model than hand-rolled macros.
- Not an RPA platform. There is no visual designer, no cloud orchestrator, no licensed runtime.
- Not an AI product. The connector has zero dependency on any LLM, local or hosted.
- Not an integration product. It drives the terminal emulator the operator is already running, under the operator's own credentials, from their own workstation.
greenscript binds to the terminal emulator, not to any particular host, so
it applies wherever people still do their job in a green screen through a
Windows emulator. Two layers matter.
Emulators — what the module actually talks to:
| Emulator | Status |
|---|---|
| Rocket BlueZone (3270, 5250, VT100/220/420, and Tandem 6530 sessions) | Supported today, through the BZWhll COM object |
| IBM Personal Communications, Reflection Desktop, Extra! X-treme, Rumba+, HostExplorer, and other EHLLAPI-capable emulators | Planned: HLLAPI driver (ehlapi32/64.dll), the same interface Microsoft Power Automate uses |
Host systems — what people drive through those emulators. Typical examples
by industry; inclusion means "commonly accessed through a terminal emulator"
and nothing more. greenscript has been verified live only against CDK Drive;
see Verification status below.
- Automotive retail — dealer management systems such as CDK Drive.
- Banking and credit unions — IBM i cores such as Jack Henry SilverLake and CU*BASE; mainframe cores such as FIS Systematics.
- Insurance — policy administration and claims on z/OS (CICS / IMS); RPG applications on IBM i.
- Healthcare — the VA's VistA and IHS RPMS "roll-and-scroll" interfaces; legacy lab and patient-accounting systems.
- Government — unemployment insurance, DMV, Medicaid (MMIS), tax, and court case-management systems.
- Distribution, manufacturing, ERP — JD Edwards World; Infor XA (MAPICS) and LX (BPCS); VAI S2K; Epicor Eclipse and other UniVerse / MultiValue applications; older Manhattan WMS (PkMS).
- Retail — merchandising and back-office systems on IBM i such as Island Pacific.
- Travel and logistics — TPF-based airline reservation and cargo systems; rail and freight legacy systems.
- Utilities and telecom — customer information and billing systems on the mainframe.
Rule of thumb: if your users open a terminal emulator to do their job, the screens are a fixed character grid (24×80 or 27×132), and the emulator has a macro recorder, the system is a fit. docs/compatibility.md has the longer list and a checklist.
Verified live on 10–11 October 2026 against CDK Drive (BlueZone client) on
Windows 11, Windows PowerShell 5.1 (32-bit host): Connect-GsSession,
Read-GsScreen (full and partial reads), Get-GsCursor, Send-GsKeys
(text, <Enter>, <F1>), Wait-GsText (both the found and the timeout
paths), Disconnect-GsSession, and examples/01-read-screen.ps1.
Read-GsPopup is unchanged from the standalone script it was factored from,
which was verified against the same client's web popups. The Pester suite
covers the cmdlet logic on every push.
In rough order:
Find-GsTextandWait-GsText -Anywhere— search the whole buffer instead of an exact row and column (BlueZone'sWaitForTextis anchored).- Per-screen key policy — F-key meanings change per screen and even per field; the global forbidden list is a blunt v0.1 instrument.
- HLLAPI driver (
ehlapi32/64.dll) — other emulators, and a 64-bit path. - Print-capture and SFTP adapters — reports and bulk data without screen reads.
- Audit-log masking — redact configured fields before they reach disk.
Every runtime greenscript uses already ships on a modern Windows machine:
- PowerShell 5.1 — baked into Windows 10 and 11.
- BlueZone VBA — Rocket Software's add-on, included with most BlueZone deployments.
- .NET Framework 4.x — present on every supported Windows release.
- MSHTML (
IHTMLDocument2) — the Windows HTML document interface used to read GUI popups rendered as embedded browser controls.
No npm, no pip, no runtime installer. The connector is scripts and VBA that run on tools the workstation already has.
# From a cloned checkout:
Import-Module .\powershell\GreenScript.psd1
# Or copy the module into the user module path:
Copy-Item -Recurse .\powershell $env:USERPROFILE\Documents\WindowsPowerShell\Modules\GreenScript
Import-Module GreenScriptBlueZone's COM object is 32-bit. On 64-bit Windows, run PowerShell from
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe. The module will
warn and exit if invoked under a 64-bit host.
See docs/installation.md for details and troubleshooting.
Import-Module GreenScript
$session = Connect-GsSession # attaches to the active BlueZone session
Read-GsScreen -Session $session | Format-Table Row, Text
Send-GsKeys -Session $session -Keys "WAQ<Enter>" -Confirm
Wait-GsText -Session $session -Text "Work a Quote" -Row 1 -TimeoutSeconds 10
Disconnect-GsSession $sessionEvery keystroke-sending call runs through [CmdletBinding(SupportsShouldProcess)]
and prompts for confirmation by default. -Confirm:$false disables the prompt
for scripted scenarios; -WhatIf previews without sending.
| Cmdlet | Purpose |
|---|---|
Connect-GsSession |
Attach to a BlueZone session; returns a session handle. |
Disconnect-GsSession |
Release the session. |
Read-GsScreen |
Read the full terminal screen (default 24×80). |
Get-GsCursor |
Return current cursor row/column. |
Send-GsKeys |
Send keys to the host, with approval gate. |
Wait-GsText |
Wait for text to appear at a specific row/column. |
Get-GsPopup |
Enumerate open LegaSuite / embedded-browser popups. |
Read-GsPopup |
Parse a popup's fields, buttons, and visible text. |
Write-GsAudit |
Append a JSONL audit entry (keyed by session). |
See docs/api.md for parameter detail and examples.
Three self-contained scripts in examples/ demonstrate the
module without any AI involvement:
01-read-screen.ps1— connect, read, print.02-recall-quote.ps1— navigate to a workflow by quote number, read the resulting worksheet.03-sales-tax-upload.ps1— pattern for bulk data entry into a form, with per-row approval option.
Run with powershell -NoProfile -ExecutionPolicy Bypass -File examples\01-read-screen.ps1.
greenscript operates under the credentials of whoever is signed into the
Windows session. It does not store, transmit, or request credentials. It does
not open network sockets, make outbound HTTP calls, or write to any file
outside the audit log directory the user configures.
The approval gate on Send-GsKeys is enforced through PowerShell's standard
SupportsShouldProcess mechanism. You get the usual -WhatIf / -Confirm
semantics, plus a configurable deny-list of key sequences that always prompt
regardless of -Confirm:$false. The default list (<F3>, <F5>, <SF6>) is
a conservative starting point drawn from dealer-DMS screens where those keys
save, create, or update; tune it to whatever host you drive.
See docs/security.md for the full model.
- Rocket BlueZone Advanced Automation Developer Guide
- Microsoft Power Automate Desktop's terminal emulation actions (same
ehlapi64.dllHLLAPI surface) - IBM EHLLAPI specification
- The hllapi-node project (CoffeeScript, unmaintained since 2014)
greenscript is not a fork of any of these. It is a modern PowerShell/VBA
interpretation of the same automation patterns.
See CONTRIBUTING.md.
Published by Breezy Point Beach, LLC.
Repository: https://github.com/Breezy-Point-Beach/greenscript