Есть принтсервер 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