User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

ms_windows_ms_sql:clean_thinprint_printers

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

Enter your comment. Wiki syntax is allowed:
E I S T N
 
ms_windows_ms_sql/clean_thinprint_printers.txt · Last modified: 2016/09/15 10:47 by mike