Problemas para automatizar a atualização do driver da impressora (configurações da impressora) e preferências da impressora no Win7, usando um script PS, cmd, vbs, etc?

Problemas para automatizar a atualização do driver da impressora (configurações da impressora) e preferências da impressora no Win7, usando um script PS, cmd, vbs, etc?

O WMI pode fazer isso, mas tenho um problema: os PCs estão ligados, mas desconectados. Se eu tentar executar:

wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"

Falha com uma mensagem sobre uma "falha genérica". Eu faço RDP e executo o mesmo comando do meu lado, e funciona. A versão do Powershell que estou usando é mais antiga, portanto não possui alguns cmdlets de impressora e a atualização do PS está atualmente fora de questão. Existe uma maneira de fazer login remotamente em alguém, sem precisar fazer login no RDP? Via PS, cmd, PSEXEC, etc?

O outro caminho que tomei foi usar o regedit, mas estou tendo alguns problemas com isso, ou seja, não consigo descobrir o que copiar. No regedit, posso alterar o nome do driver e a configuração que habilita duplex e bandeja2 (nas configurações da impressora), mas não consigo descobrir como alterar as configurações nas preferências da impressora para imprimir em frente e verso e fazê-lo ao longo da borda longa.

O que fiz para descobrir o que alterar foi encontrar o nome da impressora no regedit como um valor de dados e exportar as chaves antes de alterar as configurações. Então exportei novamente DEPOIS de alterar as configurações. Eu então costumava fc /c /a /u before.reg after.regobter as alterações. Cortei o .reg para incluir apenas os valores alterados. A execução do .reg parece mudar tudo, mas a impressão nos dois lados, ao longo das configurações da borda longa. É uma impressora Lexmark, então estou me perguntando se talvez as preferências dela estejam armazenadas em outro lugar.

Minha empresa alterou recentemente as políticas de segurança, pois após 30 minutos de inatividade, um PC é desconectado. Não é possível realizar essas alterações de driver durante o horário normal, quando os computadores NÃO estão desconectados; portanto, a partir de agora, elas têm sido executadas durante a noite por meio de RDP e execução pc por pc manualmente. Eu nem me importaria em descobrir como conectar alguém remotamente, sem nunca fazer RDP, para que o WMI possa fazer sua mágica.

Eu tentei usando apenas o 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()

Também falha aí com uma falha genérica, quando ninguém está logado no PC. Posso consultar propriedades do WMI, então o WMI está funcionando, mas quando tento definir valores, ele falha. Verifiquei com um format-list -property drivernameque ele atualizou bem, depois de fazer login via RDP e ENTÃO executei o script. Obviamente eu não quero fazer RDP de jeito nenhum. Eu habilitei o PSRemoting no pc, só para garantir, então vou tentar invoke-commanda seguir.

Responder1

Existe uma maneira de fazer login remotamente em alguém?

Você pode usar psexecpara executar um comando remoto como um usuário específico.

psexec \\computer -u user -p psswd [options] command [arguments]

Experimente o seguinte comando:

psexec \\computer -u user -p psswd wmic /node:%strIP% printer where DeviceID="lp1" set DriverName="Lexmark Universal v2"

Notas:

  • Você também pode querer dar uma olhada na @run_fileopção (Executar comando em todos os computadores listados no arquivo de texto especificado)
  • Para executar em todos os computadores do domínio atual, digite \\*em vez de\\computer

Sintaxe

psexec \\computer[,computer[,..] [options] command [arguments]

psexec @run_file [options] command [arguments]

Opções:

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).

Fontepsexec


Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
  • psexec- Execute um processo de linha de comando em uma máquina remota. Execute um processo de linha de comando em uma máquina remota.

informação relacionada