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

如何让PowerShell中Write-Host输出同时显示到屏幕并写入文件?

解决PowerShell脚本同时输出到屏幕和文件的问题

针对你大量使用Write-Host且需要同时保留屏幕输出、写入文件的需求,提供两种实用方案:

方案1:自定义输出函数(适合长期修改脚本)

定义一个同时处理屏幕输出和文件写入的函数,直接替换脚本中所有Write-Host调用即可,保留原有参数格式:

# 定义自定义函数,支持原Write-Host的多参数格式
function Write-HostAndFile {
    param(
        [Parameter(ValueFromRemainingArguments=$true)]
        [string[]]$Messages,
        # 可自定义输出文件路径
        [string]$FilePath = "dns-lookup-results.txt"
    )
    $combinedMsg = $Messages -join " "
    # 输出到屏幕,保留原Write-Host的显示效果
    Write-Host $Messages
    # 追加内容到文件
    Add-Content -Path $FilePath -Value $combinedMsg
}

修改后的脚本片段示例

修复原脚本语法错误后,替换所有Write-Host为Write-HostAndFile:

param($FName)

# 插入上面的自定义函数
function Write-HostAndFile {
    param(
        [Parameter(ValueFromRemainingArguments=$true)]
        [string[]]$Messages,
        [string]$FilePath = "dns-lookup-results.txt"
    )
    $combinedMsg = $Messages -join " "
    Write-Host $Messages
    Add-Content -Path $FilePath -Value $combinedMsg
}

$tgt = Import-Csv $FName
$tgt | ForEach-Object {
    Write-HostAndFile "Checking IP Address $($_.IPAddr)"
    Resolve-DnsName -Name $_.IPAddr 2>$null | Out-Null
    $ResolvResult = $?
    if ($ResolvResult -eq $TRUE) {
        $RevHstName = Resolve-DnsName -name $_.IPAddr | Select-Object -Property NameHost -First 1
        $RevHstName = $RevHstName -replace ".*=" -replace "}"
        # 修正split语法,点号需转义
        $TestRoot = ($RevHstName -split "\.",3)[1]
        if (($TestRoot -like '*-servers*') -or ($TestRoot -like '*awsdns*'))
        {
            Write-HostAndFile $_.IPAddr "looks up as a ROOT or AWS SERVER"
        }
        else
        {
            Write-HostAndFile "Successful Lookup for" $_.IPAddr "is" $RevHstName
        }
    }
    # 省略其他逻辑
}

方案2:信息流重定向(无需修改脚本,临时使用)

PowerShell 5.1及以上版本中,Write-Host的输出属于信息流(编号6),可通过重定向将其导入成功输出流,再用Tee-Object同时输出到屏幕和文件。直接在调用脚本时执行:

.\你的脚本名.ps1 -FName 输入文件.csv 6>&1 | Tee-Object -FilePath 输出文件.txt

两种方案对比

  • 自定义函数:需修改脚本,但可灵活控制文件路径、输出格式,适合长期维护的脚本。
  • 信息流重定向:无需改动脚本,仅需在调用时添加参数,适合临时导出需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:22:03