Switch day moves every PC from the old emulators to WND Terminal in one go. You run a small discovery program across the estate, read one report, make a pack, and deploy. When people open WND Terminal for the first time, their own sessions, keyboard maps, macros and screen look are already there. Nobody re-enters a host name.
Three programs do it.
On a small screen, swipe the table to read all columns.
| Program | Where it runs | What it does |
|---|---|---|
wnd-discover.exe |
Every PC, before WND Terminal is there | Finds the emulators installed and collects each person’s session, keyboard map and macro files, with stored passwords removed. Writes them to a share. |
wnd-automate readiness --estate |
Your computer | The switch day report from that share: per computer, per person and per emulator, the hosts, the macros, and how many people are ready to switch. |
wnd-automate switch-pack |
Your computer | What you deploy: the policy, the Intune and Configuration Manager inputs, and a set-up file for each person. |
WND Terminal itself does the last part. On its first start it finds the person’s set-up file and adds it without asking.
The runbook
-
Make a share for discovery. For example
\\fileserver\wnd-discover$. The computers write to it (give the Domain Computers group Modify, since wnd-discover runs as SYSTEM) and IT reads it. People don’t need to read it. It holds their files, so treat it like a home folder share. -
Tell wnd-discover where it is. Set the registry value
ShareunderHKLM\Software\WND Software\Discoverto the share, with Group Policy Preferences or an Intune remediation script. You can also give it on the command line with--share. -
Run wnd-discover on every PC. It’s one file with no installer (
WND-Discover-Windows.exe, on the downloads page with the admin kit). Run it as SYSTEM so it can read every profile, from an Intune platform script, a Configuration Manager package or a Group Policy startup script:wnd-discover.exe --share \\fileserver\wnd-discover$It takes a few seconds, writes
\\fileserver\wnd-discover$\<computer>\<user>.wnddiscfor each person with emulator files and_computer.wnddiscfor the computer, and changes nothing on the PC. Run as a sign-in script instead, add--meand it collects only that person’s profile.--listshows what it would collect without writing anything. -
Make the report.
wnd-automate readiness --estate \\fileserver\wnd-discover$ --out D:\Reportswnd-automateis installed with WND Terminal (C:\Program Files\WND Terminal\wnd-automate.exe). The report’s folder has the one-page summary for leadership (Switch day report.htmland.pdf), the detail sheet with every file (Switch day details.xlsx),People.csv,Computers.csvandNeeds a person.csv. -
Close the gaps. A person is ready to switch when nothing of theirs needs a person.
People.csvsays who isn’t and why, andNeeds a person.csvlists the files. Typical ones are Rumba profiles (Reflection Desktop converts them), encrypted Reflection documents (save a copy without encryption) and macros that use what WND Terminal doesn’t have. Fix them at the source, run wnd-discover again on those PCs, and make the report again. It takes about a minute. -
Make the switch pack.
wnd-automate switch-pack --estate \\fileserver\wnd-discover$ --out D:\SwitchPack ^ --users-at \\fileserver\wnd$\users --license wnd1.your-key--users-atis where you’ll put the people’s files (a folder, or anhttps://address on your intranet).--licenseputs your key in the policy files. Without it they say "Paste your wnd1. license key here", and the command reminds you.--look classicgives everyone the green-screen look of their old emulator (modern,lightandautowork too). Without it, people get WND Terminal’s own. -
Publish the people’s files. Copy the pack’s
usersfolder to the place you gave in--users-at. Everyone needs to read it. Each file is named after a sign-in name (jsmith.wndconfig) and holds host names, keyboard maps and macros, never a password. -
Set the policy. Import the admin kit’s ADMX into Group Policy and set the values in the pack’s
WNDTerminal.reg, or deploypolicy.json(Windows and Linux) orWNDTerminal.mobileconfig(Macs). They have your organization’s connections,FirstRunImportand the license. Add MaskPatterns and anything else you want from the policy settings reference. -
Deploy WND Terminal.
deploy\Install commands.txthas the install and uninstall command lines for Intune, Configuration Manager and Group Policy, anddeploy\Detect-WNDTerminal.ps1is the detection script for Intune and Configuration Manager. -
Switch. People open WND Terminal and find their sessions, keyboard maps, macros and look already there. Each import is in the audit log as
import.firstrun, with how many connections, keyboard maps and macros came over, so you can check it againstPeople.csv. Uninstall the old emulators when you’re ready.
What wnd-discover collects
It looks at every user profile it can open (C:\Users\... from the computer’s profile list, /Users on a Mac, /home on Linux), walks it from the top, and takes the files WND Terminal’s importers know.
On a small screen, swipe the table to read all columns.
| Emulator | Files |
|---|---|
| IBM Personal Communications | .ws, .kmp, .mac, .bch, .bar, .pmp |
| IBM i Access Client Solutions | .hod, .bchx |
| Reflection | .rd3x, .rd5x, .rdox, .rsf, .r2w, .xkb, .rbs, and XML settings in Reflection’s folders |
| EXTRA! | .edp, .epp, .ekm, .ebm, .ebs, .eqp, .etb, .elf |
| Rumba | .rsdm, .rsda, .wdm, .wda and the other profiles, .rmc, .rdps, .map and scripts in Rumba’s folders |
| BlueZone | .zmd, .zad, .zvt and the other profiles, .bzs, .bbs |
| HostExplorer | .hep, .ebs and .kbd in its folders |
| PASSPORT | .zws |
| PowerTerm | .pts, .ptc, .ptk, .ptp, .psl |
| TN3270 Plus | .tsp, .tkm |
| QWS3270 | .jgs, .jgp, .jgl, qws3270*.key |
| Vista tn3270 | .ses in its folders |
| tn5250 | tn5250rc |
It also takes the same files from the folders every user of the computer shares (the emulator vendors' folders in C:\ProgramData, and C:\Users\Public). Those count for everyone who uses that computer.
It skips folders that never hold emulator files (browser data, caches, pictures, program package stores), doesn’t follow folder links, and doesn’t download files that are only in OneDrive. It finds the emulators installed from their entries in Programs and Features, or their install folders.
Passwords
Every file is scrubbed before it’s written, the way each format keeps a password.
- In INI-style session files (PCOMM, ACS, BlueZone, EXTRA!, PASSPORT, PowerTerm, HostExplorer, TN3270 Plus, QWS3270, Vista, tn5250), any setting whose name has
password,pwd,passphrase,secret,credentialor a token in it loses its value. The vendors don’t all publish their setting names, so the rule is wide on purpose. - In Reflection settings (XML, and inside
.rd3x,.rd5xand.rdox), password items and attributes lose their values. Reflection 11.rsfcommands such as.SetString rcPassword, "..."lose the quoted text. - In PCOMM macros, encrypted inputs (a typed password) lose their value. In Basic, VBA and PSL macros, assignments such as
Password = "..."lose the quoted text. - A file that can’t be checked is left out and listed with the reason. That covers Rumba’s binary profiles, Reflection 12
.rsffiles, encrypted Reflection documents and anything else that isn’t text. The report counts them as needing a person.
A macro can still type a password it doesn’t call one. Look at the macros that sign on (the report lists every macro) before you publish the pack. The SHA-256 in each file’s listing is of the scrubbed file, so the share never holds a hash of a password either.
What it doesn’t do
It connects to nothing but the share. It needs no policy and no WND Terminal, and it writes nothing on the PC. PuTTY keeps its sessions in the registry, which wnd-discover doesn’t read. People bring those over in WND Terminal from a .reg export.
The .wnddisc file
A zip with manifest.json and the files under files/. The manifest has the computer, the person, the system, when it was collected, the emulators installed (product, version, publisher, where), and each file with its path in the profile, emulator, size, SHA-256, the times it was changed, created and last opened, the settings that were scrubbed and, for a file left out, why. _computer.wnddisc also lists every profile looked at, with the ones that couldn’t be opened.
The .wndconfig file
A person’s set-up, as JSON (UTF-8). wnd-automate switch-pack writes one per person into users\. You can also write them yourself.
{
"format": "wndconfig",
"version": 1,
"user": "jsmith",
"made_by": "wnd-automate 1.0.290",
"made": 1760700000,
"computers": ["PC-0042"],
"connections": [
{ "name": "Production", "host_type": "3270", "host": "mvsprod.example", "port": 992, "secure": true,
"model": 2, "code_page": 37, "keymap": "Bank",
"from": ["PC-0042/AppData/Roaming/IBM/Personal Communications/Production.ws"] },
{ "name": "Payroll", "host_type": "5250", "host": "ibmi.example", "port": 992, "secure": true,
"model": 5, "lu": "PAYDSP01", "sign_on": "kerberos" }
],
"keymaps": [ { "name": "Bank", "keys": { "ControlRight": "Enter", "Enter": "Newline", "Ctrl+KeyC": "Copy" } } ],
"default_keymap": null,
"display": { "theme": "classic", "font": "3270", "status": "classic" },
"macros": [
{ "name": "Logon", "from": "PC-0042/Documents/Logon.mac", "result": "full",
"script": "wait \"LOGON\"\ntype \"logon &USERID\"\npress Enter\n" },
{ "name": "Month end", "from": "PC-0042/Documents/Month end.ebm", "result": "runs",
"legacy": { "kind": "extra", "source": "Sub Main\n ...\nEnd Sub\n", "entry": "Main" },
"kind_words": "EXTRA! Basic macro" }
],
"notes": ["PC-0042/Documents/Old.rsdm: Rumba keeps session profiles in a binary format ..."]
}
On a small screen, swipe the table to read all columns.
| Field | What it is |
|---|---|
format, version |
Always "wndconfig" and 1. A newer version is refused, with a message to update WND Terminal. |
user |
The sign-in name it’s for, lower case, without DOMAIN\ or @domain. The file is named after it. |
connections |
Each connection. host_type is 3270, 5250, ssh or telnet. model is 2 to 5 (24x80, 32x80, 43x80, 27x132). Optional are code_page, lu (the LU, or the IBM i device name), backups ("host:port"), keymap (one of keymaps), sign_on (kerberos), vt (user, terminal type, encoding, key file, rows, cols) and from (the files it came from). |
keymaps |
Keyboard maps, from chords (Ctrl+KeyC, ControlRight) to WND Terminal actions (Enter, PF3, Newline, Copy, Text:[). |
default_keymap |
The keyboard map for connections that don’t name one. |
display |
theme (auto, modern, classic, light), font (plex, 3270), status (modern, classic), cursor (block, underline, bar), crosshair. What’s left out stays as it is. |
macros |
result is full or partly (converted, in script) or runs (an older emulator’s macro that runs as it is, in legacy). |
notes |
What didn’t come over, and why. |
Unknown fields are ignored, so files from newer packs still read.
On first start
With FirstRunImport set, WND Terminal looks for <FirstRunImport>\<sign-in name>.wndconfig when it starts. If the file is there it adds everything in it, through the same steps as importing files by hand. Connections your other settings don’t allow (AllowOtherHosts, LockHostType) are left out and counted in the audit event. It remembers the file’s SHA-256 in the person’s profile. With FirstRunImportOnce on (the default) it never reads the file again. Turn it off and it imports again whenever the file changes, which is how you send a new connection to people later. A person without a file sees nothing different.
On a small screen, swipe the table to read all columns.
| Setting | What it does |
|---|---|
| FirstRunImport | A folder (\\fileserver\wnd$\users) or an https:// address with the people’s .wndconfig files. Plain http:// is refused. |
| FirstRunImportOnce = false | Imports a person’s file again whenever it changes. |
The audit event is import.firstrun, "success" with where it came from and how many connections, keyboard maps and macros came over and how many connections were left out, or "failure" with why the file couldn’t be read.
In a browser
The gateway does the same for WND Terminal in a browser, keyed by the person who signed in. Set it in the gateway’s configuration:
[import]
first_run_url = "/srv/wnd/users" # or https://intranet.example/wnd/users
first_run_once = true
The sign-in name is the one your identity provider gives the gateway, compared the same way (lower case, no domain). Each browser remembers what it imported.
Macs and Linux
wnd-discover builds and runs on Macs and Linux too. It reads /Users or /home, finds IBM i Access Client Solutions, tn5250 and PuTTY by their install paths, and takes /etc/tn5250rc. Run it with --share (there’s no registry there). The switch pack’s WNDTerminal.mobileconfig carries FirstRunImport for Macs.