在 PowerShell 中,你可以使用一些命令来管理打印机驱动的导入和导出操作。通过这些 PowerShell 命令,你可以方便地导出和导入打印机驱动,管理打印环境中的驱动程序。PowerShell 的强大功能和 Windows 的管理接口,可以在更复杂的环境中进行打印机驱动的管理,如批量操作或需要更详细控制的情况。
Printbrm.exe 完整解构
文件路径:
C:\Windows\System32\Printbrm.exe全称:Print Backup‑Restore Migration Tool,打印机迁移备份还原工具;属于 PrintBRM(Print Backup Restore Migration)组件。 作用:备份 / 还原 / 迁移 Windows 打印服务器配置:打印机队列、端口、驱动、打印处理器、表单、安全 ACL、打印机设置;用于打印服务器迁移、备份、灾难恢复。 支持模式:命令行模式;图形 UI 模式 (/UI);导出为.printerExport压缩包(CAB 格式)。
边界区分 | 组件 | 角色 | |---|---| |
printbrm.exe| 主程序入口;解析命令行,调用 PrintBRM API;UI 外壳 | |printbrmengine.dll|核心业务引擎 DLL;真正完成备份、导出、还原、导入逻辑 | |spoolsv.exe| 打印后台处理程序服务;打印驱动、队列、端口的系统真实载体 | |spoolss.dll| 打印后台客户端 API;printbrmengine.dll 大量调用 spoolss.dll 接口读取 / 写入打印系统配置 | |printui.dll| 打印机 UI 相关;部分表单、安全描述符辅助接口 | |printbrmui.dll| 图形界面 UI 逻辑,printbrm.exe /UI加载此 DLL|
重点:PrintBRM不做驱动二进制文件的打包拷贝;仅导出驱动元数据;还原目标服务器必须预先安装对应驱动包;只有 “打印机配置、队列、端口、ACL、表单” 被打包进 printerExport。
一、底层原理 & 内部五大模块
模块 1:命令行 / UI 调度模块(printbrm.exe 主程序)
- 解析命令参数:
‑B(备份)、‑R(还原)、‑A(分析)、‑F:文件名、‑UI(图形界面)、‑NOACL等参数。 - 参数校验:输出路径、权限校验;管理员权限强依赖,普通用户无法读取打印服务器完整配置。
- 二分支调度:
- 命令行模式:直接调用
printbrmengine.dll导出接口;控制台输出进度、错误。 - UI 模式:加载
printbrmui.dll,弹出向导窗口,由 UI 层再调用 printbrmengine 引擎。
- 命令行模式:直接调用
模块 2:备份导出引擎模块(printbrmengine.dll)
备份流程执行逻辑:
- 通过
spoolss.dll后台打印 API,枚举本机打印系统对象:- 打印机队列(Printer);
- 打印机端口(TCP/IP 端口、WSD、本地端口);
- 打印驱动元数据(驱动名称、版本、环境、打印处理器);
- 打印表单、纸张规格;
- 打印机安全 ACL、默认打印首选项;
- 将上述全部元数据序列化为 XML 描述文件。
- 将 XML 清单、端口配置、表单定义打包为 CAB 压缩包,后缀
.printerExport。
⚠️驱动 sys/dll 二进制文件不会打包进 cab;只保存驱动名称、版本等元信息。
- 写入日志,记录备份成功 / 失败项。
模块 3:分析校验模块(‑A 参数)
不做实际备份还原;读取本地打印系统或者读取已有的.printerExport文件,做兼容性分析:
- 检查驱动是否存在、驱动架构 (x86/x64) 是否匹配;
- 检查端口冲突、表单名称冲突;
- 输出报告,用于迁移前预检查。
模块 4:还原导入引擎模块(printbrmengine.dll)
还原.printerExport包到目标打印服务器:
- 解压 CAB 包,读取内部 XML 元数据清单。
- 按顺序执行还原: 1)还原自定义表单; 2)还原打印机端口(TCP/IP 端口等); 3)校验驱动:在本机驱动存储查找匹配驱动;如果本机没有对应驱动,该打印机队列还原失败; 4)创建打印机队列;应用打印机默认首选项; 5)恢复打印机安全 ACL(可通过
‑NOACL跳过 ACL 恢复)。 - 全部操作通过
spoolss.dll调用 spoolsv.exe 后台打印服务完成对象创建。
模块 5:日志与错误处理模块
- 生成迁移日志:默认路径
%WINDIR%\System32\spool\tools\PrintBRM\; - 记录跳过项、失败项;常见失败原因:驱动缺失、端口冲突、权限不足、spoolsv 服务未运行。
关键逻辑:printbrmengine.dll 本身不维护打印对象;所有真实的打印机、端口、驱动对象全部由 spoolsv.exe(打印后台服务)管理,PrintBRM 只是读取 / 写入配置的迁移工具。
二、依赖文件清单
主程序与核心 DLL
| 文件 | 路径 | 说明 |
|---|---|---|
printbrm.exe |
System32 | 主入口,命令行解析、UI 调度 |
printbrmengine.dll |
System32\spool\tools | 打印迁移核心引擎;备份、还原、分析业务逻辑 |
printbrmui.dll |
System32\spool\tools | 图形向导 UI,printbrm.exe /UI加载 |
spoolss.dll |
System32 | 打印后台客户端 API;枚举 / 创建打印机、端口、驱动的底层接口 |
持久化与输出产物
- 备份输出产物:
xxx.printerExport,本质是 CAB 压缩包,内部包含元数据 XML。 - 日志目录:
C:\Windows\System32\spool\tools\PrintBRM\
- 打印系统配置原始存储不在 PrintBRM:
- 打印机队列、端口、驱动注册表:
HKLM\SYSTEM\CurrentControlSet\Control\Print - 由 spoolsv.exe 维护;PrintBRM 读取此注册表区域并导出元数据。
系统依赖服务
| 服务名 | 显示名称 | 故障现象 |
|---|---|---|
Spooler |
Print Spooler 打印后台处理程序 | 停止:printbrm.exe 枚举打印机全部失败,备份还原报错;必须运行 |
| RpcSs | RPC 远程过程调用 | 打印后台 RPC 依赖,spoolsv 依赖 RPC |
权限硬性要求:必须管理员权限运行;普通用户无法读取完整打印服务器配置。
三、完整逻辑调用链路
链路 1:备份导出链路 printbrm.exe -B
printbrm.exe -B -F:D:\backup.printerExport
↓加载 printbrmengine.dll
printbrmengine.dll调用 spoolss.dll API
RPC → spoolsv.exe(Print Spooler服务)
读取注册表HKLM\SYSTEM\CurrentControlSet\Control\Print
返回打印机队列、端口、驱动元数据、表单、ACL
printbrmengine.dll序列化为XML,打包CAB → backup.printerExport
写入PrintBRM日志。
链路 2:还原导入链路 printbrm.exe -R
printbrm.exe -R -F:D:\backup.printerExport
↓printbrmengine.dll
解压printerExport(CAB),读取内部XML元数据
调用spoolss.dll,RPC通信spoolsv.exe
1. 创建自定义表单
2. 创建打印机端口
3. 校验本机打印驱动库;缺失驱动直接跳过对应打印机
4. 创建打印机队列,设置首选项、ACL
写入迁移日志,报告成功/失败项。
链路 3:图形 UI 模式
printbrm.exe /UI
printbrm.exe加载 printbrmui.dll → 弹出迁移向导
向导内部调用 printbrmengine.dll 执行备份/还原逻辑;底层依旧调用spoolss.dll → spoolsv.exe
链路 4:分析预校验模式
printbrm.exe -A -F:D:\backup.printerExport
printbrmengine.dll读取cab包元数据;对比本机驱动、端口;输出兼容性报告,不修改系统配置。
四、配套链:使用场景与上下游
- 打印服务器迁移:旧服务器 printbrm 备份;新服务器安装对应驱动包,printbrm 还原队列 / 端口配置。
- 打印服务器配置备份:定期备份 printerExport,用于灾难恢复。
- 跨架构迁移限制:x86 服务器导出,还原到 x64 服务器,必须提前安装对应 x64 版本打印驱动。
- 和打印管理器关系:
printui.exe /s(打印管理器)是手动 UI;printbrm 是批量迁移工具,底层同源都依赖 spoolsv/spoolss。
⚠️重要误区: printbrm.exe不会导出驱动二进制文件。很多人迁移失败就是没有在目标服务器提前部署对应驱动。
.printerExport只有配置元数据。
五、典型故障坑点
- Spooler 服务停止:printbrm 直接报错,无法枚举打印机。
- 缺少管理员权限:读取打印机 ACL、端口配置失败。
- 还原后打印机队列缺失:目标服务器缺少对应打印驱动;分析模式
‑A可以提前发现该问题。 - TCP 打印机端口冲突:目标服务器已有同名 IP 端口,还原端口失败。
- 还原后打印机权限异常:源服务器域 SID 在目标服务器不存在;可以使用
‑NOACL跳过 ACL 还原。 - 高版本 Windows 向低版本 Windows 还原:部分打印表单、新驱动元数据不兼容,部分队列跳过。
六、演进
- Windows Server 2003:引入 PrintBRM 工具,用于打印服务器迁移;
- Windows Server 2008 / Win10 / Win11 / Server2022‑2025:工具路径、内部架构不变;
printbrm.exe + printbrmengine.dll这套组件保持兼容; - 现代场景:与 Print Server 角色配套使用;微软推荐打印服务器迁移标准工具。
Printbrm.exe 英文全称、释义与配套说明
一、完整官方全称
1. 缩写拆分
Printbrm = Print Backup Restore Migrate- Print:打印、打印服务
- BRM:Backup / Restore / Migrate(备份、还原、迁移)
2. Microsoft Learn 官方标准工具全称
3. 配套组件完整命名
- PrintBrmEngine.exe:Print Backup Restore Migrate Engine(打印迁移后台引擎)
- PrintBrmUi.exe:Print Backup Restore Migrate UI Wizard(打印机迁移图形向导)
- PrintBrmPs.dll:Print BRM PowerShell COM Proxy
二、核心功能定义
.printerExport(CAB 压缩包)。三、底层配套链路
- 安全身份层
读写打印队列 ACL 权限基于账户 SID,域打印服务器配置存储在
ntds.dit;远程操作凭据由cmdkey.exe托管,Kerberos 票据使用klist查看。 - 网络传输层
远程备份 / 恢复通过 SMB (TCP445)、WinRM (TCP5985,http.sys 承载),依托 Realtek 网卡传输打印配置包。
- 打印服务依赖
与
spoolsv.exe打印后台处理程序联动,读取本地 / 远程打印驱动、语言监视器配置。 - 虚拟化配套
支持 VT-x/AMD-V 虚拟机打印服务器整机迁移,兼容 TPM 虚拟智能卡
tpmvscmgr加密导出打印备份文件。
四、同类打印工具对照
| 程序名 | 完整全称 | 用途 |
|---|---|---|
| Printbrm.exe | Print Backup Restore Migrate Utility | 命令行打印服务器迁移 |
| PrintBrmUi.exe | Print BRM UI Migration Wizard | 图形打印迁移向导 |
| PrintMig.exe | Print Migration Tool | 旧版打印迁移工具(已淘汰) |
更高级的 PowerShell 自动化打印机迁移,可以考虑以下步骤和技术:
自动化打印机迁移流程
-
批量导出和导入打印机配置
使用 PowerShell 脚本批量导出和导入多个打印机的配置。可以结合循环和数组来处理多个打印机。
powershellCopy Code# 批量导出打印机配置 $printers = Get-Printer | Where-Object { $_.Name -like "PrinterNamePattern*" } foreach ($printer in $printers) { Export-Printer -Name $printer.Name -Path "C:\Path\To\Export\$($printer.Name).printerExport" } # 批量导入打印机配置 $printExports = Get-ChildItem -Path "C:\Path\To\Export\" -Filter "*.printerExport" foreach ($exportFile in $printExports) { Import-Printer -File $exportFile.FullName } -
自动化安装打印机驱动
如果需要在新环境中安装新的驱动程序,可以编写脚本自动安装驱动程序。这可以通过使用
Add-PrinterDriverPackage或者调用pnputil命令行工具来完成。powershellCopy Code# 安装打印机驱动 $driverPath = "C:\Path\To\Driver\Inf\File.inf" Add-PrinterDriverPackage -Path $driverPath -
自动化创建和配置打印机端口
如果需要创建和配置打印机端口,可以使用
Add-PrinterPort命令。powershellCopy Code# 创建打印机端口 $portName = "IP_192.168.1.100" $portIPAddress = "192.168.1.100" Add-PrinterPort -Name $portName -PrinterHostAddress $portIPAddress -
使用 Printbrm.exe 工具进行完整迁移
如果需要包括更全面的打印环境迁移,可以结合使用 PowerShell 调用
printbrm.exe工具。powershellCopy Code# 使用 printbrm.exe 进行导出和导入 $exportPath = "C:\Path\To\Export\PrintConfig.bmr" $importPath = "C:\Path\To\Import\PrintConfig.bmr" Start-Process -FilePath "printbrm.exe" -ArgumentList "/export /all /f:$exportPath" -Wait -NoNewWindow Start-Process -FilePath "printbrm.exe" -ArgumentList "/import /all /f:$importPath" -Wait -NoNewWindow
脚本优化和扩展
-
错误处理和日志记录: 在脚本中加入错误处理机制,以及记录操作日志,可以帮助在迁移过程中更轻松地发现和解决问题。
-
参数化脚本: 如果需要在不同环境中重复使用脚本,可以考虑将脚本参数化,以便在不同环境或情况下灵活调整。
-
安全考虑: 在执行任何修改系统配置的操作时,请确保脚本以管理员权限运行,并采取安全措施以防止意外更改。
通过结合 PowerShell 强大的管理功能和自动化能力,可以显著简化和加速打印机迁移过程,尤其是在需要处理多个打印机或大规模环境时尤为有效。
在 PowerShell 中进行打印机迁移可以涉及不同的操作,如导出和导入打印机配置、驱动程序以及端口设置等。下面是一些常见的 PowerShell 命令和方法,用于打印机迁移过程中的各个方面:
导出和导入打印机配置
导出打印机配置
Export-Printer -Name "PrinterName" -Path "C:\Path\To\Export\PrinterConfig.printerExport"
此命令将指定打印机的配置导出到指定的文件路径中。
导入打印机配置
Import-Printer -File "C:\Path\To\Export\PrinterConfig.printerExport"
此命令将之前导出的打印机配置文件导入到当前系统中。
导出和导入打印机驱动
导出打印机驱动
Export-PrinterDriver -Name "PrinterName" -DestinationPath "C:\Path\To\Export\Driver"
此命令将指定打印机的驱动程序及其相关文件导出到指定路径。
导入打印机驱动
Add-PrinterDriverPackage -Path "C:\Path\To\Driver\Inf\File.inf"
此命令会安装指定路径的打印机驱动程序。
导出和导入打印机端口
导出打印机端口
Export-PrinterPort -Name "PrinterPortName" -FilePath "C:\Path\To\Export\PrinterPortConfig.xml"
此命令将指定打印机端口的配置导出到指定的 XML 文件中。
导入打印机端口
Import-PrinterPort -Name "PrinterPortName" -FilePath "C:\Path\To\Export\PrinterPortConfig.xml"
此命令将之前导出的打印机端口配置文件导入到当前系统中。
使用 Printbrm.exe (Print Backup Restore Migrate Utility)工具进行打印迁移
除了 PowerShell Cmdlet 外,也可以使用 Printbrm.exe 工具来进行更全面的打印机配置迁移,包括打印机、驱动程序、端口等。
导出打印配置
Start-Process -FilePath "printbrm.exe" -ArgumentList "/export /all /f:C:\Path\To\Export\PrintConfig.bmr" -Wait -NoNewWindow
导入打印配置
Start-Process -FilePath "printbrm.exe" -ArgumentList "/import /all /f:C:\Path\To\Export\PrintConfig.bmr" -Wait -NoNewWindow
这些命令和工具可以帮助你在 Windows 系统中有效地进行打印机迁移,无论是单个打印机的配置迁移还是整体打印环境的迁移都可以应对。在执行这些操作时,请确保在以管理员权限运行的 PowerShell 环境中操作,以确保权限足够执行所需的操作。
在 PowerShell 中,你可以使用一些命令来管理打印机驱动的导入和导出操作。下面是一些常用的命令和示例:
导出打印机驱动
使用 Export-PrinterDriver 命令可以导出指定打印机的驱动。
Export-PrinterDriver -Name "PrinterName" -Path "C:\Path\To\Export\Driver"
-Name "PrinterName":指定要导出驱动的打印机名称。-Path "C:\Path\To\Export\Driver":指定导出的驱动文件保存路径。
示例:
Export-PrinterDriver -Name "HP LaserJet" -Path "C:\PrinterDrivers"
这将导出名为 "HP LaserJet" 的打印机驱动到 C:\PrinterDrivers 目录下。
导入打印机驱动
使用 Import-PrinterDriver 命令可以导入打印机驱动。
Import-PrinterDriver -Name "PrinterName" -Path "C:\Path\To\Driver\Inf\File.inf"
-Name "PrinterName":指定要导入驱动的打印机名称。-Path "C:\Path\To\Driver\Inf\File.inf":指定要导入的驱动的 INF 文件路径。
示例:
Import-PrinterDriver -Name "HP LaserJet" -Path "C:\PrinterDrivers\HP_LaserJet.inf"
这将从 C:\PrinterDrivers\HP_LaserJet.inf 导入驱动到名为 "HP LaserJet" 的打印机。
注意事项
- 导出的驱动文件通常以
.inf结尾,这是打印机驱动程序的安装文件。 - 在导入驱动时,确保指定的驱动文件路径是正确的,并且拥有管理员权限执行 PowerShell 命令。
通过这些 PowerShell 命令,你可以方便地导出和导入打印机驱动,管理打印环境中的驱动程序。
1. COM 完整英文全称
2. WMI 全称补充(题干同步提及)
3. 配套衍生缩写
- DCOM:Distributed Component Object Model(分布式 COM,跨主机远程 COM 对象)
- CLSID:Class Identifier(COM 类唯一标识)
- IID:Interface Identifier(COM 接口唯一标识)
- ProgID:Programmatic Identifier(COM 对象友好字符串名称,注册表 INI 式存储)
4. 关联逻辑
在 PowerShell 中,还有一些更高级的方法来管理打印机驱动的导入和导出操作,特别是在批量操作或者需要更精细控制的场景下。这些方法通常涉及使用 WMI (Windows Management Instrumentation) 或者使用 COM (Component Object Model)对象来完成。
使用 WMI (Windows Management Instrumentation) 导出和导入打印机驱动
导出打印机驱动
$printerName = "PrinterName"
$destinationPath = "C:\Path\To\Export\Driver"
$printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name = '$printerName'"
$driverName = $printer.DriverName
$driverPath = Join-Path -Path $destinationPath -ChildPath "$driverName.inf"
$driver = Get-WmiObject -Query "SELECT * FROM Win32_PrinterDriver WHERE Name = '$driverName'"
$driver.DriveName | Out-File -FilePath $driverPath
$driverFiles = Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Path = '\\Windows\\System32\\DriverStore\\FileRepository\\$($driver.Name.Replace(' ', '_'))'"
foreach ($file in $driverFiles) {
Copy-Item -Path $file.Name -Destination $destinationPath
}
导入打印机驱动
$printerName = "PrinterName"
$driverPath = "C:\Path\To\Driver\Inf\File.inf"
# Retrieve the printer object
$printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name = '$printerName'"
# Install the driver
$driver = Get-WmiObject -Query "SELECT * FROM Win32_PrinterDriver WHERE INFName = '$($driverPath.Split('\')[-1])'"
if ($driver -eq $null) {
$driver = ([WMICLASS]"\\localhost\ROOT\cimv2:Win32_PrinterDriver").Install($driverPath, $true, $false, $false, 'Windows NT x86')
}
# Assign the driver to the printer
$driverInfo = [wmiclass]"Win32_PrinterDriver"
$driverInfo.Name = $driver.Name
$driverInfo.DriverPath = $driver.DriverPath
$driverInfo.InfName = $driver.InfName
$driverInfo.Version = $driver.Version
$driverInfo.FilePath = $driver.FilePath
$driverInfo.Location = $driver.Location
$driverInfo.Provider = $driver.Provider
$driverInfo.DriverType = $driver.DriverType
$driverInfo.PortName = $driver.PortName
$driverInfo.PrintProcessor = $driver.PrintProcessor
$driverInfo.StartMode = 'Auto'
$driverInfo.ErrorCleared = $driver.ErrorCleared
$driverInfo.ErrorDescription = $driver.ErrorDescription
$driverInfo.InstallDate = Get-Date
$driverInfo.psbase.Put()
使用 COM (Component Object Model) 对象导出和导入打印机驱动
# 创建一个 COM 对象来管理打印机
$printer = New-Object -ComObject "WScript.Network"
$printer.AddWindowsPrinterConnection("PrinterName")
# 导出打印机驱动
$driverPath = "C:\Path\To\Export\Driver"
$driverName = $printer.EnumPrinterDrivers("Windows NT x86") | Where-Object { $_ -like "*DriverName*" }
$driverInfPath = Join-Path -Path $driverPath -ChildPath "$driverName.inf"
$driverFiles = Get-ChildItem -Path "\\localhost\C$\Windows\System32\DriverStore\FileRepository\$driverName" -Recurse -File
Copy-Item -Path $driverFiles.FullName -Destination $driverPath
# 导入打印机驱动
$driverInfPath = "C:\Path\To\Driver\Inf\File.inf"
$printer.AddPrinterDriver("DriverName", 1, $driverInfPath)
这些方法利用了 PowerShell 的强大功能和 Windows 的管理接口,可以在更复杂的环境中进行打印机驱动的管理,如批量操作或需要更详细控制的情况。使用这些方法时,请确保在以管理员权限运行的 PowerShell 环境中执行,以确保操作的成功性和安全性。
基本的导入和导出命令外,如果需要更高级的管理操作,可以使用以下 PowerShell 命令和方法:
使用 WMI (Windows Management Instrumentation)
导出打印机驱动
$printerName = "PrinterName"
$destinationPath = "C:\Path\To\Export\Driver"
$printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name = '$printerName'"
$driverName = $printer.DriverName
$driverPath = Join-Path -Path $destinationPath -ChildPath "$driverName.inf"
$driver = Get-WmiObject -Query "SELECT * FROM Win32_PrinterDriver WHERE Name = '$driverName'"
$driver.DriveName | Out-File -FilePath $driverPath
$driverFiles = Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Path = '\\Windows\\System32\\DriverStore\\FileRepository\\$($driver.Name.Replace(' ', '_'))'"
foreach ($file in $driverFiles) {
Copy-Item -Path $file.Name -Destination $destinationPath
}
导入打印机驱动
$printerName = "PrinterName"
$driverPath = "C:\Path\To\Driver\Inf\File.inf"
# Retrieve the printer object
$printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name = '$printerName'"
# Install the driver
$driver = Get-WmiObject -Query "SELECT * FROM Win32_PrinterDriver WHERE INFName = '$($driverPath.Split('\')[-1])'"
if ($driver -eq $null) {
$driver = ([WMICLASS]"\\localhost\ROOT\cimv2:Win32_PrinterDriver").Install($driverPath, $true, $false, $false, 'Windows NT x86')
}
# Assign the driver to the printer
$driverInfo = [wmiclass]"Win32_PrinterDriver"
$driverInfo.Name = $driver.Name
$driverInfo.DriverPath = $driver.DriverPath
$driverInfo.InfName = $driver.InfName
$driverInfo.Version = $driver.Version
$driverInfo.FilePath = $driver.FilePath
$driverInfo.Location = $driver.Location
$driverInfo.Provider = $driver.Provider
$driverInfo.DriverType = $driver.DriverType
$driverInfo.PortName = $driver.PortName
$driverInfo.PrintProcessor = $driver.PrintProcessor
$driverInfo.StartMode = 'Auto'
$driverInfo.ErrorCleared = $driver.ErrorCleared
$driverInfo.ErrorDescription = $driver.ErrorDescription
$driverInfo.InstallDate = Get-Date
$driverInfo.psbase.Put()
使用 COM (Component Object Model) 对象
导出打印机驱动
# 创建一个 COM 对象来管理打印机
$printer = New-Object -ComObject "WScript.Network"
$printer.AddWindowsPrinterConnection("PrinterName")
# 导出打印机驱动
$driverPath = "C:\Path\To\Export\Driver"
$driverName = $printer.EnumPrinterDrivers("Windows NT x86") | Where-Object { $_ -like "*DriverName*" }
$driverInfPath = Join-Path -Path $driverPath -ChildPath "$driverName.inf"
$driverFiles = Get-ChildItem -Path "\\localhost\C$\Windows\System32\DriverStore\FileRepository\$driverName" -Recurse -File
Copy-Item -Path $driverFiles.FullName -Destination $driverPath
导入打印机驱动
# 创建一个 COM 对象来管理打印机
$printer = New-Object -ComObject "WScript.Network"
$printer.AddWindowsPrinterConnection("PrinterName")
# 导入打印机驱动
$driverInfPath = "C:\Path\To\Driver\Inf\File.inf"
$printer.AddPrinterDriver("DriverName", 1, $driverInfPath)
这些方法利用了 PowerShell 的WMI (Windows Management Instrumentation)接口和 COM (Component Object Model) 对象,可以在更复杂的环境中进行打印机驱动的管理,如批量操作或需要更详细控制的情况。使用这些方法时,请确保在以管理员权限运行的 PowerShell 环境中执行,以确保操作的成功性和安全性。
除了使用 WMI (Windows Management Instrumentation))和 COM (Component Object Model) 对象,还可以考虑以下 PowerShell 高级命令和方法来管理打印机驱动的导入和导出操作:
使用 Print Management Cmdlets
Windows 提供了一组专门用于打印管理的 PowerShell Cmdlet,可以通过 Print Management 模块来进行更高级的打印机和驱动程序管理操作。
导出打印机驱动
Export-PrinterDriver -Name "PrinterName" -DestinationPath "C:\Path\To\Export\Driver"
此命令会将指定打印机的驱动程序及其相关文件导出到指定路径。
导入打印机驱动
Add-PrinterDriverPackage -Path "C:\Path\To\Driver\Inf\File.inf"
此命令会安装指定路径的打印机驱动程序。
使用 Printbrm.exe(Print Backup Restore Migrate) 工具
Printbrm.exe(Print Backup Restore Migrate) 是 Windows 中的打印备份和恢复工具,可以通过 PowerShell 脚本调用来实现导出和导入打印机驱动的操作。
导出打印机驱动
$exportPath = "C:\Path\To\Export\Driver"
Start-Process -FilePath "printbrm.exe" -ArgumentList "/export /drivers /f:$exportPath\PrintDriverExport.bmr" -Wait -NoNewWindow
导入打印机驱动
$importPath = "C:\Path\To\Driver\Inf\File.inf"
Start-Process -FilePath "printbrm.exe" -ArgumentList "/import /drivers /f:$importPath" -Wait -NoNewWindow
这些方法利用了 Windows 提供的官方工具和 Cmdlet,能够更方便地进行打印机驱动的管理,尤其适用于大规模环境或需要自动化的场景。使用这些命令和工具时,建议在以管理员身份运行的 PowerShell 环境中执行,以确保操作的成功性和安全性。
Printbrm.exe(Print Backup Restore Migrate) 是一个 Windows 命令行工具,用于备份和恢复打印机配置、打印队列和打印驱动程序。它可以帮助您将打印机配置从一台服务器迁移到另一台服务器,或者备份和恢复打印机配置以防止数据丢失。
Printbrm.exe(Print Backup Restore Migrate) 的常用参数包括:
-s:指定目标服务器-b:备份服务器到指定文件-r:恢复配置文件到服务器-q:查询服务器或备份文件-f:指定备份文件-d:解压备份文件到目录(与-r一起使用),或重新打包备份文件从目录(与-b一起使用)-o:强制覆盖现有对象-p:发布所有打印机在目录中,或发布最初发布的打印机-nobin:省略二进制文件从备份-lpr2tcp:将 LPR 端口转换为标准 TCP/IP 端口在恢复时-c:使用指定配置文件-noacl:删除打印队列中的 ACL-?:显示帮助
例如,您可以使用以下命令备份打印机配置:
1printbrm.exe -s \\myoldprintserver -b -f printers.printerExport然后,您可以使用以下命令恢复打印机配置:
1printbrm.exe -s \\newprintserver -r -f printers.printerExport -o force您还可以使用 -c 参数指定配置文件,以便在恢复时映射旧驱动程序到新驱动程序。例如:
1<BrmConfig>
2 <PLUGINS>
3 </PLUGINS>
4 <LanguageMonitors>
5 </LanguageMonitors>
6 <DriverMap>
7 <DRV old="OldDriverName1" new="NewDriverName1"/>
8 <DRV old="OldDriverName2" new="NewDriverName2"/>
9 </DriverMap>
10</BrmConfig>然后,您可以使用以下命令恢复打印机配置:
1printbrm.exe -s \\newprintserver -r -f printers.printerExport -c BrmConfig.xml -o forcePrintbrm.exe(Print Backup Restore Migrate) 是一个强大的工具,可以帮助您管理打印机配置和迁移打印机设置。

浙公网安备 33010602011771号