Desativar o status SNMP em todas as portas de impressora TCP / IP

1

No Windows 7/8 [.1], você pode configurar as informações da impressora e da porta por meio da linha de comando como administrador, por exemplo:

cd /d %WINDIR%\System32\Printing_Admin_Scripts\en-US
prnmngr -s computer-01 -l

listará as impressoras anexadas a computer-01 , usando minhas credenciais registradas. Isso produz várias linhas de saída, incluindo a porta da impressora. Meu objetivo é encontrar a porta de impressora, assumindo que é uma porta TCP / IP, em seguida, execute o comando prnport para desativar o status do SNMP nessa porta. Abaixo está um exemplo de saída de duas impressoras diferentes, sendo USB, a outra sendo uma impressora TCP / IP:

Server name
Printer name JMC-KMC224-BW
Share name
Driver name KONICA MINOLTA C364SeriesPCL
Port name IP_192.168.0.11
Comment
Location
Print processor KOAYTJ_P
Data type RAW
Parameters
Attributes 2628
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown

Server name
Printer name DYMO LabelWriter 400
Share name
Driver name DYMO LabelWriter 400
Port name USB001
Comment
Location
Print processor winprint
Data type RAW
Parameters
Attributes 2624
Priority 1
Default priority 0
Average pages per minute 0
Printer status Idle
Extended printer status Unknown
Detected error state Unknown
Extended detected error state Unknown

(Nota: este não é um problema X-Y, o problema é conhecido pelo fabricante e a desativação do SNMP é a solução conhecida.)

Como posso encontrar o nome da porta que por acaso é uma porta TCP / IP e colocá-lo em uma variável que eu possa executar no comando prnport ?

    
por Canadian Luke 01.03.2016 / 22:25

1 resposta

2

Um problema que você terá é que o nome da porta é texto livre: pode ser praticamente qualquer coisa; não é garantido que seja o endereço IP. A menos que você tenha certeza de que as pessoas que configuram as impressoras definem explicitamente os nomes para começar com IP_ , isso não é garantido.

Eu recomendaria usar o PowerShell se você puder; os cmdlets Get-PrinterPort e Set-PrinterProperty ou talvez Set-PrintConfiguration ( documentos do Win10 , Documentos do Win8 , Documentos do Win8.1 ) são muito úteis. Infelizmente, eles são disponíveis apenas no Windows 8 ou Server 2012 e mais recentes . Eu só tenho acesso ao Windows 7 no momento e não posso testá-los.

Caso contrário, você pode usar prnport diretamente, em vez de passar por prnmngr primeiro. prnport -l irá "listar todas as portas TCP". Se você usar isso em conjunto com um script semelhante ao de David, você terá os resultados corretos:

NB: Pode ser necessário substituir as invocações prnport por cscript %windir%\System32\Printing_Admin_Scripts\en-US\prnport.vbs , dependendo da sua configuração. Além disso, a região en-US pode mudar.

for /f "tokens=1,2,*" %%a in ('prnport -s computer-01 -l ^| find "Port name"') do (
    prnport -t -s computer-01 -r "%%c" -md
)

Breve explicação:

  • Este é um loop for expandido. Veja for /? para detalhes.
  • Estamos passando por todos Port name foo linhas na saída e tirando foo deles.
  • Especificando tokens=1,2,* , nós tokenizamos a sequência de resultado por espaços e definimos %%a a Port , %%b a name e %%c para tudo depois (é isso que o asterisco significa).

Você provavelmente desejará passar o nome do computador como outra variável.

Observe também que isso não controla casos em que não existem impressoras TCP / IP. Eu suponho que eles não farão nada, já que o corpo do loop nunca deve ser executado.

Outra opção é usar o WMI diretamente, que é o que os scripts de gerenciamento da impressora fazem sob o capô.

    
por 01.03.2016 / 23:55