Вопрос или проблема
У нас на работе есть принтер, который вызывает проблемы. Мы пробовали несколько разных решений, но когда пользователь пытается распечатать на этом принтере, Windows 7 иногда отображает что-то вроде:
Windows необходимо загрузить и установить драйвер программного обеспечения с … компьютера
Однако на ПК уже установлен правильный драйвер. Я пытался изменить несколько настроек в нашей групповой политике в соответствии с решениями, которые появились, когда я искал эту проблему, но пока ничего не сработало. Пока что, я думаю, будет лучше, если Windows будет переустанавливать принтер каждый раз, когда пользователь входит в систему.
Я хочу установить принтер как принтер по умолчанию только если пользователь уже устанавливал его как принтер по умолчанию. Как я могу сделать это с помощью PowerShell?
Это можно сделать с помощью WMI, используя класс Win32_Printer. Ниже приведен пример с использованием PowerShell, вы также можете сделать это на vbscript.
Вы можете адаптировать приведенный ниже скрипт под свои нужды. В примере предполагается, что драйвер называется “TOSHIBA e-STUDIO3510cSeriesPCL6”
$driver_name="TOSHIBA e-STUDIO3510cSeriesPCL6"
$printers = Get-WmiObject -Class win32_printer -Filter "DriverName="$driver_name""
foreach ($printer in $printers) {
$printer.Delete()
$return_status = (Invoke-WmiMethod -Class win32_printer -Name AddPrinterConnection -ArgumentList $printer.Name).ReturnStatus
If ($return_status -eq 0 -and $printer.Default) {
(Get-WmiObject -Class win32_printer -Filter "Name="$($printer.Name)"").SetDefault()
}
}
Что делает этот скрипт, так это запрашивает, какие принтеры используют определенный драйвер, и переустанавливает их, сохраняя статус принтера по умолчанию, если это необходимо.
Ответ или решение
Для решения вашей проблемы с принтером в Windows 7, можно использовать PowerShell для переустановки принтера и восстановления его статуса по умолчанию, только если он был установлен как принтер по умолчанию. Привожу полный скрипт, который выполняет необходимые действия:
# Задайте название драйвера вашего принтера
$driver_name = "TOSHIBA e-STUDIO3510cSeriesPCL6"
# Получаем список принтеров, которые используют указанный драйвер
$printers = Get-WmiObject -Class win32_printer -Filter "DriverName='$driver_name'"
# Перебираем все найденные принтеры
foreach ($printer in $printers) {
# Удаляем принтер
$printer.Delete()
# Пытаемся заново подключить принтер
$return_status = (Invoke-WmiMethod -Class win32_printer -Name AddPrinterConnection -ArgumentList $printer.Name).ReturnStatus
# Проверяем, была ли добавлена принтер и был ли он по умолчанию
if ($return_status -eq 0 -and $printer.Default) {
# Устанавливаем принтер по умолчанию (если это необходимо)
(Get-WmiObject -Class win32_printer -Filter "Name='$($printer.Name)'").SetDefault()
}
}
Пояснение к скрипту:
-
Задание имени драйвера: В первой строке вы задаете название драйвера, который соответствует вашему принтеру.
-
Получение списка принтеров: Команда
Get-WmiObject
извлекает список установленных принтеров, отфильтрованный по заданному драйверу. -
Цикл обработки принтеров: Используя цикл
foreach
, мы перебираем каждый принтер из полученного списка. -
Удаление принтера: Метод
.Delete()
удаляет принтер из системы. -
Переустановка принтера: Используется метод
AddPrinterConnection
, чтобы заново подключить принтер. -
Проверка статуса и установка по умолчанию: Если принтер успешно добавлен и ранее был установлен по умолчанию, его статус восстанавливается с помощью метода
.SetDefault()
.
Инструкции по запуску скрипта:
- Откройте PowerShell с правами администратора.
- Вставьте скрипт, заменив
TOSHIBA e-STUDIO3510cSeriesPCL6
на имя вашего драйвера, если оно отличается. - Запустите скрипт.
Этот скрипт решит вашу проблему с принтером, позволяя ему переустанавливаться при каждом входе пользователя и восстанавливать статус по умолчанию, если он был настроен на это ранее.