Powershell установка сетевого принтера



Powershell установка сетевого принтера

Update 28.10.2010: исправлена ошибка с назначением права ManageDocuments.

Вот и пришло время закрыть тему управления принтерами и их списками ACL в PowerShell с использованием WMI. Я в блоге уже расписывал решение частных задач по основным задачам управления принтеров и по управлению их ACL списками. В этом посте я сложу все наработки по этому вопросу в единый концептуальный скрипт, который будет называться PrinterUtils.ps1 с достаточно объёмным набором функций, которые нацелены на упрощение для администраторов автоматизации принтеров с использованием PowerShell. Если кто-то захочет разобраться в работе скрипта и понять используемые приёмы, то предлагаю ознакомиться с следующими ссылками:

В качестве основы я использовал свои предыдущие наработки с SecurityDescriptor в предыдущем блоге, когда разбирал вопрос управления SharePermissions из PowerShell:

Материала у меня на эту тему набралось достаточно много, чтобы проникнуться в идею работы классов WMI и SecurityDescriptor, который не раз пытался посадить меня в лужу 🙂 Однако версия скрипта ShareUtils чётко говорит о том, что скрипт далеко не идеален и не оптимален, имеет свои недостатки, т.к. это был мой первый опыт работы с функциями. Сейчас я значительно переработал структуру работы скрипта (оставив только Core работы с SecurityDescriptor), добавив удалённое управление (в разумных пределах) и, главное (как мне кажется), реализовал работу функций в конвейере. Примеры использования скрипта распишу чуть ниже. Итак, представляю набор функций, которые реализованы в скрипте:

  1. Подключение (маппинг) сетевого принтера к пользователю;
  2. Отключение маппинга сетевого принтера от пользователя;
  3. Получение сведений о принтерах;
  4. Установка принтера по умолчанию;
  5. Установка принтера для общего пользования (расшаривание принтера);
  6. Отмена принтера для общего пользования;

Данная секция представляет собой базовые возможности по управлению принтерами и полностью работоспособна в среде Windows XP/Windows Server 2003. А вот секция управления ACL списками принтеров доступна только в среде Windows Vista/Windows Server 2008. Сюда входят следующие функции:

  1. Получение сведений о правах доступа на конкретный принтер, конкретный принтсервер или по списку компьютеров;
  2. Импорт сведений о правах доступа из внешнего источника. Это может быть и CSV и XML или другой формат;
  3. Добавление пользователя или группы в ACL список принтера или всех принтеров, которые подключены к принтсерверу;
  4. Удаление пользователя или группы из ACL списка принтера или всех принтеров, которые подключены к принтсерверу;
  5. Установка пользователя или группы в ACL список принтера или всех принтеров, которые подключены к принтеру. При этом все имеющиеся права доступа будут удалены и заменены только одним ACE с правом ManagePrinters.

Для этих функций полностью реализована поддержка удалённой работы и работа в конвейере. Синтаксис команд используется примерно следующий:

  • New-NetworkPrinter -Computer <name> -name <name>
    где Computer — имя компьютера, к которому подключён сетевой принтер
    Name — сетевое имя принтера, который следует подключить к пользователю
  • Remove-NetworkPrinter -Name <name>
    где Name — имя примапленного сетевого принтера (не обязательный параметр). Если параметр Name не указан, то будут отключены все примапленные сетевые принтеры.
  • Get-PrinterInfo -Computer <name> -Name <name>
    где Computer — имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, то будет использоваться локальная машина),
    Name — имя принтера на удалённой или локальной машине, зависит от предыдущего параметра (не обязательный параметр. Если не указан, то будет выведена краткая справка о всех принтерах указанного компьютера. Если указан, то будет выведена подробная информация о принтере). Вывод данной команды не будет содержать сведений о правах доступа на принтер.
  • Set-DefaultPrinter -Name <name>
    где Name — имя (или путь) принтера, который должен стать для пользователя принтером по умолчанию.
  • New-PrinterShare -Computer <name> -Name <name> -ShareName <name>
    где Computer — имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)
    Name — имя принтера, который требуется предоставить для общего доступа
    ShareName — сетевое имя принтера, т.е. имя, под которым принтер будет виден из сети
  • Remove-PrinterShare -Computer <name> -Name <name>
    где Computer — имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)
    Name — имя принтера, для которого необходимо отключить общий доступ (не обязательный параметр. Если не указан, то общий доступ будет отменён для всех расшаренных принтеров на выбранном предыдущим параметром компьютере)
  • Get-Printer -Computer <name> -Name <name>
    где Computer — имя компьютера, к которому подключён принтер (не обязательный параметр. Если не указан, будет использоваться локальная машина)
    Name — имя принтера, для которого следует получить сведения о правах доступа (не обязательный параметр. Если не указан, то будут получены сведения об ACL всех принтеров на выбранном предыдущим параметром компьютере)
    Генерирует на выходе массив объектов с необходимыми сведениями о каждом ACE. Данный массив можно использовать как для изменения прав доступа, так и просто для экспорта во внешний файл.
  • Set-Printer
    не принимает никаких аргументов, а только получает данные по конвейеру. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML)
  • Add-PrinterPermission -User <name> -AceType <name> -AccessMask <name>
    где User — имя пользователя/группы, которого следует добавить в ACL список принтера
    AceType — тип доступа. Может быть Allow или Deny
    AccessMask — маска доступа. Может иметь следующие значения: ManagePrinters, ManageDocuments, Print, TakeOwnership, ReadPermissions, ChangePermissions
    Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML)
  • Remove-PrinterPermission -User <name>
    где User — имя пользователя/группы, которого следует удалить из списка ACL принтера
    Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer. Команда не может быть в начале строки, а только на выходе конвейера, с которого поступают объекты. Так же по конвейеру можно передавать объекты из внешних файлов (например, CSV, XML)
  • Set-PrinterPermission -User <name>
    где User — имя пользователя/группы, для которого следует предоставить привилегированный доступ.
    Важно:при использовании команды Set-PrinterPermission следует помнить, что указанный пользователь/группа будут иметь единственный доступ к принтеру с правом ManagePrinters. При этом вероятно, что вы после исполнения команды потеряете доступ к принтеру
    Данная команда так же не может быть в начале строки, а должна находиться на выходе конвейера, с которого поступают объекты. В качестве входных данных должны использоваться объекты, которые по свойствам соответствуют объектам, которые генерирует команда Get-Printer.

и несколько примеров использования:

Get-Printer PrintSrv "MyPrinter" | export-csv C:\LaserJet.csv — экспортирует ACL списки принтера MyPrinter в CSV файл

Get-Printer PrintSrv | Remove-PrinterPermission Everyone — удаляет группу Everyone из списков ACL всех принтеров сервера PrintSrv

Import-Clixml C:\Printers.xml | Set-Printer — восстанавливает права для принтеров на те, которые содержатся в XML файле. При этом текущие списки ACL указанных в файле принтеров будут полностью перезаписаны списком ACL из файла.

Get-Content C:\Computers.txt | % — даёт право печати на всех принтерах, которые подключены к компьютерам из списка computers.txt

New-NetworkPrinter PrintSrv "HP LaserJet 2100" — подключает пользователю в контексте котрого исполняется скрипт сетевой принтер HP LaserJet 2100, который физически подключен к компьютеру PrintSrv

Это далеко не все варианты использования 🙂 Вобщем, я старался создать достаточно широким функционалом, который обычно требуется в скриптах для принтменеджмента. Безусловно, он не охватывает все задачи и в нём реализованы только те функции, которые я посчитал актуальными. А вот, собственно и скрипт с небольшими комментариями по ходу дела:

многовато, конечно же, но ничего космически сложного для разбора я тут не вижу. Главное — чёткое понимание структуры SecurityDescriptor и хотя бы базовые навыки работы с ним.

Важно: если не указываете необязательные параметры, то указание последующих параметров в виде именованных (не позиционных) обязательна!

Даже не знаю, что ещё добавить сюда. Вроде все вопросы разобрал ранее, сейчас просто это всё собрал воедино. Вобщем, как обычно, если есть вопросы, замечания — кнопка Comments вам в помощь 😉

Источник

Сетевой принтер в Windows 10

Домашняя или офисная рабочая сеть состоит не только из компьютеров и ноутбуков, но и из периферийного оборудования, включая и принтеры. Последние используют для распечатки текстовой и графической информации. Чтобы каждый раз не переподключать печатающее устройство к компьютеру, на котором содержатся данные для печати, можно приобрести дорогостоящий принтер, подключаемый к проводному интернету или сети Wi-Fi. Вариант попроще и подешевле, доступный для операционных систем последнего поколения, — подключение сетевого принтера в Windows 10. Как оно выполняется, расскажем в этой статье.

Для чего нужен сетевой принтер

Сетевой принтер позволяет распечатывать картинки и документы с любого компьютера или ноутбука, подключённого к локальной сети. Физически устройство остаётся подсоединено к одному ПК: не требуется переносить принтер с места на место, организовывать для него свободное пространство, подключать к новым USB-разъёмам. Выполнять все эти манипуляции каждый раз долго и неудобно. Чтобы приступить к печати со своего рабочего места, достаточно узнать, как подключить сетевой принтер в Windows 10, выбрать файл и отправить его в очередь.

Такой подход актуален для устройств печати, которые нельзя напрямую подключить к интернету: посредством Ethernet-кабеля или беспроводной сети. В противном случае задача ещё упрощается: принтер становится видимым для всех компьютеров в локальной сети и без дополнительных настроек. Оборудование выступает в роли автономного сетевого устройства, и всё, что требуется для печати с рабочего ПК, — нажать кнопку питания и убедиться, что в лотке есть бумага.

С исчезновением из Windows 10 версии 1803 раздела «Домашняя группа» изменился и порядок настроек. Ниже представлен актуальный способ, позволяющий подключить сетевой принтер на операционной системе последнего поколения, а печатать на нём — из Windows 7, 8/8.1 и 10.

Настройка

Подготовительные действия

Перед тем как добавить сетевой принтер, выполните несколько предварительных операций. Они позволяют подготовиться к основной части работы, избежать возможных осложнений и ошибок. Имея в распоряжении включённый компьютер, сделайте следующее:

  • Посмотрите его имя или IP-адрес. Найти информацию можно в разделе «Система», в «Панели управления», или воспользовавшись командной строкой:

  • Разрешите для устройств, находящихся в той же локальной сети, общий доступ к папке. Пропустив этот пункт, вы не сможете пересылать графические и текстовые файлы на целевой принтер.
  • Подключите к компьютеру принтер, отыщите его в списке устройств и запомните (скопируйте или сделайте скриншот) полное наименование. Если ПК или ноутбук не видит периферийное оборудование, сначала решите эту проблему.

Теперь всё готово для того, чтобы настроить сетевой принтер Windows 10. Сделать это можно тремя более или менее простыми способами. Рекомендуем начать с первого: он наиболее лёгок и не требует применения специальных инструментов.

Через меню «Параметры»

Новое меню отчасти заменило «Панель управления», дублируя некоторые системные настройки. Со временем оно призвано полностью заменить исходный инструмент управления, пока же позволяет, в частности, настроить печатающее устройство так, чтобы оно было доступно с любого локального компьютера — за несколько минут и без глубоких познаний в области информационных технологий.

Чтобы узнать, как добавить сетевой принтер в Windows 10, следуйте инструкции:

  • Откройте меню «Пуск».
  • Найдите в самом левом столбце пиктограмму-«шестерёнку». Щёлкнув по ней, перейдите в «Параметры».
  • Оказавшись в общем списке, зайдите в раздел «Устройства».

  • При помощи бокового столбца слева откройте вкладку «Принтеры и сканеры».

  • Выберите вариант «Добавить принтер или сканер».

  • На следующей странице отметьте, щёлкнув по ссылке, что нужного вам принтера нет в списке.

  • Пользуясь формой добавления нового устройства, установите кружок возле пункта «Выбрать общий принтер по имени». В свободном текстовом поле впишите путь к устройству в формате \\ИМЯ_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА или \\IP-АДРЕС_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА. проверьте правильность написания и нажмите «Далее».

  • Вместо способа, описанного в пункте 7, можете нажать «Обзор» и найти свой принтер в разделе «Сеть».
  • Подождите, пока устройство будет установлено в качестве сетевого. При необходимости подтвердите установку драйвера.
  • По завершении настроек вы сможете задать использование этого принтера по умолчанию, а также запустить пробную печать.

При наличии общего доступа принтер будет виден со всех ПК из локальной сети. Перед тем, как отправить на печать, не забудьте включить устройство, убедиться в наличии чернил и бумаги.

Настройка сетевого принтера через PowerShell

Утилита, называемая PowerShell и представляющая собой улучшенную версию командной строки, также даёт ответ на вопрос, как настроить сетевой принтер в Windows 10. Приложение содержится в операционной системе по умолчанию, не нуждается в установке и модификации. Чтобы добавить «общее» устройство, воспользуйтесь алгоритмом:

  • Запустите Windows PowerShell. Чтобы найти утилиту, вызовите меню «Пуск» и начните печатать название — или воспользуйтесь расположенной рядом пиктограммой лупы.

  • Дождитесь загрузки приложения и введите команду Add-Printer -ConnectionName “\\ИМЯ_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА”. Чтобы запрос имел силу, обязательно используйте косые чёрточки и кавычки. Проверьте правильность написания и нажмите Enter.

  • Вместо блока «ИМЯ_ПК» можете подставить IP компьютера. Тогда команда будет иметь вид: Add-Printer -ConnectionName “\\IP-АДРЕС_ПК\НАИМЕНОВАНИЕ_ПРИНТЕРА”.

После применения команды обновите рабочий стол или перезапустите компьютер. Сетевой принтер, если вы правильно указали путь к нему, появится на всех подключённых локальных машинах.

Через «Панель управления»

Этот инструмент по-прежнему доступен в современных поколениях ОС. Можете воспользоваться и им, чтобы узнать, как установить сетевой принтер на Windows 10. Следуйте инструкции:

  • Откройте «Панель управления». Можете найти ярлык в меню «Пуск» или при помощи системного поиска.
  • Для большего удобства переключитесь на способ отображения «Крупные значки». Зайдите в категорию «Устройства и принтеры».
  • Воспользуйтесь кнопкой «Добавление принтера», размещённой в верхней панели нового окна.

  • На запрос ОС ответьте, что нужный вам принтер отсутствует в общем списке.
  • Повторите действия, описанные для меню «Параметры», начиная с 7-го пункта.

В результате вы получите полностью готовый к работе сетевой принтер. Он будет доступен только для компьютеров, подключённых к одной сети. Менять настройки после добавления нового ПК нет нужды — печатающее устройство автоматически появится в списке. А если захотите переставить принтер к другой машине — просто повторите для неё все описанные действия!

Источник

Добавление сетевого принтера на удаленной машине

Всем привет! интересует такой вопрос — можно ли средствами powershell удаленно устанавливать сетевые принтеры. Например — есть принтсервер \\testprint\ На нем установлены различные принтера и доступны для установки по сети(шаре). Т.е. задача такая, написать скрипт где выбирать необходимый принтер с этого сервера и устанавливать его на удаленный пк. Пробовал через invoke-command отправлять команду на удаленный пк :

Пишет — имя принтера задано не верно.. хотя на локальном пк отрабатывает нормально.

Может кто нибудь знает другие методы? Или что я не так делаю в данном примере?

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

Коннект к удалённой машине
может ктонибудь знает благодаря каким компонентам осуществляеться связка с mysql БД, и вообще.

Подключение к удаленной машине
почему я не могу подключиться к удаленной машине. вот код public bool Connect() .

Время на удаленной машине
Доброго времени суток! Необходимо получать время на удаленной машине, что использовать для этого.

Docker-compose на удаленной машине
Подскажите, как правильно производить развертывание приложения с использованием докер. Есть.

Сообщение от newlife_86
Сообщение от newlife_86

Если ПК доменные, то удобнее всего решить такую задачу с помощью Group Policy

Сообщение от newlife_86

Сообщение от newlife_86
Лучший ответСообщение было отмечено newlife_86 как решение

Решение

Сообщение от newlife_86

Если GPO воспользоваться не хотите, тогда запускаем "батник" через powershell

Спасибо большое! Этот метод сработал, добавляется нужный принтер. Может еще подскажете команду как удалить сетевые принтеры. И еще бы список установленных получать))

Добавлено через 1 час 0 минут
Пробую такую же команду отправить на удаленный пк только на удаление принтера, не работает, принтер на месте остается(( локально у меня работает.

Сообщение от newlife_86

Вот только с получением списка сетевых принтеров есть одно, но — если пользователь подключил принтер самостоятельно, то HKLM-ветке его не будет и нужно смотреть в HKCU (HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices) каждого пользователя

Получить список сетевых принтеров локально намного проще:

Равно, как и удалить:

это всё понятно, но совсем неинтересно.
а интересно попробовать прикрутить DSC.
или Ansible.
а можно и Ansible + DSC.

дело за мотивацией. вот у меня пока не хватает.

Добавлено через 5 минут
дело ещё и в том, что powershell( и все его производные тоже) мутирует прямо на глазах;
надо подождать, чтобы затвердел и остепенился.

Сообщение от volodin661

Ещё SCCM забыли

Но как я уже здесь писал, при наличие AD, задача из этой темы проще всего решается через Group Policy. Причём вплоть до автоматического подключения принтера в зависимости от номера комнаты пользователя.

Добавлено через 3 минуты

Сообщение от volodin661

Удаление/подключение заработало, спасибо огромное, мне это и нужно было)) а вот с получением списка проблемы
icm -Comp $ComputerName -ScriptBlock < ls "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices"| %<$_.GetValue("Printer")>>
Такой командой выдает ошибку —
Не удается найти путь "C:\Users\user\Documents\HKEY_CURRENT_USER\Software\Microsof t\Windows NT\CurrentVersion\Devices", так как он не существует.
по моему эта команда ломится на удаленном пк в реестр, но запрашивает ветку с моей учеткой, а не под тем пользователем который сейчас там работает.

Добавлено через 1 час 4 минуты
Подправил путь к реестру, неверно прописал
icm -Comp $ComputerName -ScriptBlock < ls "HKCU:\Software\Microsoft\Windows NT\CurrentVersion\Devices" | %<$_.GetValue("Printer")>>
В этом случае ни чего не возвращает. Хотя если посмотреть у пользователя в реестре записи есть.

Лучший ответСообщение было отмечено newlife_86 как решение

Решение

Сообщение от newlife_86
Сообщение от newlife_86

Вы внимательно прочитали мой ответ #12 — "нужно смотреть в HKCU каждого пользователя"? Invoke-Command выполняется в сессии/профиле пользователя запустившего эту команду.

И ещё раз — в HKCU перечисленны принтеры, подключенные пользователем самостоятельно. Если информация о таких принтерах нужна, то получить их список можно примерно так:

Что то я немного запутался, только начинаю изучать Пош. Вообще изначально задача такая была — именно средствами поша (т.к. я пишу форму на нем для управления AD и удаленно Компами в целом) реализовать добавление/удаление принтера на удаленный пк(доменный) и получать список принтеров, актуальный, текущего пользователя на удаленном пк. Т.е. например поступил запрос добавить такой то принтер с принтсервера на такой то ПК. Прежде мне нужно получить список принтеров пользователя, если нужно поудалять лишние и добавить нужный по запросу с установкой его по дефолту.
Если с удалением и добавлением я более менее разобрался(спасибо за команды), а вот со списком беда.. как мне получить список принтеров текущего интерактивного пользователя на удаленном пк. что бы проанализировать что нужно убрать, добавить новый принтер, ну и в дальнейшем так же получать актуальную информацию по принтерам.

Добавлено через 5 минут
Последний приведенный пример действительно получает подключенные принтера пользователя. Но если я добавляю ему принтер удаленно, то он не появлется по моему запросу этой командой. Т.е. выводит те которые были до этого уже установлены.

Источник

PowerShell и Group Policy Preferences, когда счет принтеров на сотни

Много копий сломано вокруг управления сетевыми принтерами на пользовательских компьютерах. В основном администраторы разбились на два лагеря: подключение логон-скриптами (bat/vbs) и управление через GPP. У обоих подходов есть свои плюсы: скрипты быстрее обрабатываются, а GPP гибче и применяется чаще, чем пользователи перезагружают компьютеры. Но когда принтеров больше сотни и разбросаны они в нескольких десятках офисов и городов, сложности будут в обоих случаях.

Нужно не только подключить правильный набор принтеров каждому пользователю, с учетом его текущего местонахождения, но и ни про один не забыть. А если иногда перемещаются не только пользователи, но и сами принтеры…

В общем, мы с коллегами для себя выбрали GPP, в первую очередь для того, чтобы кто-то кроме ведущих администраторов мог разобраться в действующем конфиге, просто посмотрев отчет GPMC. Однако, кто скажет, что его штатный интерфейс удобен для управления 100+ устройствами — пусть первый бросит в меня камень. Кроме того, при вводе в эксплуатацию очередной партии нужно проделать много рутины по настройке сетевого сканирования и добавлению на сервер печати.

А всё, что делается больше одного раза, можно автоматизировать!

Что мы сегодня будем делать?

  • вести учет всех сетевых принтеров;
  • автоматизировать добавление принтеров в GPP (PS/XML);
  • автоматизировать добавление принтеров на принт-сервер, причем на кластерный (BAT/VBS)!

1. Учет сетевых принтеров

Первая проблема, которая возникает при управлении большим количеством любых объектов — это учет. Без него легко запутаться, что где установлено и кому должно быть подключено.
Самое простое и универсальное решение — CSV. В конце концов, из любой системы инвентаризации, ServiceDesk или Excel-таблицы можно выгрузить в CSV и потом легко импортировать это в PowerShell, что мы и будем делать дальше.

У нас выгрузка выглядит вот так:

image

Поясню сразу, для чего столько полей:

  • Name — сетевое имя принтера, оно прописывается в DNS и на сервере печати
  • ByGroup — поле определяет, подключать принтер всем, кто находится в соответствующей подсети или только тем, кто входит в группу AD. Также по группе задаются ACL.
  • Subnet — подсеть, в которой должен находиться пользователь для работы с принтером
  • Location — строка расположения принтера, по которой ищет виндовый мастер добавления принтеров

2. Автоматизируем GPP

В общем случае файл Printers.xml в объекте GPP выглядит примерно так:

Практически же, я думаю, вы без труда сопоставите названия полей в этом файле с чекбоксами в интерфейсе GPP, но ключевые моменты я отмечу:

clsid — это фиксированные значения классов Group Policy Preferences, их можно (и нужно) оставить как есть.

Name/Status — это отображаемые имена элементов в консоли GPP
uid — а вот это уникальный идентификатор объекта, который вы видели в таблице выше.

Если он будет меняться при каждом обновлении списка принтеров, принтер будет заново подключаться у всех пользователей, что может вызывать разные побочные эффекты.
Path — UNC-путь к принтеру
FilterGroup, FilterIpRange — элементы нацеливания (Targeting) по членству пользователя в группе AD и по нахождению компьютера в диапазоне IP-адресов.

2.1. Импортируем данные и создадим базовую структуру XML-документа:

Для этого используем системный класс [System.Xml.XmlDocument]:

2.2. Добавим несколько вспомогательных функций для создания необходимых элементов XML и задания их атрибутов

Создание элемента принтера:

Создание элементов фильтрации (нацеливания) по группе и по подсети:

Все три функции работают напрямую с передаваемым объектом PS и ничего не возвращают. Ремарка для перфекционистов: на момент написания скрипта так было проще и быстрее, я не стремился написать идеальный объектно-ориентированный код, мне просто нужно было, чтобы работало. Так что да, в коде есть, что улучшать, но главное — он работает!

2.3. И, наконец, основной цикл, добавление элементов управления принтерами

Для каждого принтера создается два элемента: один на добавление, если пользователь в группе и в подсети, и один на удаление принтера, если пользователь не входит в группу или находится в другой подсети.

Если по какой-то причине в CSV-файле нет UID принтера, он сгенерируется и будет выведен в консоль.

Для перевода подсети из нотации CIDR в диапазон адресов я позаимствовал замечательный командлет PSipcalc.

2.4. И теперь выводим результат в файл

Не вижу ничего плохого в том, чтобы сэкономить немного минут и сразу записать в политику:

3. Добавление принтеров на сервер печати

В Windows есть довольно малоизвестный набор vbs-скриптов для управления принтерами. Причем он есть даже в клиентских версиях. Расположен он в каталоге %SystemRoot%\System32\Printing_Admin_Scripts\en-US , мурзилку можно почитать здесь.

Нас интересуют три утилиты из набора:

prnport.vbs — для создания порта принтера на сервере печати
prnmngr.vbs — для создания самого принтера
prncnfg.vbs — для задания настроек и включения общего доступа к принтеру
Также нам понадобится утилита SetACL для задания прав доступа на принтеры.

3.1. Создаем принтер на сервере печати

Для этого создадим скрипт CreateRemotePrinter.bat.

В качестве аргументов он будет принимать, по порядку:
%1 — Имя принтера;
%2 — Имя драйвера;
%3 — Расположение (Location);
%4 — Описание принтера.

В общем случае этого достаточно. Но у нас сервер печати размещен на кластере MSCS, а указанный выше набор vbs-скриптов с кластерами работать не умеет. Поэтому придется сделать еще кое-что.

3.2. Переносим принтер с обычного сервера печати на кластеризованный

При обращении к кластеру скрипты из набора выше просто создают порт и принтер на текущей активной ноде, и на кластере они не появляются. Как раз на такой случай у Майкрософт припасен еще один инструмент — PrintBRM (Print queue Backup/Recovery/Migration). Официальной документации на него я не нашел, поэтому делюсь тем, что есть: Справка по параметрам на SS64.

Продолжаем скрипт CreateRemotePrinter.bat.

Утилита PrintBRM умеет корректно копировать конфигурацию принтера вместе с портами на кластер, однако если просто сделать копию (запустить с ключом -b) и восстановить (-r), то никакого чуда не будет.

Поэтому сейчас будет немного магии. Она подробно описана в блоге MS Performance Team Blog.
Сначала мы делаем резервную копию принтера в файл temp.printerexport.

Затем распаковываем в подкаталог printerexport, удаляем каталоги LMONS и PRTPROCS, а также обнуляем содержимое нескольких XML-файлов. Не буду вдаваться в подробности, но эти файлы содержат конфигурацию, специфичную для конкретного сервера и мешают восстановлению принтера на другой сервер, особенно кластерный.

После этого запаковываем отредактированную конфигурацию обратно в файл temp.printerexport и загружаем на кластер:

3.3. Добавляем принтеры одновременно в GPP и на сервер/кластер

Теперь нужно органично вписать этот скрипт в цикл обработки CSV-списка принтеров.

Источник

Читайте также:  Установка мансардного окна ондулин
Adblock
detector