Есть принтсервер ThinPrint на базе Windows 2012 R2. На нем устновлено несколько сотен принтеров, многие из которых уже не актуальны. Кроме того, в результате миграции с более старой версии сбились настройки, которые восстанвливаются при установке принтера с помощью tpautoconnect.exe -a -f -I
Задача - вычистить неактуальные принтеры, установленные на уже несуществующих компах и переустановить существующие.
План действий - выгрузка списка принтеров, генерация скрипта, который удалит и заново поставит все принтеры. Неактуальные принтеры при установке будут удалены, но не будут вновь установлены.
1. Выгружаем список принтеров из оснастки Windows Print management в формате Unicode Comma Delimited csv.
All Printers → правой кнопкой и потом Export List…
2. Затем формируем скрипт, который будет удалять и заново ставить принтеры. Я это сделал на Linux. На выходе будет windows cmd-скрипт, который удалит и заново поставит все принтеры, имена которых соотвествуют соглашению об именах ThinPrint и имеют Id.
#!/bin/bash while read LINE; do printstr=$( echo $LINE | awk -F"#" '{print $2}' | awk -F"," '{print $1}') printstr_with_name=$( echo $LINE | awk -F"," '{print $1}') host_name=$(echo $printstr | awk -F":" '{print $1}') printer_id=$(echo $printstr | awk -F":" '{print $2}') #echo $printstr if [ -n "$printer_id" ] then echo rundll32 printui.dll PrintUIEntry /dl /n\"$printstr_with_name\" echo tpautoconnect.exe -a $host_name -f -I $printer_id -v # echo -n $host_name" " # echo $printer_id fi done < $1
Запускаем этот скрипт, передавая ему в качестве параметра файл со списком принтеров:
./printers_parse.sh /mnt/sdb1/Printers_list.csv > reinstall_printers.cmd
Вывод перенаправляем в файл reinstall_printers.cmd, который потом положим в папку C:\Program Files\Common Files\ThinPrint и запустим на принтсервере Windows:
cd "C:\Program Files\Common Files\ThinPrint" reinstall_printers.cmd
В результате будут удалены и переустановлены все принтеры имена которых соотвествуют соглашению об именах ThinPrint.
Или тоже самое на powershell:
#-------------- Restore ThinPrint Printers Dummies -------------------------- $printers = Get-WMIObject -Class Win32_Printer | Where { $_.Name -like '_#*' } | Select Name,DriverName,PortName foreach($printer in $printers) { #Add-Printer -name $printer.Name -drivername $printer.DriverName -port $printer.PortName #Get-WMIObject -Class Win32_Printer | Select Name,DriverName,PortName } #-------------- Restore ThinPrint Printers --------------------------- $printers = Get-WMIObject -Class Win32_Printer | Where { $_.Name -like '*#*:*' } foreach($printer in $printers) { $printername = $printer.Name Write-Host "Имя..............." $printername $printer_id = 0 $printer_host_id = $printer.Name.Split("#")[1] $printer_host = $printer_host_id.Split(":")[0] $printer_id = $printer_host_id.Split(":")[1] #----------------------------------------- Write-Host "Host...." $printer_host ", ID.........." $printer_id $cmd = "rundll32 printui.dll PrintUIEntry /dl /n""$printername""" echo $cmd $cmd = [string]::Concat('"c:\Program Files\Common Files\ThinPrint\TPAutoConnect.exe"', ' -a ', $printer_host, ' -f -I ', $printer_id, ' -v') echo $cmd #----------------------------------------- }
Этим же скриптом после небольшой модификации можно клонировать принтсервер, прочитав список принтеров с существующего сервера и выполнив команды установки притеров на новом принтсервере.
Discussion