在 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 主程序)

  1. 解析命令参数:‑B(备份)‑R(还原)‑A(分析)‑F:文件名‑UI(图形界面)‑NOACL等参数。
  2. 参数校验:输出路径、权限校验;管理员权限强依赖,普通用户无法读取打印服务器完整配置。
  3. 二分支调度:
    • 命令行模式:直接调用printbrmengine.dll导出接口;控制台输出进度、错误。
    • UI 模式:加载printbrmui.dll,弹出向导窗口,由 UI 层再调用 printbrmengine 引擎。

模块 2:备份导出引擎模块(printbrmengine.dll)

备份流程执行逻辑:

  1. 通过spoolss.dll后台打印 API,枚举本机打印系统对象:
    • 打印机队列(Printer);
    • 打印机端口(TCP/IP 端口、WSD、本地端口);
    • 打印驱动元数据(驱动名称、版本、环境、打印处理器);
    • 打印表单、纸张规格;
    • 打印机安全 ACL、默认打印首选项;
  2. 将上述全部元数据序列化为 XML 描述文件。
  3. 将 XML 清单、端口配置、表单定义打包为 CAB 压缩包,后缀.printerExport

⚠️驱动 sys/dll 二进制文件不会打包进 cab;只保存驱动名称、版本等元信息。

  1. 写入日志,记录备份成功 / 失败项。

模块 3:分析校验模块(‑A 参数)

不做实际备份还原;读取本地打印系统或者读取已有的.printerExport文件,做兼容性分析:

  • 检查驱动是否存在、驱动架构 (x86/x64) 是否匹配;
  • 检查端口冲突、表单名称冲突;
  • 输出报告,用于迁移前预检查。

模块 4:还原导入引擎模块(printbrmengine.dll)

还原.printerExport包到目标打印服务器:

  1. 解压 CAB 包,读取内部 XML 元数据清单。
  2. 按顺序执行还原: 1)还原自定义表单; 2)还原打印机端口(TCP/IP 端口等); 3)校验驱动:在本机驱动存储查找匹配驱动;如果本机没有对应驱动,该打印机队列还原失败; 4)创建打印机队列;应用打印机默认首选项; 5)恢复打印机安全 ACL(可通过‑NOACL跳过 ACL 恢复)。
  3. 全部操作通过spoolss.dll调用 spoolsv.exe 后台打印服务完成对象创建。

模块 5:日志与错误处理模块

  1. 生成迁移日志:默认路径 %WINDIR%\System32\spool\tools\PrintBRM\
  2. 记录跳过项、失败项;常见失败原因:驱动缺失、端口冲突、权限不足、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;枚举 / 创建打印机、端口、驱动的底层接口

持久化与输出产物

  1. 备份输出产物:xxx.printerExport,本质是 CAB 压缩包,内部包含元数据 XML。
  2. 日志目录:
C:\Windows\System32\spool\tools\PrintBRM\
  1. 打印系统配置原始存储不在 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包元数据;对比本机驱动、端口;输出兼容性报告,不修改系统配置。

四、配套链:使用场景与上下游

  1. 打印服务器迁移:旧服务器 printbrm 备份;新服务器安装对应驱动包,printbrm 还原队列 / 端口配置。
  2. 打印服务器配置备份:定期备份 printerExport,用于灾难恢复。
  3. 跨架构迁移限制:x86 服务器导出,还原到 x64 服务器,必须提前安装对应 x64 版本打印驱动
  4. 和打印管理器关系:printui.exe /s(打印管理器)是手动 UI;printbrm 是批量迁移工具,底层同源都依赖 spoolsv/spoolss。

⚠️重要误区: printbrm.exe不会导出驱动二进制文件。很多人迁移失败就是没有在目标服务器提前部署对应驱动。.printerExport只有配置元数据。

五、典型故障坑点

  1. Spooler 服务停止:printbrm 直接报错,无法枚举打印机。
  2. 缺少管理员权限:读取打印机 ACL、端口配置失败。
  3. 还原后打印机队列缺失:目标服务器缺少对应打印驱动;分析模式‑A可以提前发现该问题。
  4. TCP 打印机端口冲突:目标服务器已有同名 IP 端口,还原端口失败。
  5. 还原后打印机权限异常:源服务器域 SID 在目标服务器不存在;可以使用‑NOACL跳过 ACL 还原。
  6. 高版本 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 官方标准工具全称

Print Backup Restore Migrate Utility
 
完整描述:Printer Migration Command-Line Tool(打印机迁移命令行工具)

3. 配套组件完整命名

  1. PrintBrmEngine.exe:Print Backup Restore Migrate Engine(打印迁移后台引擎)
  2. PrintBrmUi.exe:Print Backup Restore Migrate UI Wizard(打印机迁移图形向导)
  3. PrintBrmPs.dll:Print BRM PowerShell COM Proxy

二、核心功能定义

Windows Vista/Server2008 起替代旧 PrintMig 工具,用于打印服务器队列、驱动、端口、打印安全权限的备份、还原、跨服务器迁移,导出格式 .printerExport(CAB 压缩包)。

三、底层配套链路

  1. 安全身份层
     
    读写打印队列 ACL 权限基于账户 SID,域打印服务器配置存储在ntds.dit;远程操作凭据由cmdkey.exe托管,Kerberos 票据使用klist查看。
  2. 网络传输层
     
    远程备份 / 恢复通过 SMB (TCP445)、WinRM (TCP5985,http.sys 承载),依托 Realtek 网卡传输打印配置包。
  3. 打印服务依赖
     
    spoolsv.exe打印后台处理程序联动,读取本地 / 远程打印驱动、语言监视器配置。
  4. 虚拟化配套
     
    支持 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 自动化打印机迁移,可以考虑以下步骤和技术:

自动化打印机迁移流程

  1. 批量导出和导入打印机配置

    使用 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
    }
  2. 自动化安装打印机驱动

    如果需要在新环境中安装新的驱动程序,可以编写脚本自动安装驱动程序。这可以通过使用 Add-PrinterDriverPackage 或者调用 pnputil 命令行工具来完成。

    powershellCopy Code
    # 安装打印机驱动
    $driverPath = "C:\Path\To\Driver\Inf\File.inf"
    Add-PrinterDriverPackage -Path $driverPath
  3. 自动化创建和配置打印机端口

    如果需要创建和配置打印机端口,可以使用 Add-PrinterPort 命令。

    powershellCopy Code
    # 创建打印机端口
    $portName = "IP_192.168.1.100"
    $portIPAddress = "192.168.1.100"
    Add-PrinterPort -Name $portName -PrinterHostAddress $portIPAddress
  4. 使用 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 命令和方法,用于打印机迁移过程中的各个方面:

导出和导入打印机配置

导出打印机配置

powershellCopy Code
Export-Printer -Name "PrinterName" -Path "C:\Path\To\Export\PrinterConfig.printerExport"

此命令将指定打印机的配置导出到指定的文件路径中。

导入打印机配置

powershellCopy Code
Import-Printer -File "C:\Path\To\Export\PrinterConfig.printerExport"

此命令将之前导出的打印机配置文件导入到当前系统中。

导出和导入打印机驱动

导出打印机驱动

powershellCopy Code
Export-PrinterDriver -Name "PrinterName" -DestinationPath "C:\Path\To\Export\Driver"

此命令将指定打印机的驱动程序及其相关文件导出到指定路径。

导入打印机驱动

powershellCopy Code
Add-PrinterDriverPackage -Path "C:\Path\To\Driver\Inf\File.inf"

此命令会安装指定路径的打印机驱动程序。

导出和导入打印机端口

导出打印机端口

powershellCopy Code
Export-PrinterPort -Name "PrinterPortName" -FilePath "C:\Path\To\Export\PrinterPortConfig.xml"

此命令将指定打印机端口的配置导出到指定的 XML 文件中。

导入打印机端口

powershellCopy Code
Import-PrinterPort -Name "PrinterPortName" -FilePath "C:\Path\To\Export\PrinterPortConfig.xml"

此命令将之前导出的打印机端口配置文件导入到当前系统中。

使用 Printbrm.exe (Print Backup Restore Migrate Utility)工具进行打印迁移

除了 PowerShell Cmdlet 外,也可以使用 Printbrm.exe 工具来进行更全面的打印机配置迁移,包括打印机、驱动程序、端口等。

导出打印配置

powershellCopy Code
Start-Process -FilePath "printbrm.exe" -ArgumentList "/export /all /f:C:\Path\To\Export\PrintConfig.bmr" -Wait -NoNewWindow

导入打印配置

powershellCopy Code
Start-Process -FilePath "printbrm.exe" -ArgumentList "/import /all /f:C:\Path\To\Export\PrintConfig.bmr" -Wait -NoNewWindow

这些命令和工具可以帮助你在 Windows 系统中有效地进行打印机迁移,无论是单个打印机的配置迁移还是整体打印环境的迁移都可以应对。在执行这些操作时,请确保在以管理员权限运行的 PowerShell 环境中操作,以确保权限足够执行所需的操作。


 

在 PowerShell 中,你可以使用一些命令来管理打印机驱动的导入和导出操作。下面是一些常用的命令和示例:

导出打印机驱动

使用 Export-PrinterDriver 命令可以导出指定打印机的驱动。

powershellCopy Code
Export-PrinterDriver -Name "PrinterName" -Path "C:\Path\To\Export\Driver"
  • -Name "PrinterName":指定要导出驱动的打印机名称。
  • -Path "C:\Path\To\Export\Driver":指定导出的驱动文件保存路径。

示例:

powershellCopy Code
Export-PrinterDriver -Name "HP LaserJet" -Path "C:\PrinterDrivers"

这将导出名为 "HP LaserJet" 的打印机驱动到 C:\PrinterDrivers 目录下。

导入打印机驱动

使用 Import-PrinterDriver 命令可以导入打印机驱动。

powershellCopy Code
Import-PrinterDriver -Name "PrinterName" -Path "C:\Path\To\Driver\Inf\File.inf"
  • -Name "PrinterName":指定要导入驱动的打印机名称。
  • -Path "C:\Path\To\Driver\Inf\File.inf":指定要导入的驱动的 INF 文件路径。

示例:

powershellCopy Code
Import-PrinterDriver -Name "HP LaserJet" -Path "C:\PrinterDrivers\HP_LaserJet.inf"

这将从 C:\PrinterDrivers\HP_LaserJet.inf 导入驱动到名为 "HP LaserJet" 的打印机。

注意事项

  • 导出的驱动文件通常以 .inf 结尾,这是打印机驱动程序的安装文件。
  • 在导入驱动时,确保指定的驱动文件路径是正确的,并且拥有管理员权限执行 PowerShell 命令。

通过这些 PowerShell 命令,你可以方便地导出和导入打印机驱动,管理打印环境中的驱动程序。

1. COM 完整英文全称

COM = Component Object Model
 
中文:组件对象模型
完整标准短语:
 
COM Object = Component Object Model Object(组件对象模型对象)

2. WMI 全称补充(题干同步提及)

WMI = Windows Management Instrumentation
 
Windows 管理规范,底层大量封装 DCOM(Distributed Component Object Model,分布式 COM)远程 COM 对象接口。

3. 配套衍生缩写

  1. DCOM:Distributed Component Object Model(分布式 COM,跨主机远程 COM 对象)
  2. CLSID:Class Identifier(COM 类唯一标识)
  3. IID:Interface Identifier(COM 接口唯一标识)
  4. ProgID:Programmatic Identifier(COM 对象友好字符串名称,注册表 INI 式存储)

4. 关联逻辑

WMI 内部依靠 COM/DCOM 对外暴露管理接口,PowerShell、printbrm、tpmvscmgr、rundll32 url.dll 等工具底层均调用 COM(Component Object Model) 对象完成系统操作;远程 WMI 调用走 DCOM RPC(TCP 135),经由 tcpip.sys、Realtek 网卡传输,身份校验依托账户 SID、ntds.dit 域库。

在 PowerShell 中,还有一些更高级的方法来管理打印机驱动的导入和导出操作,特别是在批量操作或者需要更精细控制的场景下。这些方法通常涉及使用 WMI (Windows Management Instrumentation) 或者使用 COM (Component Object Model)对象来完成。

使用 WMI (Windows Management Instrumentation)  导出和导入打印机驱动

导出打印机驱动

powershellCopy Code
$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
}

导入打印机驱动

powershellCopy Code
$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) 对象导出和导入打印机驱动

powershellCopy Code
# 创建一个 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)

导出打印机驱动

powershellCopy Code
$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
}

导入打印机驱动

powershellCopy Code
$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) 对象

导出打印机驱动

powershellCopy Code
# 创建一个 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

导入打印机驱动

powershellCopy Code
# 创建一个 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 模块来进行更高级的打印机和驱动程序管理操作。

导出打印机驱动

powershellCopy Code
Export-PrinterDriver -Name "PrinterName" -DestinationPath "C:\Path\To\Export\Driver"

此命令会将指定打印机的驱动程序及其相关文件导出到指定路径。

导入打印机驱动

powershellCopy Code
Add-PrinterDriverPackage -Path "C:\Path\To\Driver\Inf\File.inf"

此命令会安装指定路径的打印机驱动程序。

使用 Printbrm.exe(Print Backup Restore Migrate) 工具

Printbrm.exe(Print Backup Restore Migrate) 是 Windows 中的打印备份和恢复工具,可以通过 PowerShell 脚本调用来实现导出和导入打印机驱动的操作。

导出打印机驱动

powershellCopy Code
$exportPath = "C:\Path\To\Export\Driver"
Start-Process -FilePath "printbrm.exe" -ArgumentList "/export /drivers /f:$exportPath\PrintDriverExport.bmr" -Wait -NoNewWindow

导入打印机驱动

powershellCopy Code
$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
  • -?:显示帮助

例如,您可以使用以下命令备份打印机配置:

batch
1printbrm.exe -s \\myoldprintserver -b -f printers.printerExport

然后,您可以使用以下命令恢复打印机配置:

batch
1printbrm.exe -s \\newprintserver -r -f printers.printerExport -o force

您还可以使用 -c 参数指定配置文件,以便在恢复时映射旧驱动程序到新驱动程序。例如:

xml
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>

然后,您可以使用以下命令恢复打印机配置:

batch
1printbrm.exe -s \\newprintserver -r -f printers.printerExport -c BrmConfig.xml -o force

Printbrm.exe(Print Backup Restore Migrate 是一个强大的工具,可以帮助您管理打印机配置和迁移打印机设置。


 

posted @ 2024-07-10 08:57  suv789  阅读(992)  评论(0)    收藏  举报