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

PowerShell打印机Ping监控脚本表格格式输出问题求助

解决方案

直接修改代码,通过创建自定义对象存储打印机名称和状态,再用Format-Table输出结构化表格。以下是调整后的完整代码:

# 获取AD中的打印机对象,仅选择需要的属性(提升查询效率)
$printers = Get-AdObject -Filter "objectCategory -eq 'printqueue'" -Properties name, portName | Select-Object name, portName

# 循环监控逻辑
Do {
    $downcount = 0
    # 存储监控结果的数组
    $monitorResults = @()

    # 遍历每个打印机
    foreach ($printer in $printers) {
        $hostname = $printer.portName
        if ($hostname.Length -gt 0) {
            # 测试打印机端口主机的连通性
            $isOnline = Test-Connection -ComputerName $hostname -Count 1 -ErrorAction SilentlyContinue
            
            # 确定状态文本
            $status = if ($isOnline) { "在线" } else { "离线" }
            if (-not $isOnline) { $downcount++ }

            # 创建自定义对象,关联打印机名称与状态
            $resultObj = [PSCustomObject]@{
                PrinterName = $printer.name
                Status      = $status
            }
            $monitorResults += $resultObj
        }
    }

    # 清屏后输出监控结果
    Clear-Host
    Write-Host "打印机监控结果 $(Get-Date)" -ForegroundColor Cyan
    $monitorResults | Format-Table PrinterName, Status -AutoSize

    # 输出离线打印机计数
    Write-Host "`n离线打印机数量: $downcount" -ForegroundColor ($downcount -gt 0 ? 'Red' : 'Green')

    # 等待下一轮检测
    Write-Host -NoNewline "等待下一次检测"
    for ($s=0; $s -le 6; $s++) {
        Write-Host -NoNewline "."
        Start-Sleep 5
    }
    Write-Host ""
} while ($true)

关键改动说明

  • 精简AD查询:去掉Select-Object -Property *,仅获取name(打印机名称)和portName(待检测主机),减少不必要的资源占用。
  • 结构化存储结果:用[PSCustomObject]创建包含PrinterName和Status的对象,这是实现表格输出的核心——只有结构化对象才能被Format-Table正确解析成列。
  • 关联打印机与状态:直接遍历AD打印机对象,同时保留打印机名称和对应端口的映射,解决原代码仅输出端口主机、丢失打印机原名的问题。
  • 优化输出体验:每次循环前清屏,让表格展示更整洁;保留离线计数和等待提示,兼顾监控实用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:45:32