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

优化15万+主机名的PowerShell IP查询脚本,添加运行状态反馈

改进PowerShell DNS查询脚本:大列表处理的状态反馈与增量写入

针对处理15万+主机名时无运行反馈、风险高的问题,以下是修改后的脚本,实现每200条增量写入CSV+实时状态提示,同时优化内存占用:

# 配置参数
$inputPath = "./FULl_List_hosts_all_CSV_V2.txt"
$outputPath = "./pingstatus.csv"
$batchSize = 200  # 每处理多少条写入一次CSV

# 初始化变量
$Servers = Get-Content -Path $inputPath
$totalCount = $Servers.Count
$counter = 0
$failCount = 0
$batchData = @()

# 提前清空输出文件(避免追加旧数据)
if (Test-Path $outputPath) { Remove-Item $outputPath -Force }

foreach($Server in $Servers) {
    $Server = $Server.Trim()
    $counter++
    
    try {
        $DNSCheck = [System.Net.Dns]::GetHostEntry($Server)
        $ipv4 = ($DNSCheck.AddressList | Where-Object {$_.AddressFamily -eq 'InterNetwork'})[0].IPAddressToString
        $batchData += [PsCustomObject]@{ 
            'Server name' = $Server
            'IP Address'  = $ipv4
        }
    }
    catch {
        $failCount++
        $batchData += [PsCustomObject]@{ 
            'Server name' = $Server
            'IP Address'  = 'n/a'
        }
    }

    # 实时输出状态
    Write-Host "处理进度: $counter/$totalCount | 失败数: $failCount | 当前主机: $Server" -ForegroundColor Cyan

    # 每处理batchSize条,写入CSV并清空临时数组
    if ($counter % $batchSize -eq 0) {
        Write-Host "已完成$counter条,正在写入CSV..." -ForegroundColor Green
        if (-not (Test-Path $outputPath)) {
            $batchData | Export-Csv -Path $outputPath -NoTypeInformation
        }
        else {
            $batchData | Export-Csv -Path $outputPath -Append -NoTypeInformation
        }
        $batchData = @()  # 清空临时数组释放内存
    }
}

# 处理剩余不足batchSize的条目
if ($batchData.Count -gt 0) {
    Write-Host "处理完成,写入剩余$($batchData.Count)条数据..." -ForegroundColor Green
    if (-not (Test-Path $outputPath)) {
        $batchData | Export-Csv -Path $outputPath -NoTypeInformation
    }
    else {
        $batchData | Export-Csv -Path $outputPath -Append -NoTypeInformation
    }
}

Write-Host "全部处理完成!总数量: $totalCount | 失败数: $failCount" -ForegroundColor Yellow

关键改动说明

  • 增量写入机制:用临时数组$batchData存储批次数据,每满200条写入CSV并清空数组,避免15万条数据全部占用内存
  • 实时状态反馈:通过Write-Host输出当前处理进度、失败统计和正在处理的主机名,随时确认脚本运行状态
  • 参数化配置:把路径、批次大小做成变量,方便后续调整(比如把$batchSize改成500提升写入效率)
  • 初始化清理:提前删除旧的输出文件,避免追加重复数据
  • 收尾处理:循环结束后检查剩余未写入的批次数据,确保全部导出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:12:24