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

如何让PowerShell脚本中两个Cmdlet按序执行并正常显示结果?

问题:PowerShell脚本中命令执行顺序异常,pause前仅显示第一个命令结果

需求背景

需要批量获取多台电脑的MAC地址与IP地址,已找到对应PowerShell命令:

  • 获取MAC地址:
Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress
  • 获取IP地址:
Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress

异常现象

将两个命令写入example.ps1脚本后:

Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress;
Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress;
pause;

执行时出现异常:仅第一个命令的结果在pause执行后才显示,第二个命令的结果完全未输出,示例输出如下:

Press Enter to continue...: 

InterfaceAlias IPAddress     
-------------- ---------     
Ethernet       255.255.255.255
Wi-Fi          255.255.255.255

目前已验证:将命令放在bat文件中通过powershell -Command调用可正常运行,现需要PowerShell脚本内的解决方案。

解决方法

方法1:用Out-Host强制控制台输出

在每个命令后添加| Out-Host,强制将结果直接输出到控制台,绕过PowerShell的默认管道缓冲机制:

Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress | Out-Host;
Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress | Out-Host;
pause;

方法2:先存储结果再统一输出(推荐)

先将两个命令的结果存储到变量中,再统一输出,最后执行pause,避免缓冲问题:

# 分别获取IP和MAC信息
$ipList = Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress
$macList = Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress

# 依次输出结果
$ipList
$macList

pause;

方法3:用Write-Output显式输出结果

用Write-Output包裹每个命令的结果,确保结果被立即推送至输出流:

Write-Output (Get-NetIPAddress -InterfaceAlias "*Ethernet*","*Wi-Fi*" -AddressFamily IPv4 | Select InterfaceAlias, IPAddress);
Write-Output (Get-NetAdapter -Name "*Ethernet*","*Wi-Fi*"| Select Name,MacAddress);
pause;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:15:43