Compartilhe que você está se especializando

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

https://github.com/gakamor

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.

NVLAN - Consultoria