我已将网络打印机导出到.xml文件,因此可以将它们安装在新PC上。 另外,我已经将默认打印机导出到一个文件中,因此您可以在安装后设置默认打印机。
安装正常。问题是在脚本尝试设置默认打印机之前,尚未完成打印机的安装。
这是我安装打印机的脚本:
#Install the printer
$PrinterList = Import-Clixml H:\Backup\printers_export.xml
foreach($Printer in $PrinterList) {
Invoke-Expression 'rundll32 printui.dll PrintUIEntry /in /q /n $($Printer.Name)'
}
# Set default printer
(New-Object -ComObject WScript.Network).SetDefaultPrinter((get-content h:\Backup\DefaultPrinter.txt))
我发现的一个解决方案是在第一次致电后加上Start-Sleep -s 15
,有人可以指出我的更好解决方案吗?
答案 0 :(得分:0)
添加do / while循环条件以等待默认打印机配置完成。像这样:
$DP = (New-Object -ComObject WScript.Network).SetDefaultPrinter((Get-Content H:\Backup\DefaultPrinter.txt))
do {
Start-Sleep -Seconds 1
[wmi]$wmi = Get-WmiObject -Query " SELECT * FROM Win32_Printer" |
Where { $_.Name -eq 'PUT YOUR DEFAULT PRINTER NAME HERE' -and $_.Default -eq $true}
}while(-not$wmi)
答案 1 :(得分:0)
这是现在的脚本:
$ PrinterList = Import-Clixml H:\ Backup \ printers_export.xml
FOREACH($ PrinterList中的$ Printer){
Invoke-Expression'rundll32 printui.dll PrintUIEntry / in / q / n $ {$ Printer.Name)'
}
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
$ DP =(新对象-ComObject WScript.Network).SetDefaultPrinter((获取内容H:\ Backup \ DefaultPrinter.txt))
做{ 睡眠开始-第二个 [wmi] $ wmi = Get-WmiObject-查询“ SELECT * FROM Win32_Printer” | 其中{$ .Name -eq'$ DP'-和$ .Default -eq $ true} } while(-not $ wmi)
它不起作用。 找不到默认打印机,脚本继续运行。