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

PowerShell技术问询:多打印服务器活跃打印机CSV输出加间隔空行

实现多服务器活跃打印机CSV输出并添加服务器间空行分隔

核心思路

要实现不同服务器结果间的空行分隔,不建议在远程脚本中直接追加CSV文件(会有并发写入风险,且难以精准控制空行插入时机),更稳妥的方式是:

  1. 远程收集每台服务器的活跃打印机数据,返回至本地
  2. 本地统一处理数据,在不同服务器的结果之间插入空行(视觉分隔用,注意:空行不符合标准CSV规范,但Excel等工具可以正常识别)
  3. 最后将所有数据导出到目标CSV文件

优化后的代码实现

第一步:修改远程脚本块,只返回数据不直接导出

# 定义远程执行的脚本块,仅返回活跃打印机对象,不直接写文件
$ActivePrinterResult = {
    # 获取所有打印机的关键属性
    $printers = Get-Printer | Select-Object portName, DriverName, Comment

    # 遍历打印机,筛选活跃设备并构造输出对象
    foreach ($printer in $printers) {
        # 仅执行一次Test-Connection,同时获取连通性和IP
        $connectionTest = Test-Connection $printer.portname -Count 1 -ErrorAction SilentlyContinue
        if ($connectionTest) {
            [pscustomobject]@{
                FilePrinterServer  = $env:computername
                PrinterName        = $printer.Portname
                IPV4Address        = $connectionTest.IPV4Address.ToString()
                PrinterDriverName  = $printer.DriverName
                PrinterComment     = $printer.Comment
            }
        }
        else {
            # 将不响应的打印机记录到单独文件(远程写入,确保共享路径有权限)
            "$($printer.Portname) on $($env:computername) not responding" | 
                Out-File -FilePath '\\Testing01\TestFolder$\NotRespondingPrinter.csv' -Append -Encoding utf8
        }
    }
}

第二步:本地执行远程命令,收集所有数据并插入分隔行

# 读取服务器列表,执行远程命令并收集结果
$allResults = Invoke-Command -ComputerName (Get-Content Serverlist.txt) -ScriptBlock $ActivePrinterResult -Credential $Credentials

# 按服务器分组,插入空行分隔
$finalOutput = @()
$serverGroups = $allResults | Group-Object -Property FilePrinterServer

foreach ($group in $serverGroups) {
    # 添加当前服务器的所有打印机数据
    $finalOutput += $group.Group
    # 添加一行空对象(所有属性为空,实现CSV中的空行效果)
    $finalOutput += [pscustomobject]@{
        FilePrinterServer  = $null
        PrinterName        = $null
        IPV4Address        = $null
        PrinterDriverName  = $null
        PrinterComment     = $null
    }
}

# 移除最后多余的空行(可选,根据需求决定)
$finalOutput = $finalOutput | Select-Object -SkipLast 1

# 导出到CSV文件
$finalOutput | Export-Csv -Path '\\Testing01\TestFolder$\Outfile.CSV' -NoTypeInformation -Encoding utf8

关键说明

  1. 减少远程文件操作:将数据统一返回本地处理,避免多服务器同时写入同一CSV文件的并发冲突
  2. 优化Test-Connection调用:原脚本执行两次Test-Connection,修改后仅执行一次,提升效率
  3. 空行实现方式:通过添加属性全为空的自定义对象,在CSV中生成空行,Excel打开后会显示为空白行,满足管理层视觉区分需求
  4. 编码问题:添加-Encoding utf8参数,避免中文乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:45:40