三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Win10打印机管理全攻略:从图形界面到PowerShell命令

Win10打印机管理全攻略:从图形界面到PowerShell命令

1. 从“找不到打印机”到“一览无余”:为什么需要列出已安装的打印机

前几天帮同事处理一个文档,他需要打印一份紧急合同,结果在Word的打印对话框里,翻来覆去就是找不到那台刚连接好的网络打印机。他急得满头大汗,嘴里念叨着“我明明装好了啊”。我过去一看,问题其实很简单:他之前安装过这台打印机的多个驱动版本(比如一个用于普通文档,一个用于高精度照片),系统里存在多个指向同一台物理设备的“打印机”,而Word默认选中的是那个错误的、状态为“脱机”的实例。这个场景,相信很多在Win10环境下办公的朋友都遇到过。

“列出所有已安装的打印机”这个操作,听起来基础,但却是解决一系列打印问题的第一步,也是关键一步。它不仅仅是打开“设备和打印机”窗口看一眼那么简单。对于IT管理员,需要批量审计公司电脑的打印设备;对于普通用户,在重装系统前需要备份打印机配置,或者在打印机共享出现故障时,需要理清本地与网络打印机的逻辑关系;甚至是在使用一些专业软件(如CAD、财务软件)进行打印设置时,也需要明确知道系统识别到的打印机具体名称和端口。仅仅依赖图形界面(GUI)有时并不够用,尤其是在需要自动化、批量处理或深度排查时,命令行工具的价值就凸显出来了。

本文将带你彻底掌握在Win10上列出所有打印机的几种核心方法。我们不会停留在简单的控制面板操作,而是会深入Windows PowerShell和命令提示符(CMD),揭秘如何通过命令获取更详细、更结构化的打印机信息。你会发现,当图形界面“失灵”或不够高效时,这些命令行工具才是真正的“幕后高手”。

2. 图形界面入门:控制面板与“设置”应用的双重路径

对于大多数用户,通过图形界面查看打印机是最直观的方式。Win10提供了两套略有差异的图形界面:传统的控制面板和现代的“设置”应用。了解两者的区别和适用场景,能让你更高效地解决问题。

2.1 传统控制面板:信息最全的“老管家”

控制面板里的“设备和打印机”视图,是信息呈现最全面、操作逻辑最接近历代Windows版本的地方。你可以通过多种方式打开它:

  1. 最直接的方法:在任务栏的搜索框(或按下Win + S)中,直接输入“控制面板”并打开,然后选择“查看设备和打印机”。
  2. 运行命令:按下Win + R,输入control printers后回车。这个命令会直接打开“设备和打印机”窗口,是我个人最常用的快捷方式。
  3. 通过设置中转:打开“设置”->“设备”->“打印机和扫描仪”,在右侧相关设置下点击“设备和打印机”。

打开后,你会看到一个包含所有设备类别的窗口。重点关注“打印机”部分。这里列出的每一个图标,都代表一个在系统中注册的“打印队列”,它可能对应一台真实的物理打印机,也可能是一个虚拟打印机(如“Microsoft Print to PDF”、“Fax”),或者一个指向网络打印机的连接。

注意:这里显示的“打印机”名称,是安装驱动时你自定义或默认生成的“友好名称”,它和驱动文件本身的名字、打印服务器的共享名可能都不相同。这是后续使用命令行时需要对应起来的关键信息。

在这个视图里,你可以右键点击任一打印机,选择“打印机属性”。在“常规”选项卡中,你可以看到更详细的型号、位置信息;在“端口”选项卡中,可以看到它具体连接在哪个端口上(如USB001、IP地址等)。这些信息对于高级排查至关重要。

2.2 现代“设置”应用:简洁但可能“藏私”

Win10的“设置”->“设备”->“打印机和扫描仪”界面设计更现代,列表更简洁。它会优先显示系统认为“常用”或“默认”的打印机。然而,正是这种“简洁”可能带来误导。

一个关键的差异点:“设置”应用中的列表,有时并不会显示所有通过传统方式安装的打印机,特别是某些旧式驱动安装的打印机,或者状态异常(如驱动损坏)的打印机。它更像一个经过筛选的“快捷视图”。而控制面板的“设备和打印机”则更像是底层数据库的完整“管理员视图”。因此,当你怀疑打印机列表不全时,第一反应应该是去控制面板里确认,而不是只相信“设置”应用。

实操心得:我习惯将control printers这个运行命令创建一个桌面快捷方式。当打印出现问题时,首先运行它,查看完整的打印机列表和每个打印机的状态图标(是否有感叹号、是否脱机),这能最快地定位问题是出在单个打印机上,还是整个打印子系统上。

3. 命令行威力初显:命令提示符下的打印机枚举

当需要自动化脚本、远程查询或者图形界面无法正常加载时,命令提示符(CMD)是你的可靠选择。它通过Windows Management Instrumentation命令行工具来获取系统信息。

3.1 使用wmic命令:获取结构化列表

wmic(Windows Management Instrumentation Command-line)是一个功能强大的命令行工具,可以查询几乎所有的系统硬件和软件信息。对于打印机,我们可以使用以下命令:

wmic printer get name, portname, drivername, default, network

执行这个命令后,你会得到一个格式清晰的表格输出:

NamePortNameDriverNameDefaultNetwork
Microsoft Print to PDFPORTPROMPT:Microsoft Print To PDF DriverTRUEFALSE
HP LaserJet MFP M436n192.168.1.100HP Universal Printing PCL 6FALSETRUE
FaxSHRFAX:Microsoft Shared Fax DriverFALSEFALSE

参数解析与排查价值

  • Name: 就是在控制面板里看到的打印机友好名称。这是用户交互时最主要的标识。
  • PortName: 打印机连接的端口。对于USB打印机,通常是USB001USB002这样的格式;对于网络打印机,则是它的IP地址(如192.168.1.100)或主机名端口(如\\SERVER\HPPrinter)。如果这里显示invalid或者为空,通常意味着端口配置错误或打印机连接中断。
  • DriverName: 驱动程序的名称。这个名称通常比较固定,是驱动包内部的标识。当打印机出现乱码或功能异常时,核对这里是否是正确的驱动名,是判断驱动是否损坏或错装的第一步。
  • Default: 是否为默认打印机。TRUE表示是,FALSE表示否。
  • Network: 是否为网络打印机。TRUE表示是网络打印机,FALSE表示是本地直接连接的打印机。

为什么用wmic而不仅仅是看图形界面?因为它的输出是结构化的文本,可以被其他命令(如findstr)过滤,也可以重定向到文件(> printers.txt)用于备份或报告。例如,你想快速找出所有网络打印机,可以运行:

wmic printer where network=true get name, portname

3.2 使用printui命令:调用打印管理对话框

printui.dll是Windows打印系统的用户界面库,通过rundll32命令可以调用它的一些功能。虽然它不直接列出列表,但能快速打开关键的管理窗口。

打开打印机服务器属性(可以查看所有端口和驱动):

rundll32 printui.dll,PrintUIEntry /s /t2

打开“添加打印机”向导(在排查时,可用于重新添加或测试驱动):

rundll32 printui.dll,PrintUIEntry /il

这些命令在编写批处理脚本,为不太懂电脑的用户一键打开特定打印管理界面时非常有用。

踩坑记录:有一次,用户的“设备和打印机”窗口打开后一片空白,什么也不显示。图形界面完全失效。这种情况下,wmic printer list brief命令依然可以正常列出所有打印机,这立刻让我排除了打印机服务彻底崩溃的可能性,将问题聚焦在用户配置文件或Shell扩展冲突上。命令行工具在GUI故障时,是无可替代的诊断底线。

4. PowerShell进阶:获取更强大、更灵活的控制能力

Windows PowerShell比CMD更强大,它面向对象,处理数据的能力远超纯文本的CMD。对于打印机的管理,PowerShell提供了Get-PrinterGet-PrintJob等一套完整的Cmdlet。

4.1 使用Get-Printer命令:面向对象的完整信息查询

在PowerShell(管理员或非管理员模式均可,但某些属性需要管理员权限)中,最基本的命令是:

Get-Printer

这会输出一个包含名称、计算机名、类型、驱动程序名称等基本属性的列表。

但它的真正威力在于可以输出详细的对象属性,并进行灵活的筛选和格式化。例如,获取最详细的列表:

Get-Printer | Format-List *

这条命令会列出每一个打印机的所有属性,可能多达几十项,包括Name,DriverName,PortName,Shared,ShareName,Published(是否在AD中发布),DeviceType,Status等。

常用属性解析与应用场景

  • JobCount: 当前排队中的打印作业数。如果某个打印机JobCount一直不为0且作业不减少,很可能出现了卡纸、缺纸或后台处理程序挂起。
  • Status: 打印机的当前状态(如Normal,Error,Offline)。可以通过Get-Printer | Where-Object {$_.Status -ne "Normal"}快速找出所有状态异常的打印机。
  • SharedShareName: 明确该打印机是否被共享以及共享名是什么。在排查网络共享打印故障时,这是必须核对的信息。

4.2 信息筛选、导出与自动化脚本示例

PowerShell的管道(|)和筛选功能让数据处理变得简单。

示例1:导出所有网络打印机的详细信息到CSV文件,用于资产统计。

Get-Printer | Where-Object {$_.Type -eq "Connection"} | Select-Object Name, DriverName, PortName, ComputerName | Export-Csv -Path "C:\NetworkPrinters.csv" -NoTypeInformation -Encoding UTF8

这里,-Type属性为Connection的通常是网络打印机(包括共享打印机)。导出的CSV文件可以用Excel打开,清晰明了。

示例2:一键禁用所有状态为“错误”的打印机。

Get-Printer | Where-Object {$_.Status -eq "Error"} | Disable-Printer -Confirm:$false

这个命令在远程维护多台电脑,需要快速隔离故障打印机时非常高效。-Confirm:$false参数用于跳过确认提示。

示例3:对比驱动版本,找出需要更新的打印机。假设你知道新驱动的名称是“HP Universal Printing PCL 6 (v2.0)”,可以运行:

Get-Printer | Where-Object {$_.DriverName -notlike "*Universal*PCL*6*"} | Format-Table Name, DriverName

这样可以快速找出所有驱动名称中不包含“Universal PCL 6”关键字的打印机,它们可能还在使用旧版驱动。

个人经验之谈:在部署新的网络打印机驱动后,我经常会写一个PowerShell脚本,循环检查域内所有目标计算机,使用Invoke-Command远程执行Get-Printer,确认新打印机是否成功安装,并验证其驱动名称和端口是否正确。这种自动化检查的效率,是手动登录每台电脑无法比拟的。

5. 系统配置与注册表:探寻打印机信息的终极仓库

当以上所有方法都显得“隔靴搔痒”,或者你需要理解打印机配置的存储原理时,就不得不深入到系统配置和Windows注册表了。这里存放着打印机定义的最终源头。

5.1 打印服务管理(printmanagement.msc

这是一个专业的管理工具,包含了比控制面板更丰富的视图。按下Win + R,输入printmanagement.msc并运行。如果系统提示需要安装,它通常包含在“打印和文件服务”管理工具中。

打开后,展开“打印服务器”->“本地”->“打印机”,这里会列出所有打印机。它的优势在于:

  • 驱动视图:可以单独查看“驱动程序”文件夹,里面列出了所有已安装的驱动程序包,无论当前是否有打印机在使用它。这对于清理陈旧的、无用的驱动文件非常有用。
  • 端口视图:清晰列出所有配置的打印端口(TCP/IP、本地端口等),你可以看到哪个端口被哪个打印机使用。
  • 更佳的组织性:对于拥有大量打印机的服务器或电脑,管理起来比控制面板更清晰。

5.2 注册表深处的打印机密钥

所有打印机的配置信息,最终都存储在Windows注册表中。相关的主要路径在:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers

警告:直接编辑注册表风险极高,错误修改可能导致系统或打印功能不可用。以下内容仅供了解和高级故障排查,不建议非专业人员修改。

在这个Printers键下,你会看到一系列以打印机“友好名称”命名的子键(但名称中的空格等字符可能被编码)。点开任意一个子键,你可以看到海量的值项,例如:

  • Name: 打印机名称。
  • Port: 使用的端口。
  • Printer Driver: 驱动程序名称。
  • Print Processor: 打印处理器(通常是winprint)。
  • SpoolDirectory: 后台打印文件夹路径。

一个实战排查案例:用户报告一台网络打印机反复提示“需要用户干预”。检查驱动、端口、网络均无问题。最后在注册表中该打印机的配置项下,发现一个DsDriverSetup的二进制值异常。通过对比一台正常电脑上同一打印机的注册表项,将异常值恢复,问题得以解决。这种问题,图形界面和常规命令是无法触及的。

为什么需要了解注册表?因为它能解释很多“灵异现象”。例如,为什么在控制面板删除了打印机,但某些软件里还能看到?可能是因为注册表项没有完全清除。为什么重装同型号打印机驱动会失败?可能是因为旧驱动的注册表残留项冲突。知道信息存储在哪里,是进行深度清理和修复的基础。

6. 实战场景串联:从列出信息到解决真实问题

掌握了各种列出打印机的方法后,我们如何将它们串联起来,解决文章开头提到的那些实际问题呢?下面通过几个典型场景,演示一个完整的排查思路。

6.1 场景一:打印机共享失败,客户端连接不上

问题:用户A共享了打印机,用户B通过网络路径\\A-PC\HPPrinter连接时失败。

排查链路

  1. 在主机A上验证共享基础

    • 运行control printers,右键点击目标打印机 -> “打印机属性” -> “共享”选项卡。确认“共享这台打印机”已勾选,记下“共享名”。
    • 在PowerShell中运行Get-Printer -Name "打印机名称" | Select-Object Shared, ShareName,进行双重确认。
    • 运行net share命令,查看是否列出了该打印机的共享名。如果没有,可能是共享服务或权限问题。
  2. 在主机A上检查防火墙与高级共享设置

    • 确保“文件和打印机共享”规则在Windows Defender防火墙中启用(专用和公用网络都需要检查)。
    • 在“网络和共享中心”->“高级共享设置”中,确保当前网络配置文件下,“启用文件和打印机共享”已打开。
  3. 在客户端B上排查连接路径

    • 首先,尝试在B电脑的“运行”中直接输入\\A-PC,看能否访问A电脑的共享根目录。如果不行,是网络发现或身份验证问题。
    • 如果能访问,再输入\\A-PC\HPPrinter。如果提示权限错误,需要在A电脑上为B电脑的用户或Everyone组添加打印权限。
  4. 使用命令行在B电脑上检查已安装的打印机

    • 在B电脑上运行Get-Printer,查看是否已经存在一个从\\A-PC\HPPrinter安装的打印机对象。如果存在但其状态异常,可以尝试Remove-Printer删除后重新添加。
    • 运行Test-NetConnection -ComputerName A-PC -Port 445测试到主机A的SMB端口连通性。

6.2 场景二:重装系统前,备份打印机配置

需求:电脑需要重装Win10系统,希望重装后能快速恢复所有打印机设置,包括复杂的网络打印机IP和驱动设置。

备份方案

  1. 信息清单备份:在PowerShell中运行:

    Get-Printer | Select-Object Name, DriverName, PortName, ShareName, Published, Comment | Export-Csv -Path "D:\PrinterBackup\PrinterList.csv" -NoTypeInformation -Encoding UTF8

    这个CSV文件是你的“地图”,记录了所有打印机的关键配置信息。

  2. 驱动文件备份(可选但推荐)

    • 打印机驱动文件通常位于C:\Windows\System32\spool\driversC:\Windows\System32\driverstore等目录,但手动备份复杂。
    • 更稳妥的方法是:对于每台打印机,尤其是型号较老或特殊的,提前从其官方网站下载好对应Win10版本的驱动程序安装包,保存在非系统盘。
  3. 恢复流程

    • 新系统安装后,首先安装必要的驱动程序(尤其是芯片组和网络驱动)。
    • 打开备份的CSV文件,按照清单,优先安装本地USB打印机。
    • 对于网络打印机,使用“添加打印机”->“我需要的打印机不在列表中”->“使用TCP/IP地址或主机名添加打印机”,然后输入备份的IP地址和驱动信息。
    • 对于共享打印机,通过\\计算机名\共享名的路径添加。

经验技巧:对于有大量网络打印机的环境,可以考虑使用打印服务器(物理或内置在路由器/Windows Server中)。这样客户端只需要连接打印服务器上的一个共享队列,所有驱动和配置都在服务器端管理。重装客户端系统时,只需重新连接这一个共享打印机即可,极大地简化了维护工作。

6.3 场景三:系统报错“打印机驱动无法使用”或“打印后台程序服务未运行”

问题:打印时弹出驱动错误,或提示后台程序服务问题。

深度排查

  1. 首先,列出打印机,观察异常:运行Get-Printer。如果列表为空,或者所有打印机状态异常,那很可能是系统级的打印服务(Spooler)出了问题。
  2. 检查打印后台处理程序服务
    • 运行services.msc打开服务管理器,找到“Print Spooler”。
    • 或者,在PowerShell中以管理员身份运行:
      Get-Service -Name Spooler
      查看其状态(Status)是否为“Running”,启动类型(StartType)是否为“Automatic”。
    • 如果服务停止,尝试启动它:Start-Service -Name Spooler。如果启动失败,查看事件查看器(eventvwr.msc)中“Windows日志”->“系统”下的相关错误事件。
  3. 针对特定打印机的驱动问题
    • Get-Printer的输出中,找到出问题的打印机,记下其DriverName
    • 打开“打印管理”(printmanagement.msc),在“驱动程序”中查找这个驱动。尝试右键“删除驱动程序包”,并勾选“删除驱动程序和驱动程序包”。注意:这会删除所有使用该驱动的打印机,请谨慎操作。
    • 然后从打印机官网下载最新驱动重新安装。
  4. 终极清理——注册表与文件残留
    • 如果以上无效,可能是驱动或配置残留导致。停止Print Spooler服务。
    • 清空后台打印文件夹:C:\Windows\System32\spool\PRINTERS(里面的文件可以全部删除)。
    • 在注册表编辑器中,备份后,尝试删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\[你的系统架构]\Drivers...\Printers下相关的可疑键值(需要对照正常电脑或非常小心)。
    • 重新启动Print Spooler服务,然后重新添加打印机。

这个过程体现了从“列出信息”开始,逐步深入,结合服务管理、文件操作和注册表检查的完整故障排查树。列出打印机是起点,它告诉你“有什么”;结合状态信息,它告诉你“谁病了”;再结合其他工具,你才能诊断出“病根”并“治疗”。

← 返回列表