Esse post surgiu a partir da leitura do GitHub do gakamor, principalmente o script Export-PrintDrivers.
Uma tarefa comum em suporte é reinstalar impressoras em um ambiente de rede (em alguns casos até uma tarefa de administradores de rede) e muitas vezes é preciso saber qual é exatamente o driver que está instalado (e é o que está funcionando) em um determinado PC, para colocar esse driver nos demais. Vamos demostrar aqui como exportar o driver de uma impressora de um determinado computador, permitindo usar esse driver para instalação em escala.
Iniciando uma verificação pelo PowerShell
Realize os comandos abaixo como administrador:
Listando uma impressora
Vamos usar o comando Get-Printer para listar uma impressora
Para listar todas as impressoras instaladas, execute:
Get-Printer
Para listar as impressoras que estão no servidor SERVER1, utilize:
Get-Printer -name "*SERVER1*"
Para listar as impressoras com driver da Canon, , é possível usar:
Get-Printer | Where-Object DriverName -like "*CANON*"
Da mesma forma, se eu quiser saber a impressora que está usando a porta IP 10.0.1.1, pode ser feito com:
Get-Printer | Where-Object PortName -like "10.0.1.1*"
Listando um Driver
Vamos agora adicionar o comando Get-PrinterDriver para obter dados de um driver específico.
Para listar todos os drivers de impressora instalados, execute:
Get-PrinterDriver
Para listar todos os drivers da Canon, execute:
Get-PrinterDriver -Name "*canon*"
O nome do driver é o mesmo nome que usamos no Get-Printer. Por isso podemos unir esses comandos:
Para listar os drivers que estão sendo usados nas impressoras mapeadas de Server1, execute:
Get-PrinterDriver -name (Get-Printer -name "*Server1*").DriverName
Ou, fazendo um loop (a saída pode ser maior, caso tenham driver repetidos):
Get-Printer -name "*Server1*" | Foreach-Object {
Get-PrinterDriver -name $_.DriverName
}
Para listar os drivers, incluindo a arquitetura (86 ou 64) e o local do driver (o arquivo inf), execute:
Get-PrinterDriver | Ft Name,PrinterEnvironment,InfPath
Com isso é possível acessar (sabendo onde está o arquivo .inf) a pasta com o driver e copiar.
Exportar os drivers
Para exportar todos os drivers que estão em uso atualmente no computador, vamos obter a pasta do driver (a partir do local do arquivo .inf) e usar o programa robocopy para copiar para o C:\Temp\printdrivers:
$driverDestination = "C:\Temp\printdrivers"
Get-Printer | ForEach-Object {
$printerName = $_.ShareName
if (! $printerName) { $printerName = $_.Name }
$driver = Get-PrinterDriver -Name $_.DriverName
$driverName = $driver.Name
$inf = $driver.InfPath
if ($driver.PrinterEnvironment -eq "Windows x64") { $driverType = "x64" }
else { $driverType = "x86" }
if ($inf) {
$folder = Split-Path -Path $inf -Parent
robocopy "$folder" "$driverDestination\$driverName - $driverType ($printerName)" /E /NFL /NDL /NJH /NJS /NP
}
}
Fontes/Referências
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.
