'Why does this Powershell subexpression operator command not work?
I am trying to understand why a Powershell one liner I want to use to setup a port proxy to a WSL instance seemingly does not work, but running it without the grouping/substitution does work. Steps:
Get the IP address of WSL instance:
wsl hostname -I
> 172.18.108.185
Try one liner with the previous command as subexpression:
netsh interface portproxy add v4tov4 listenport=3443 `
listenaddress=0.0.0.0 connectport=3443 `
connectaddress=$(wsl hostname -I)
That seems to work because listing port proxies shows it:
netsh interface portproxy show v4tov4
> Listen on ipv4: Connect to ipv4:
>
> Address Port Address Port
> --------------- ---------- --------------- ----------
> 0.0.0.0 3443 172.18.108.185 3443
(I have also tried it without the $.)
However, the proxy forwarding does not actually work.
If I then do the same command without the substitution:
netsh interface portproxy add v4tov4 listenport=3443 `
listenaddress=0.0.0.0 connectport=3443 `
connectaddress=172.18.108.185
The output looks exactly the same:
netsh interface portproxy show v4tov4
> Listen on ipv4: Connect to ipv4:
>
> Address Port Address Port
> --------------- ---------- --------------- ----------
> 0.0.0.0 3443 172.18.108.185 3443
However, this time it works.
What is different between these two executions such that one works, one doesn't, and yet the results look exactly the same?
Solution 1:[1]
Abraham Zinala provided the crucial pointer:
The output from wsl hostname -I - surprisingly - has a trailing space, which must be trimmed in order for the IP address represented by the output to be used as an argument passed to netsh:
netsh interface portproxy add v4tov4 listenport=3443 `
listenaddress=0.0.0.0 connectport=3443 `
connectaddress=$((wsl hostname -I).Trim())
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | mklement0 |
