如何通过Windows批处理解析prnmngr.vbs输出并格式化为CSV文件?
批量提取多服务器打印机信息并导出CSV的解决方案
我来给你整理一个实用的批处理脚本方案,刚好能解决你从多台服务器提取指定打印机字段并导出CSV的需求:
核心实现思路
- 用文本文件批量管理目标服务器列表,方便灵活添加/删除服务器
- 遍历每台服务器,调用系统自带的
Prnmngr.vbs获取完整打印机信息 - 逐行解析键值对内容,精准提取你需要的服务器名、打印机名、共享名、驱动名、端口名
- 把提取到的信息按CSV规范写入文件,自动处理字段中的特殊字符(比如逗号)
完整批处理脚本
@ECHO OFF setlocal enabledelayedexpansion :: 可配置参数 set "output_csv=Printers_Inventory.csv" :: 输出的CSV文件名 set "servers_list=servers.txt" :: 存放服务器列表的文本文件(每行一个服务器) set "print_script=%WINDIR%\System32\Printing_Admin_Scripts\en-US\Prnmngr.vbs" :: 生成CSV表头 echo "Server Name","Printer Name","Share Name","Driver Name","Port Name" > "%output_csv%" :: 检查服务器列表文件是否存在 if not exist "%servers_list%" ( echo 错误:未找到服务器列表文件 %servers_list%,请先创建该文件! pause exit /b 1 ) :: 开始遍历所有服务器 for /f "tokens=* delims=" %%s in (%servers_list%) do ( echo 正在处理服务器:%%s :: 调用VBS脚本获取当前服务器的打印机信息 for /f "tokens=* delims=" %%f in ('Cscript //nologo "%print_script%" -l -s "%%s"') do ( set "current_line=%%f" :: 匹配并提取各个字段 if "!current_line:~0,11!"=="Server name" set "server_name=!current_line:~13!" if "!current_line:~0,13!"=="Printer name" set "printer_name=!current_line:~15!" if "!current_line:~0,10!"=="Share name" set "share_name=!current_line:~12!" if "!current_line:~0,11!"=="Driver name" set "driver_name=!current_line:~13!" if "!current_line:~0,9!"=="Port name" set "port_name=!current_line:~11!" :: 当提取到端口名时,说明当前打印机的所有字段已收集完成,写入CSV if "!current_line:~0,9!"=="Port name" ( :: 用双引号包裹字段,避免逗号破坏CSV格式 echo "!server_name!","!printer_name!","!share_name!","!driver_name!","!port_name!" >> "%output_csv%" :: 重置变量,准备处理下一台打印机 set "server_name=" set "printer_name=" set "share_name=" set "driver_name=" set "port_name=" ) ) ) echo 所有服务器处理完成!结果已保存到 %output_csv% pause
使用步骤
- 1. 准备服务器列表:在脚本同目录下创建
servers.txt,每行输入一个服务器的名称或IP地址,比如:myserver1.com myserver2.com 192.168.1.50 - 2. 调整语言路径:如果你的Windows系统不是英文,需要把脚本中的
en-US改成对应语言的文件夹(比如中文系统是zh-CN) - 3. 运行脚本:双击批处理文件,等待执行完成,结果会自动保存到同目录下的
Printers_Inventory.csv
注意事项
- 确保运行脚本的Windows账号拥有访问目标服务器打印机的权限
- 如果打印机没有设置共享名,CSV中对应位置会显示为空的双引号,符合CSV格式规范
- 脚本会自动处理字段中的逗号,避免CSV文件格式错乱
内容的提问来源于stack exchange,提问作者munish
相关产品推荐
相关产品推荐

