Powershell Установите принтер по умолчанию после завершения установки - PullRequest
0 голосов
/ 28 августа 2018

Я экспортировал свои сетевые принтеры в файл .xml, чтобы их можно было установить на новый ПК. Кроме того, я должен экспортировать принтер по умолчанию в файл, чтобы вы могли установить принтер по умолчанию после установки.

Установка работает нормально. Проблема заключается в том, что установка принтеров не была завершена до того, как сценарий попытается установить принтер по умолчанию.

Это мой скрипт для установки принтеров:

#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 после первых звонков, кто-нибудь может подсказать мне лучшее решение?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Это скрипт прямо сейчас:

Восстановить принтер

$ PrinterList = Import-Clixml H: \ Backup \ printers_export.xml

FOREACH ($ Printer в $ PrinterList) {

Выражение-выражение 'rundll32 printui.dll PrintUIEntry / in / q / n $ ($ Printer.Name)'

}

RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters

Установить принтер по умолчанию

$ DP = (New-Object -ComObject WScript.Network) .SetDefaultPrinter ((Get-Content H: \ Backup \ DefaultPrinter.txt))

делать { Старт-сон-секунд 1 [wmi] $ wmi = Get-WmiObject -Query "SELECT * FROM Win32_Printer" | Где {$ .Name -eq '$ DP' -и $ .Default -eq $ true} } В то время как (-не $ WMI)

Не работает. Не удается найти принтер по умолчанию, и скрипт продолжает работать.

0 голосов
/ 28 августа 2018

Добавить условие цикла 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...