以编程方式更新网络打印机驱动

时间:2013-11-26 20:40:01

标签: powershell deployment

这是我希望用一些简单的Powershell解决的部署问题:

  

当进行32位Windows XP到64位Windows 7迁移时,USMT是   迁移所有的网络打印机,这很棒。作为司机   显然不正确,驱动程序需要手动   升级(右击打印机 - >更新驱动程序)。

     

此操作是否有WMI功能或Powershell cmdlet?我似乎找不到任何东西   关于它的文档!由于我们的USMT任务序列是独立的   部署并在迁移用户的上下文下运行我确定   会工作。如果我能够获得正确的语法,请添加Powershell   在TS结束时的脚本将是完美的。

我基本上在寻找与右键单击打印机并单击“更新驱动程序”相同结果的功能。我已经在MDT论坛上发帖了,因为我认为这可能更合适!

我看过Win32_Printer类,但看起来并不像我需要的那样。

1 个答案:

答案 0 :(得分:0)

我是如何理解的,做一个RC->更新驱动程序并不是管理打印驱动程序的正确方法。

更新驱动程序旨在将驱动程序从版本X更新到下一版本Y,而不是将驱动程序从Win XP驱动程序更改为Win 7驱动程序的正确方法(即,如果XP驱动程序的版本为1.0,并且Win 7驱动程序是1.0,然后运行更新驱动程序将不会执行任何操作,因为版本将是相同的。)

#1和最佳选择是使用PowerShell删除打印机,然后重新添加它们(然后还将安装Windows 7驱动程序)。这样你就可以保证它们能够正常工作。

脚本将是这样的:

#Get list of all the printers on the machine
$printers = gwmi win32_printer

#Save default Printer
$DefaultPrinter = $printers | where{$_.Default} | Select ShareName

#Create a list of all the printers we want to delete (in this case I am deleting all network printers)
$PrintersToDelete = $printers | where{$_.Network -eq $true} 

#Create a list of all the printers we want to add (in this case, all network printers I just deleted)
$PrintersToAdd = $printers | where{$_.Network -eq $true} | Select Name

#Delete the printers I want to delete
$PrintersToDelete | foreach{$_.delete()}

#Add back all printers we want to add
$PrintersToAdd | foreach{(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection($_.Name)}

#Get list of all the new printers on the machine
$printers = gwmi win32_printer

#Set the default printer
$NewDefaultPrinter = $printers | where{$_.DeviceID -match $DefaultPrinter}
$NewDefaultPrinter.SetDefaultPrinter()