使用 PowerShell 导出和导入打印机设置

使用 PowerShell 导出和导入打印机设置

我正在寻找一种解决方案,用于导出在使用例如“CAB A3 300DPI”驱动程序的特定打印机上进行的设置,然后将其导入使用相同驱动程序的不同设备。为此,我想使用 PowerShell。我非常了解 PrintUI.dll,但当我尝试导入某些打印机上的设置时,这会导致我这边出现太多错误。

我已经找到了在菜单项“高级”下导入“打印默认值...”的解决方案,但尚未找到在菜单项“常规”下导入“首选项...”的设置的解决方案。

对于“高级”->“打印默认值...”的导出和导入,我使用了此处的以下命令将打印机默认设置复制到其他打印机

出口:

$somePrinterConfig = Get-PrintConfiguration -PrinterName "xxxxxx" 

进口:

Set-PrintConfiguration -PrinterName "yyyyyy" -PrinterTicketXml     $somePrinterConfig.PrintTicketXML 

无论如何,就像我说的,这只是一个部分解决方案,因为我仍然需要导出和导入打印机的“常规”->“首选项......”设置。

前面提到过,我使用的 PrintUI.dll 在导入某些打印机的设置时会导致错误。为此,我在这里使用了以下内容:

出口:

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Ss /n "name_of_printer" /a "path_of_file_to_export.dat"

进口:

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Sr /n "name_of_printer" /a "path_of_file_to_import.dat" 2 7 c d g u

我还应该提到,我导出了 Windows Server 2008 Service Pack 2 上的设置,并将其导入 Windows Server 2012 r2 上。

非常感谢每一份投入!

答案1

我在 Archive.org 上找到了这些脚本 https://web.archive.org/web/20200318071550/https://gallery.technet.microsoft.com/scriptcenter/Powershell-printer-config-db0465bd

以下是该页面的内容:

这是我在 Technet 上第一次上传 PowerShell(如有需要,请提供反馈)

我声称这是世界首创,因为我在网上任何地方都找不到这方面的信息。(是的,有命令,但没有如何正确获取配置或应用它的正确示例)。

以前,要设置打印机的配置属性,您需要使用一个相当冗长的过程,该过程使用 > PrintUI.exe(或 printuidll)过程,如下所示:

PRINTUI.EXE /Sr /n "打印机名称" /a "full_path_to_configuration_file" dug 8 r

因此,使用 powershell 打印机命令会简单得多。只需设置已安装打印机的参数,按照您的喜好设置即可(纸张大小、颜色、方向、私人打印或您需要更改的任何其他设置)。

然后运行以下代码(将 $PNA 更改为打印机的实际名称)

   $PNA = "Printer name a" 

   $GPC = get-printconfiguration -PrinterName $PNA 
   $GPC.PrintTicketXML | out-file C:\Temp\$PNA.xml 

这会将正确的打印机配置保存到 xml 文件中:“C:\Temp\Printer name a.xml”以获取多台打印机的 XML 配置文件。我使用以下代码:

    $PNA = "Printer Name A" 
    $PNB = "Printer Name B" 
    $PNC = "Printer Name C" 
    $PND = "Printer Name D" 
     
    $PN = $PNA,$PNB,$PNC,$PND 
     
    Foreach ($P in $PN){ 
    $GPC = get-printconfiguration -PrinterName $P 
    $GPC.PrintTicketXML | out-file C:\Temp\$P.xml 
    }

您可以看到如何将其扩展到多台打印机。我相信有人可以让这个更简单,或者您甚至可以使用此代码获取所有打印机的名称(如果您保留它们,请注意传真机、XPS 文档编写器等!)

   $PN = (get-printer | select name).name 

   Foreach ($P in $PN){ 
   $GPC = get-printconfiguration -PrinterName $P 
   $GPC.PrintTicketXML | out-file C:\Temp\$P.xml 
   }

要应用打印机配置,您可以使用以下命令:

    $PNA = "Printer Name A" 
    $XMLA = Get-Content "Path\to\$PNA.xml" | Out-String  
    Set-PrintConfiguration -PrinterName $PNA -PrintTicketXml $XMLA

答案2

这对你来说已经晚了...但我去年就弄清楚了这是如何运作的,并将其发布在 technet 上:

这通常是如何使用 powershell 的内置命令导出打印机配置并将其应用于另一台打印机(它是 printui dll 的 powershell 替代品)

https://gallery.technet.microsoft.com/scriptcenter/Powershell-printer-config-db0465bd

希望它能对某些人有所帮助:-)

米特英国

相关内容