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
дальше.
решение1
Есть ли способ удаленно авторизовать кого-либо?
Вы можете использовать psexec
для запуска удаленной команды от имени определенного пользователя.
psexec \\computer -u user -p psswd [options] command [arguments]
Попробуйте следующую команду:
psexec \\computer -u user -p psswd wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Примечания:
- Вы также можете рассмотреть
@run_file
опцию (Выполнить команду на каждом компьютере, указанном в текстовом файле) - Чтобы запустить проверку всех компьютеров в текущем домене, введите
\\*
вместо\\computer
Синтаксис
psexec \\computer[,computer[,..] [options] command [arguments] psexec @run_file [options] command [arguments]
Параметры:
computer The computer on which psexec will run command. Default = local system To run against all computers in the current domain enter "\\*" @run_file Run command on every computer listed in the text file specified. command Name of the program to execute
...
-p psswd Specify a password for user (optional). Passed as clear text. If omitted, you will be prompted to enter a hidden password. -u user Specify a user name for login to remote computer(optional).
Источникpsexec
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- psexec- Выполнить процесс командной строки на удаленной машине. Выполнить процесс командной строки на удаленной машине.