如何用PowerShell从批量打印机中获取总打印作业数?
批量获取打印机总打印作业数的问题排查与解决
问题根源
你的问题大概率出在三个核心点:
- 循环逻辑错误,未遍历CSV所有行,仅处理了最后一条记录
- IP地址包含无效字符(空格、换行等),导致拼接的URL格式不合法
- URL拼接时缺少必要的协议前缀(如
http://),或变量引用错误
修正后的批量脚本
# 导入CSV文件,替换为你的实际文件路径 $printerList = Import-Csv -Path "打印机IP列表.csv" # 遍历每一台打印机 foreach ($printer in $printerList) { # 清理IP中的空格、换行等无效字符 $validIp = $printer.PortName.Trim() # 拼接标准HTTP URL $targetUri = "http://$validIp/JOBLOG.htm" try { # 发起请求,设置超时避免长时间等待 $webResponse = Invoke-WebRequest -Uri $targetUri -TimeoutSec 15 # 替换为你提取总打印作业数的原有逻辑 # 示例:假设目标数据在某个<td>标签后,根据实际页面结构调整 $totalJobs = ($webResponse.ParsedHtml.getElementsByTagName("td") | Where-Object { $_.innerText -eq "总打印作业数" }).nextSibling.innerText # 输出结构化结果 [PSCustomObject]@{ PrinterIP = $validIp TotalJobs = $totalJobs Status = "成功" } } catch { # 捕获错误并记录,不中断批量任务 [PSCustomObject]@{ PrinterIP = $validIp TotalJobs = $null Status = "失败:$($_.Exception.Message)" } } }
关键修复点说明
- 遍历所有打印机:通过
foreach循环遍历CSV每一行,确保每台打印机都被处理 - 清理IP数据:用
Trim()去除IP前后的空白字符,避免生成格式错误的URL - 标准URL拼接:明确添加
http://协议前缀,确保生成符合Uri规范的请求地址 - 异常容错:
try/catch块保证单台打印机请求失败时,整个批量任务继续执行,同时记录错误原因 - 结构化输出:用自定义对象输出结果,方便后续导出为CSV(添加
| Export-Csv -Path "结果.csv" -NoTypeInformation即可)
额外排查步骤
- 检查CSV数据:运行
Get-Content "打印机IP列表.csv" | Select-Object -First 5查看前5行,确认PortName列的IP没有多余字符 - 验证单IP可用性:从CSV中选一个报错的IP,手动在浏览器访问
http://[IP]/JOBLOG.htm,确认页面可正常打开 - 调试URL生成:在循环中加入
Write-Host "当前请求:$targetUri",实时查看生成的URL是否符合预期
内容的提问来源于stack exchange,提问作者Oleg Kovalenko
相关产品推荐
相关产品推荐

