18 подписчиков

Принтеры на принтсервере

Ну или Просмотр принтеров на принт-сервере...В общем, у вас в конторе есть принт-сервер под Windows Server, к нему подключена куча сетевых принтеров. Если нужно кому-то принтер этот подключить, идете в Принтеры, запускаете установку, выбираете принтер...А, еще же надо узнать- какой принтер нужно выбрать, перед этим надо зайти на принт-сервер, зайти в свойства каждого принтера, чтобы посмотреть в свойствах- где он установлен. В общем, неудобно все это. Было бы здорово, если сделать список принтеров с подробным описанием, чтобы- хоба!- открыл и сразу ясно, какой принтер нужен. А еще чтобы тут же была ссылка на батник для установки принтера- мышканул по ней- и пошел процесс установки принтера. Само собой, список этот должен создавать сам принт-сервер.

Давайте же сделаем страничку на php, на которой все это и будет лежать. На принт-сервере сделаем папку C:\all_pr , в которой создадим батник с таким текстом:

chcp 866
wmic printer get name > C:\all_pr\pr.txt
wmic printer list full > C:\all_pr\pr1.txt
sort C:\all_pr\pr.txt /Output C:\all_pr\pr.txt
echo y|copy C:\all_pr\pr.txt \\server\printers$\*.*
powershell -Command "Get-Content C:\all_pr\pr1.txt -Encoding Unicode | Set-Content -Encoding UTF8 \\server\printers$\pr1.txt"

Сделаем в Планировщике задание, которое будет запускать этот батник, например, раз в полчаса.

Страница на php у нас будет лежать на нашем web-сервере, создание которого описано здесь: https://dzen.ru/a/ZkT08Up4cDQsKXu5?share_to=link . Сайт там лежит на сервере в папке c:\web , в ней же нужно создать папку printers и сделать ее общедоступной, чтобы в нее можно было попасть по пути \\server\printers$ . Называться наш сайт будет s.xz.local

Создадим на сервере в папке c:\web файл p.php. Содержимое файла:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Список принтеров</title>
<?php
$r="'";
echo("<meta http-equiv=".$r."Content-Type".$r." content=".$r."text/html;charset=utf-8".$r.">");
echo "Путь к BAT-никам для подключения:\r<br>";
echo '<table border="2">';
echo '<tr>';
echo "<td>\\\server\printers$\bat</td>";
echo '</tr>';
echo '</td>';
echo '<table border="2">';
echo '<tr>';
echo '<td>'."№".'</td>';
echo '<td>'."Имя принтера".'</td>';
echo '<td>'."Модель".'</td>';
echo '<td>'."Местонахождение".'</td>';
echo '<td>'."Комментарий".'</td>';
echo '<td>'."Адрес".'</td>';
echo '<td>'."Ссылка для подключения".'</td>';
echo '<td>'."Ссылку на батник- в буфер".'</td>';
echo '</tr>';
//echo '<tr>';
$f = fopen("pr.txt", "r");
//$s=fgets($f);
$n=0;
while(!feof($f))
{
echo '<tr>';
$s=fgets($f); $s=cl($s);
if(strpos($s,"Name")>-1) $s='';
if(strpos($s,"test")>-1) $s='';
if(strlen($s)>1)
{
$n=$n+1;
echo '<td>'.$n.'</td>';
echo '<td>'.$s.'</td>';
echo '<td>'.param($s,"DriverName").'</td>';
echo '<td>'.param($s,"Location").'</td>';
echo '<td>'.param($s,"Comment").'</td>';
echo "<td><a href=http://".param($s,"PortName")." target='_blank'> ".param($s,"PortName")."</a></td>";
create_bat($s);
$r='"';
$ss=$s.'.bat'.$r;
echo "<td><a href=".$r."file://server/printers$/bat/".$ss." target='_blank'>Подключить принтер</a></td>";
echo "<td>".clpb($s)."</td>";
echo '</tr>';
}
}
fclose($f);
echo '</table>';

function param($n, $pole)
{
$n=cl($n); $pole=cl($pole);
$out=" - "; $y=0;
if(strlen($n)<2) return '--';
$f = fopen("pr1.txt", "r");
$s=fgets($f);
while(!feof($f))
{
$s=fgets($f);
$s=cl($s); $n=cl($n); $pole=cl($pole);
if($s=='Caption='.$n)
{
$y=1;
$s=fgets($f); $s=cl($s);
}
$s1=strtok($s,'=');
if($pole==$s1 && $y>0)
{
$out=strtok('=');
if(strlen($out)<2) $out='-';
$y=0;
}
}
fclose($f);
return $out;
}

//Очистка строки от мусора
function cl($string)
{
$old_string = $string;
$string = strip_tags($string);
$string = preg_replace('/([^\pL\pN\pP\pS\pZ])|([\xC2\xA0])/u', ' ', $string);
$string = str_replace(' ',' ', $string);
$string = trim($string);
if ($string === $old_string)
{
return $string;
} else
{
return cl($string);
}
}
function create_bat($s)
{
$sa=$s;
$s="bat\\".$s;
$r='"';
$f = fopen($s.".bat", "w");
$p="title Ustanovka printera...";
fwrite($f, $p."\r\n");
$p="cls";
fwrite($f, $p."\r\n");
$p="rundll32.exe printui.dll,PrintUIEntry /in /n ".$r."\\\print-server.xz.local\\".$sa.$r;
fwrite($f, $p."\r\n");
$p="timeout 10";
fwrite($f, $p."\r\n");
$p="control printers";
fwrite($f, $p."\r\n");
fwrite($f, "exit");
fclose($f);
}

function clpb($comp) //Строку подключения- в буфер
{
$out=$comp;
$r="";
$out="<button onclick=".$r."clp('".$comp."')".$r.">".$comp." - скопировать в буфер</button>";
return $out;
}

?>

<script>
function clp (str) {
var el = document.createElement('textarea');
el.value = "\\\\server\\printers$\\bat\\"+str+".bat";
el.style.position = 'absolute';
el.style.top = '-1px';
document.body.appendChild(el);
el.select();
document.execCommand('copy');
document.body.removeChild(el);
}
</script>

Сохраняем, после чего заходим через браузер: http://xz.local/p.php

И видим:

Вот так как-то..
Вот так как-то..

Колонка "Ссылка для подключения" - это ссылка на батник для подключения принтера. Если вы зайдете через IE и щелкните по ней, то она откроется и пойдет процесс установки. Но если у вас не IE, то ничего не получится- ни один браузер не будет скачивать батник. В этом случае идем в колонку "Ссылку на батник- в буфер", жмем там на кнопку и ссылка на этот батник скопируется в буфер обмена. После чего эту ссылку можно вставить в Проводнике в строку адреса, нажать энтер и пойдет процесс установки. Информация в колонках Местоположение и Комментарий берется из соответствующих полей на вкладке Общие каждого принтера.

На этом все.