WMI puede hacerlo, pero tengo un problema: las PC están encendidas, pero desconectadas. Si intento ejecutar:
wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Falla con un mensaje sobre un "fallo genérico". Introduzco RDP y luego ejecuto el mismo comando desde mi parte, y funciona. La versión de Powershell que estoy usando es anterior, por lo que no tiene algunos de los cmdlets de la impresora y actualmente no es posible actualizar PS. ¿Hay alguna manera de iniciar sesión remotamente para alguien, sin tener que iniciar sesión en RDP? ¿A través de PS, cmd, PSEXEC, etc.?
La otra vía que he tomado es usar regedit, pero tengo algunos problemas con eso, es decir, que no puedo saber qué copiar. En regedit, puedo cambiar el nombre del controlador y la configuración que habilita la impresión dúplex y la bandeja 2 (en la configuración de la impresora), pero no puedo entender 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 descubrir 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é nuevamente DESPUÉS de cambiar la configuración. Luego solía fc /c /a /u before.reg after.reg
recibir los cambios. Corté el .reg para incluir solo los valores modificados. Ejecutar el .reg parece cambiar todo, pero imprime en ambos lados, a lo largo de la configuración del borde largo. Es una impresora Lexmark, por lo que me pregunto si tal vez las preferencias estén almacenadas en otro lugar.
Mi empresa cambió recientemente las políticas de seguridad de modo que después de 30 minutos de inactividad, se cierra la sesión de una computadora. No se pueden realizar estos cambios de controlador durante el horario habitual, cuando las PC NO están desconectadas, por lo que a partir de ahora se realizan durante la noche mediante RDP y haciendo PC por PC manualmente. Ni siquiera me importaría descubrir cómo iniciar sesión en alguien de forma remota, sin siquiera realizar RDP, para que WMI pueda hacer su magia en ese momento.
Lo intenté usando solo 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()
Allí también falla con una falla genérica, cuando nadie inicia sesión en la PC. Puedo consultar propiedades en WMI, por lo que WMI funciona, pero cuando intento establecer valores, falla. Verifiqué que format-list -property drivername
lo actualizó bien, una vez que inicié sesión a través de RDP y ENTONCES ejecuté el script. Obviamente no quiero RDP en absoluto. Habilité PSRemoting en la PC, por si acaso también, así que lo intentaré invoke-command
a continuación.
Respuesta1
¿Hay alguna forma de iniciar sesión remotamente?
Puede utilizar psexec
para ejecutar un comando remoto como un usuario en particular.
psexec \\computer -u user -p psswd [options] command [arguments]
Pruebe el siguiente comando:
psexec \\computer -u user -p psswd wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"
Notas:
- Es posible que también quieras mirar la
@run_file
opción (Ejecutar comando en cada computadora enumerada en el archivo de texto especificado) - Para ejecutar en todas las computadoras del dominio actual, ingrese
\\*
en lugar de\\computer
Sintaxis
psexec \\computer[,computer[,..] [options] command [arguments] psexec @run_file [options] command [arguments]
Opciones:
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).
Fuentepsexec
Otras lecturas
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- psexec- Ejecutar un proceso de línea de comandos en una máquina remota. Ejecute un proceso de línea de comandos en una máquina remota.