PowerShell netsh 内联命令无法正常工作

PowerShell netsh inline command not working properly

当我运行

PS C:\WINDOWS\system32> wsl hostname -I
172.27.96.44
PS C:\WINDOWS\system32> netsh interface portproxy add v4tov4 listenport=3000 connectport=3000 connectaddress=172.27.96.44
PS C:\WINDOWS\system32> netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               3000        172.17.218.173  3000

成功,目标地址可以访问。但是当我 运行

netsh interface portproxy add v4tov4 listenport=3000 connectport=3000 connectaddress=$(wsl hostname -I)

PS C:\WINDOWS\system32>  netsh interface portproxy show all

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               3000        172.27.96.44    3000

目标地址不可访问。它只是没有回应。尽管它显示在 table 中。 我尝试了字符串转换,例如

netsh interface portproxy add v4tov4 listenport=3000 connectport=3000 connectaddress=([string] (wsl hostname -I));

但这并没有帮助。 为什么即使 IP 地址在 table 中也不起作用?

如果您获取 WSL 命令的输出和您认为相同值的逐字字符串,并将实际字节与 Format-Hex 进行比较,您会发现存在差异。

$output = WSL hostname -I

$output | Format-Hex


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   31 39 32 2E 31 36 38 2E 31 2E 36 38 20           192.168.1.68

VS

'192.168.1.68' | Format-Hex


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   31 39 32 2E 31 36 38 2E 31 2E 36 38              192.168.1.68

所以它加了一个值,一个20。我猜了一下,确实是一个space。

$output -replace '\s' | Format-Hex

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   31 39 32 2E 31 36 38 2E 31 2E 36 38              192.168.1.68

所以你可以用各种方法解决这个问题,但如图所示,它可以很简单。

$output = (WSL hostname -I) -replace '\s'

您始终可以测试变量的内容。我经常做这样的事情只是为了进行完整性检查。它肯定会在这里救你。

$output = WSL hostname -I

Write-Host "A$($output)A"

A192.168.1.68 A