能否将Write命令的输出保存到文件?(API与PowerShell场景)
问题原因
你的判断是正确的,Write-WeatherCurrent函数的输出内容没有写入PowerShell默认的标准成功输出流,而是直接输出到控制台,Out-File、>>默认仅捕获标准成功流内容,因此无法写入文件,导致生成的文件为空。
解决方法
- 方法1:捕获信息流(适配PowerShell 5.1及以上版本,绝大多数场景可用)
该函数大概率使用Write-Host输出内容,PowerShell 5.1及以上版本中Write-Host输出归属6号信息流,将6号流合并到标准成功流后即可正常重定向:
# 覆盖写入文件 Write-WeatherCurrent -City $place -ApiKey $ApiKey -Units metric 6>&1 | Out-File -FilePath 目标文件路径.txt -Encoding utf8 # 追加写入文件 Write-WeatherCurrent -City $place -ApiKey $ApiKey -Units metric 6>&1 >> 目标文件路径.txt
- 方法2:全流捕获
如果不确定输出所属的流,直接合并所有流到标准成功流后重定向:
Write-WeatherCurrent -City $place -ApiKey $ApiKey -Units metric *>&1 | Out-File -FilePath 目标文件路径.txt -Encoding utf8
- 方法3:转录控制台输出
如果上述方法都无效,可以使用PowerShell的转录功能直接记录控制台所有输出:
# 启动转录,后续所有控制台输出都会写入指定文件 Start-Transcript -Path 目标文件路径.txt Write-WeatherCurrent -City $place -ApiKey $ApiKey -Units metric # 停止转录 Stop-Transcript
转录生成的文件会附带启动/停止的日志头尾,你可以根据需要自行裁剪对应内容。
内容的提问来源于stack exchange,提问作者Searching....
相关产品推荐
相关产品推荐

