You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell脚本执行WSL命令获取Ubuntu实例IP报错求助

问题分析与解决

你的脚本报错核心原因是PowerShell对双引号内的$2进行了提前解析,同时引号嵌套的转义逻辑有误:

  • 双引号包裹的字符串中,PowerShell会把$2识别为自身的变量(此时$2为空值),导致传递给awk的命令变成{print },直接引发语法错误;
  • 多层引号嵌套时,未正确处理WSL/bash需要的转义规则。

修复方案

方案1:用单引号包裹WSL命令,避免PowerShell解析内部变量

单引号内的内容不会被PowerShell解析,仅会原样传递给WSL的bash执行:

$command = 'ip addr show eth0 | grep "inet\b" | awk "{print \$2}" | cut -d/ -f1'
$ip = wsl $command

方案2:显式调用bash执行完整命令(推荐)

直接指定WSL使用bash处理命令,同时对$2添加反斜杠转义,防止PowerShell提前解析:

$ip = wsl bash -c "ip addr show eth0 | grep 'inet\b' | awk '{print \$2}' | cut -d/ -f1"

方案3:简化管道,用awk完成所有处理

可以合并多步管道为单步awk命令,减少工具依赖:

$ip = wsl 'ip addr show eth0 | awk "/inet\\b/ {split(\$2, ip_part, \"/\"); print ip_part[1]}"'

验证执行

获取IP后可直接输出查看结果:

Write-Host "WSL Ubuntu实例IP: $ip"

内容的提问来源于stack exchange,提问作者radop33392

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:55:25