我已将网络打印机导出到.xml文件,以便它们可以安装在新PC上。 另外,我已将默认打印机导出到文件中,以便您可以在安装后设置默认打印机。
安装工作正常。问题是在脚本尝试设置默认打印机之前,打印机的安装尚未完成。
这是我安装打印机的脚本:
#Install the printer
$PrinterList = Import-Clixml H:Backupprinters_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:BackupDefaultPrinter.txt))
我找到的一个解决方案是在第一次通话后放一个Start-Sleep -s 15
,谁能指出我更好的解决方案?
添加 do/while 循环条件以等待默认打印机配置完成。这样:
$DP = (New-Object -ComObject WScript.Network).SetDefaultPrinter((Get-Content H:BackupDefaultPrinter.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)
这是现在的脚本:
恢复打印机
$PrinterList = import-clixml h:\backup\printers_export.xml
FOREACH ($Printer in $PrinterList( {
Invoke-Expression 'rundll32 printui.dll printUIEntry/in/q/n $($Printer.Name('
}
RUNDLL32.EXE user32.dll,UpdatePerUser系统参数
设置默认打印机
$DP = (New-Object -ComObject WScript.Network(。SetDefaultPrinter((Get-Content H:\Backup\DefaultPrinter.txt((
做 { 开始-睡眠-秒 1 [wmi]$wmi = 获取-WMI 对象 -查询 " 从Win32_Printer中选择 * " | 其中 { $.名称 -eq '$DP' -和 $。默认 -eq $true} }while(-not$wmi(
它不起作用。 找不到默认打印机,脚本继续运行。