I don't like hardware that, under a consumer OS, uses the control lines of a COM port directly to interface to mechanical or power electrical devices, because (as DDunfield just pointed out) it *will* glitch during bootup, and can glitch due to OS or third party program activity when the controlling application is closed. Under current MS OSes, even if you think you've disabled anything that messes with the port, any OS and some application updates can screw it up again by restoring default settings or re-enabling 3rd party daemons that search for connected serial devices.
To avoid the issues with 'dumb 'interfaces, while still using a COM port, the easiest solution is to hang a smart controller off the port, that interprets commands sent as character strings over its serial interface. With a little care to avoid it 'jabbering' as soon as the port is opened in a way that looks like a legacy serial mouse, or in a way that gets it mis-identified as a 3rd party serial device, it will be robust against unwanted state changes during bootup, or when its control application is closed.
'Dumb' COM port control line interfaces were enough trouble back in the Win9x era, and IMHO should have died with MSDOS. Even cost is no longer a significant justification with a multiplicity of MCUs available for less than a DE-9 back shell!
If all you care about is that it looks like a COM port to Windows, then any Arduino could handle the hardware side of things, possibly with a H-bridge breakout or shield for the DC motor. If you *MUST* hang it off a real serial port, consider an Arduino Pro Mini (one of the few non-USB Arduinos) + a MAX3232 or similar RS2232 interface IC. The same controller can handle multiple motors and SSRs, and also check sensors (e.g. limit switches), off a single COM port.
On the software side of things, talking to a serial device using 7 bit ASCII*, is trivial and interactive from a terminal program, generally reasonably straightforward using nearly any programming language or scripting tool, and is even possible using native commands from a console command line.
* Under Windows, in some programming languages and scripting tools it can be difficult to transfer full 8 bit binary data, and that also makes it difficult to drive interactively from a terminal program, so there's a strong incentive to put in the extra work coding the controller to keep the protocol human readable.