这是我希望用一些简单的Powershell解决的部署问题:
当进行32位Windows XP到64位Windows 7迁移时,USMT是 迁移所有的网络打印机,这很棒。作为司机 显然不正确,驱动程序需要手动 升级(右击打印机 - >更新驱动程序)。
此操作是否有WMI功能或Powershell cmdlet?我似乎找不到任何东西 关于它的文档!由于我们的USMT任务序列是独立的 部署并在迁移用户的上下文下运行我确定 会工作。如果我能够获得正确的语法,请添加Powershell 在TS结束时的脚本将是完美的。
我基本上在寻找与右键单击打印机并单击“更新驱动程序”相同结果的功能。我已经在MDT论坛上发帖了,因为我认为这可能更合适!
我看过Win32_Printer类,但看起来并不像我需要的那样。
答案 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()