WMI может сделать это, но у меня есть проблема, ПК включены, но вышли из системы. Если я попытаюсь бежать:
wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Сбой с сообщением о "общем сбое". Я RDP, а затем запустить ту же команду с моего конца, и это работает. Используемая версия Powershell устарела, поэтому в ней отсутствуют некоторые командлеты принтера, и об обновлении PS в настоящее время не может быть и речи. Есть ли способ удаленного входа в систему, без необходимости RDP? Через PS, CMD, PSEXEC и т.д.?
Другой способ, которым я воспользовался, - это использование regedit, но я сталкиваюсь с некоторыми проблемами, а именно с тем, что не могу понять, что копировать. В regedit я могу изменить имя источника и настройки, которые включают дуплекс и лоток 2 (в настройках принтера), но не могу понять, как изменить настройки в настройках принтера для двусторонней печати и проделать это по длинному краю.
Что я сделал, чтобы выяснить, что изменить, я нашел в имени принтера regedit в качестве значения данных и экспортировал ключи перед изменением настроек. Затем я снова экспортировал ПОСЛЕ изменения настроек. Затем я использовал fc /c /a /u before.reg after.reg
чтобы получить изменения. Я порезал .reg, чтобы включить только измененные значения. Запуск .reg, кажется, меняет все, но печатает обе стороны, вдоль длинных краевых настроек. Это принтер lexmark, поэтому мне интересно, возможно, предпочтения для него хранятся в другом месте.
Моя компания недавно изменила политики безопасности, так как после 30 минут бездействия компьютер вышел из системы. Невозможно выполнить эти изменения драйвера в обычные часы, когда ПК НЕ вышли из системы, поэтому на данный момент они выполняются в одночасье с помощью RDP и выполнения ПК с ПК вручную. Я даже не против придумать, как подключить кого-то удаленно, без RDP, так что WMI может творить чудеса.
Я попробовал использовать только Powershell:
$Str = Read-Host "Please select a store number [###] "
$PC = Read-Host "Please select a PC number [##] "
$PCNm = "0$Str-CCPC-$PC"
$lp1 = Get-WMIObject -ComputerName $PCNm -Query "SELECT * from Win32_Printer Where DeviceID='lp1'"
$lp1.DriverName = "Lexmark Universal v2"
$lp1.Put()
Сбой там тоже с общим отказом, когда никто не вошел на ПК. Я могу запросить WMI о свойствах, поэтому WMI работает, но когда я пытаюсь установить значения, происходит сбой. Я проверил с помощью format-list -property drivername
он обновил его нормально, как только я вошел в систему через RDP, а затем запустил скрипт. Очевидно, я не хочу, чтобы RDP вообще. Я включил PSRemoting на ПК, на всякий случай, поэтому я попробую использовать invoke-command
дальше.