Where USB serial on WSL 2 is concerned, it is possible, but only via a moderately bizarre workaround.
You can’t share USB serial devices into WSL as devices currently, since the WSL pseudo-VM doesn’t support that. But what you can do is make use of a rather obscure service called USB/IP, which lets you connect to remote USB devices over an IP network as if they were local USB devices, and you can get IP into and out of WSL, obviously.
The first step is the bit I haven’t done, because I was using a remote Linux machine when I did this - but there’s no technical reason why you couldn’t share a USB device from the Windows host. There’s a Windows USB/IP server and instructions on how to set it up and share a device here:
cezanne/usbip-win: USB/IP for Windows (github.com)
Then you need a WSL 2 kernel that includes the USB/IP driver or loadable modules (for most serial widgets like Zigbee transceivers, those would be “usb_common”, “usbcore”, “usbip_core”, “usbserial”, and “ftdi_sio”. This means compiling yourself a custom kernel, or if you don’t want to do that and don’t care that it also has lots of extra stuff too, you can always grab mine. (Don’t forget that just installing the packages just sets it up in Linux; you’ll still need to copy it somewhere Windows can see it and edit .wslconfig!)
Having done all of that, set up the Windows server, started WSL running with your new kernel, and sudo modprobe
d in the modules you need, you should be able to install the usbip tools (using your distro’s package manager), and then run:
usbip list -r <server>
where server is the IP address of the Windows host, and get a list of the exported USB devices by bus ID, and then use:
usbip attach -r <server> -b <bus id>
to connect to them.
At which point you should be able to do whatever you wanted the USB device for in the first place!
(And pour yourself a drink. If you got here, you probably deserve it.)