How do I stabilize a reverse shell in when the attack box is using powershell?

So I’ve managed to get a version of netcat onto my windows machine and I can run the standard:

nc -lvnp 1234

and this properly connects to the victim’s machine, but it’s a very fragile connection. Ctrl + C will just drop the connection, tab doesn’t auto complete, and the up and down arrows don’t give me history. On linux, the common way to stabilize the shell looks like this:

python -c "import pty; pty.spawn('/bin/bash')"      //run on victim's machine
CTRL + Z                                            //switches over to your machine
stty raw -echo                                      //run on your machine
fg                                                  //switches back to victim machine
export TERM=xtrm                                    //run on victim machine

The problem is that ctrl + z just locks up Powershell so that’s about as far as I get. Even if I use a Kali linux docker container, I am still running that container through Powershell or CMD and I just just can’t get past that ctrl + Z issue.

How do I stabilize a reverse shell through Powershell or CMD?