WMI puede hacerlo, pero tengo un problema, los PCs están encendidos, pero desconectados. Si trato de ejecutar:
wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Falla con un mensaje sobre un "fallo genérico". Me meto en el RDP y luego ejecuto el mismo comando desde mi extremo, y funciona. La versión de Powershell que estoy utilizando es antigua, por lo que no tiene algunos de los cmdlets de la impresora, y la actualización de PS está actualmente fuera de la cuestión. ¿Hay alguna manera de iniciar la sesión de alguien de forma remota, sin tener que hacer RDP? ¿A través de PS, cmd, PSEXEC, etc.?
La otra vía que he tomado es usar el regedit, pero me estoy topando con algunos inconvenientes con eso, a saber, que no puedo saber qué copiar. En regedit, puedo cambiar el nombre del controlador y la configuración que permite la impresión a doble cara y la bandeja 2 (en la configuración de la impresora), pero no puedo averiguar cómo cambiar la configuración en las preferencias de la impresora para imprimir a doble cara y hacerlo a lo largo del borde largo.
Lo que hice para saber qué cambiar, fue buscar el nombre de la impresora en regedit como valor de datos y exportar las claves antes de cambiar la configuración. Luego lo exporté de nuevo DESPUÉS de cambiar la configuración. Luego utilicé fc /c /a /u before.reg after.reg
para conseguir los cambios. He cortado el .reg para incluir sólo los valores cambiados. Ejecutar el .reg parece cambiar todo, pero la impresión de ambos lados, a lo largo de la configuración del borde largo. Es una impresora lexmark, así que me pregunto si tal vez las preferencias para ella se almacenan en otro lugar.
Mi empresa ha cambiado recientemente las políticas de seguridad en el sentido de que después de 30 minutos de inactividad, un PC se desconecta. No puedo realizar estos cambios de controladores durante las horas normales, cuando los PCs no están desconectados, por lo que hasta ahora se han realizado durante la noche por RDPing y haciendo PC por PC manualmente. Incluso no me importaría averiguar cómo registrar a alguien de forma remota, sin nunca RDPing en, por lo que WMI puede hacer su magia entonces.
Lo he intentado usando sólo 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()
Ahí también falla con un fallo genérico, cuando no hay nadie conectado al pc. Puedo consultar las propiedades de WMI, así que WMI funciona, pero cuando intento establecer valores, falla. He verificado con un format-list -property drivername
lo actualizó bien, una vez que me conecté a través de RDP y LUEGO ejecuté el script. Obviamente no quiero entrar por RDP en absoluto. Habilité PSRemoting en el PC, por si acaso también, así que voy a probar invoke-command
siguiente.