Глава 11. Управление печатью

В этой главе мы охватим следующие рецепты:

  • Установка и совместное применение принтеров

  • Публикация принтера

  • Изменение каталога имеющегося спулера

  • Изменение драйверов принтера

  • Печать тестовой страницы

  • Управление безопасностью принтера

  • Создание пула принтеров

Введение

Печать является функциональной возможностью Microsoft, встроенной в различные версии операционной системы Windows и была вовлечена на протяжении множества лет. Windows Server 2022 предоставляется вам с платформой печати для вашей организации. Настройка и управление принтером в Windows Server 2022 не сильно изменились по сравнению с более ранними версиями.

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

Принтеры печатают на устройствах печати при помощи порта печати (такого как USB, параллельного или сетевого). Для сетевых принтеров вам требуется определить такой порт, прежде чем вы сможете создать некий принтер Windows. Microsoft не изменил имеющуюся базовую архитектуру печати в Windows Server 2022. Windows Server 2022 ввёл новую архитектуру драйвера, которую поддерживает Windows Server 2022. Эта модель драйвера позволяет вам применять два различных типа драйвера: драйверы класса принтера и специфичные для модели драйверы. Такой последний представляет некий отдельный драйвер для различных моделей устройств печати. Вы применяете особенные для модели драйверы только для единственной модели принтера. В большей степени производители устройств печати реализуют более общие драйверы, которые могут упрощать раскрутку совместного применения принтеров.

Ещё одно изменение в Windows Server 2022, привнесённое в Windows Server 2022, состоит в том, что вам больше нет необходимости применять соответствующий сервер печати для распространения драйверов печати (что особенно актуально для сетевых принтеров). В таких ситуациях вы можете пользоваться такими инструментами как Диспетчер конфигурации Системного центра (System Center Configuration Manager) или Групповую политику для распространения драйверов печати клиентам.

Эта глава охватывает установку, управление и обновление принтеров, устройств печати и портов печати в сервере Windows Server 2022. Вы можете обнаружить, что некоторые из инструментов администрирования, применяемые в этой главе не доступны в системах Windows Server Core. Для включения полного управления вам потребуется обладать полным графическим интерфейсом (включая применение Рабочего стола) для всех утилит графического интерфейса.

В рецепте Установка и совместное применение принтеров вы устанавливаете принтер и совместно применяете его для пользования прочими. В рецепте Публикация принтеров вы публикуете соответствующий принтер в Active Directory (AD), позволяя пользователям этого домена выполнять поиск в AD для нахождения соответствующего принтера. Когда вы создаёте некий сервер печати (добавляя порты принтера и принтеры), установленная по умолчанию папка подкачки данных (спулера, Windows по умолчанию применяет папку, которая находится в C:\Windows) что может быть далёким от идеального местоположения. В рецепте Изменение каталога спулера вы изменяете значение устанавливаемого по умолчанию местоположения для подкачки данных принтера.

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

Принтеры, как и файлы, способны обладать Access Control Lists (ACL, Списки контроля доступом) для определения того, кто может применять соответствующий принтер. Вы можете изменять такой ACL, как это показано в рецепте Управление безопасностью принтера. Во многих организациях устройства печати являются совместно используемым ресурсом.

В Windows, пул принтера это принтер, обладающий одним или более связанных с ним устройств печати. Это означает, что обладая двумя или более физическими принтерами (устройствами печати в отдельных портах), которые пользователи наблюдают просто как отдельный принтер. Пулы принтеров полезны в тех ситуациях, когда пользователи создают большое число печатаемых документов и может быть развёрнуто большое число физических принтеров. В рецепте Создание пула принтеров вы сможете обнаружить как вы можете автоматизировать такое создание пула принтеров при помощи rundll32.exe.

Установка и совместное применение принтеров

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

В этом рецепте вы выгружаете и устанавливаете два драйвера принтера Xerox. Один из этих драйверов вы применяете в этом рецепте; другим вы пользуетесь в рецепте Изменение драйверов принтера.

[Замечание]Замечание

Обратите внимание: когда вы применяете этот рецепт для поддержки иного изготовителя принтера или иной модели, вам могут потребоваться некоторые изменения. В некоторых случаях, например для некоторых принтеров Hewlett Packard, следует устанавливать драйверы принтера, разрабатываемые производителем, получаемые через выгрузку исполняемого файла. Вам может потребоваться запустить такой выгруженный исполняемый файл, который вы выполняете в своём сервере печати для добавления необходимых драйверов. Тем самым, этот рецепт может быть неприменимым для всех устройств печати.

Подготовка

В этом рецепте вы пользуетесь хостом PSRV Windows Server, присоединённом к домену хосту Windows Server 2022, в котором у вас имеются установленными PowerShell и VS Code.

Как это сделать...

  1. Устанавливаем компонент Print-Server в PSRV

    
    Install-WindowsFeature -Name Print-Server, RSAT-Print-Services
    		
  2. Создаём папку для драйверов принтера Xerox

    
    $NIHT = @{
      Path        = 'C:\Foo\Xerox'
      ItemType    = 'Directory'
      Force       = $true
      ErrorAction = "Silentlycontinue"
    }
    New-Item @NIHT | Out-Null
    		
  3. Выгружаем драйверы принтера для принтеров Xerox

    
    $URL='http://download.support.xerox.com/pub/drivers/6510/'+
         'drivers/win10x64/ar/6510_5.617.7.0_PCL6_x64.zip'
    $Target='C:\Foo\Xerox\Xdrivers.zip'
    Start-BitsTransfer -Source $URL -Destination $Target
    		
  4. Раскрываем полученный файл ZIP

    
    > $Drivers = 'C:\Foo\Xerox\Drivers'
    Expand-Archive -Path $Target -DestinationPath $Drivers
    		
  5. Устанавливаем необходимые драйверы

    
    $M1 = 'Xerox Phaser 6510 PCL6'
    $P =  'C:\Foo\Xerox\Drivers\6510_5.617.7.0_PCL6_x64_Driver.inf\'+
          'x3NSURX.inf'
    rundll32.exe printui.dll,PrintUIEntry /ia /m "$M1"  /f "$P"
    $M2 = 'Xerox WorkCentre 6515 PCL6'
    rundll32.exe printui.dll,PrintUIEntry /ia /m "$M2"  /f "$P"
    		
  6. Добавляем PrinterPort для нового принтера

    
    $PPHT = @{
      Name               = 'SalesPP' 
      PrinterHostAddress = '10.10.10.61'
    }
    Add-PrinterPort @PPHT
    		
  7. Добавляем этот принтер в PSRV

    
    $PRHT = @{
      Name = 'SalesPrinter1'
      DriverName = $m1 
      PortName   = 'SalesPP'
    }
    Add-Printer @PRHT
    		
  8. Настраиваем совместное применение этого принтера

    
    Set-Printer -Name SalesPrinter1 -Shared $True
    		
  9. Просматриваем что вы сделали

    
    Get-PrinterPort -Name SalesPP |
        Format-Table -Autosize -Property Name, Description,
                               PrinterHostAddress, PortNumber
    Get-PrinterDriver -Name xerox* |
        Format-Table -Property Name, Manufacturer,
                               DriverVersion, PrinterEnvironment
    Get-Printer -ComputerName PSRV -Name SalesPrinter1 |
        Format-Table -Property Name, ComputerName,
                               Type, PortName, Location, Shared
    		

Как это работает...

На Шаге 1 вы устанавливаете и компонент Windows Print-Server, и RSAT (Remote Server Administration Tools, Инструментов удалённого администрирования сервером) печати со следующим выводом:

 

Рисунок 11-01


Установка компонента Print-Server в PSRV

На Шаге 2 вы создаёте новую папку, которую вы применяете для содержания выгружаемого драйвера принтера. На Шаге 3 вы выгружаете необходимые драйверы (как сжатые ZIP файлы) в только что созданную папку. На Шаге 4 вы раскрываете эти ZIP файлы, а на Шаге 5 вы устанавливаете эти драйверы принтера. На Шаге 6 вы добавляете новый порт принтера в PSRV, а на Шаге 7 вы добавляете новый принтер при помощи только что созданного порта принтера и применения выгруженных драйверов принтера Xerox. Наконец, на Шаге 8, вы разделяете этот принтер таким образом, чтобы и прочие пользователи имели возможность печати в нём. Эти шаги не производят вывод.

На Шаге 5 вы применяете приложение консоли rundll32.exe для установки необходимых драйверов принтера в Windows. Эта команда, может так случиться, выработает диалоги об ошибке "Operation could not be completed". Решение состоит в том, что следует подождать несколько секунд и попробовать снова.

На Шаге 9 вы изучаете имеющиеся порты принтера, драйверы принтера и принтеры, доступные в PSRV с подобным приводимому ниже выводом:

 

Рисунок 11-02


Просмотр компонентов принтера в PSRV

Есть кое- что ещё...

В данном рецепте вы создаёте в PSRV принтер на основании принтеров Xerox. Это факт, что вы можете не обладать такой моделью принтера в своей среде, что означает, что вы не сможете физически печатать на таком устройстве печати, однако вы можете настроит такой принтер, как показано в этом рецепте.

На Шаге 5 вы пользуетесь printui.dll и rundll32.exe. Теперь printui.dll это библиотека управления функциональностью принтера. Если для управления принтерами вы применяете инструмент Диспетчера принтера (Printer Management) с графическим интерфейсом, этот графический интерфейс вызывает данную DLL для выполнения выбранного вами действия. Поскольку Microsoft разработал и собрал такую DLL для поддержки графического интерфейса принтера Windows, эта DLL способна создавать дополнительные блоки диалога, что не очень способствует автоматизации. Для решения всех проблем вы можете полагаться на вырабатываемые справочные сведения.

На практике, printui.dll является слегка подвержена ошибкам и способна вырабатывать сообщения об ошибках с небольшими подробностями поддержки в помощь вам. Основное решение состоит в повторе действия после ожидания на протяжении нескольких секунд или, если эта проблема продолжит оставаться, перезагрузить данный сервер.

Вы можете получить полезные сведения в синтаксисе, необходимым printui.dll, раскрыв окно консоли PowerShell и выполнив такую команду:


rundll32 printui.dll PrintUIEntry
		

В данном рецепте вы выгрузили и установили два драйвера. В данном рецепте вы воспользовались одним драйвером для создания принтера SalesPrinter1. Вторым драйвером вы воспользуетесь позднее в этой главе в рецепте Изменение драйверов принтера.

Публикация принтеров

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

Подготовка

Перед исполнением данного рецепта вам требуется обладать настроенным сервером печати PSRV (который вы сделали в рецепте Установка и совместное применение принтеров). Дополнительно вам требуется создать SalesPrinter1.

Как это сделать...

  1. Получаем принтер для публикации и сохраняем возвращаемый объект в $Printer

    
    $Printer = Get-Printer -Name SalesPrinter1
    		
  2. просматриваем подробности этого принтера

    
    $Printer | Format-Table -Property Name, Published
    		
  3. Публикуем этот принтер в AD и выставляем его для совместного применения

    
    $Printer | Set-Printer -Location '10th floor 10E4'
    $Printer | Set-Printer -Shared $true -Published $true
    		
  4. Просматриваем и обновляем состояние публикации

    
    Get-Printer -Name SalesPrinter1 |
      Format-Table -Property Name, Location, DriverName, Published
    		

Как это работает...

На Шаге 1 вы получаете подробности того принтера, который собираетесь применять для совместного использования и сохраняете их в переменной $Printer. На Шаге 2 вы изучаете полученные сведения о принтере, содержащиеся в $Printer, вот как выглядит вывод:

 

Рисунок 11-03


Просматриваем принтер SalesPrinter1 в PSRV

На Шаге 3 вы публикуете этот принтер в AD Reskit.Org и превращаете его в явном виде в совместно используемый. Этот шаг не производит вывод. На Шаге 4 для просмотра состояния имеющихся публикаций имеющихся принтеров вы применяете Get-Printer и получаете что- то наподобие приводимого ниже:

 

Рисунок 11-04


Просматриваем состояние публикации принтера SalesPrinter1

Есть кое- что ещё...

Публикация принтера в AD позволяет пользователям определять местоположение принтеров рядом с ними при помощи диалога Добавления принтера (Add Printer) для поиска опубликованных принтеров. Например, если вы зарегистрировались к каком- то из компьютеров домена, вы можете получить этот диалог покликав Start | Settings | Devices | Printers & scanners (Пуск | Параметры | Устройства | Принтеры и сканеры) для входа в диалог Add printers & scanners (Добавить принтеры и сканеры). В блоке этого диалога кликните по Add printers & scanners (Добавить принтеры и сканеры). Дождитесь окончания поиска и затем кликните по The printer that I want isn't listed (Необходимый принтер отсутствует в списке), что переведёт вас в диалог Add Printer (Установка принтера).

 

Рисунок 11-05


Применение диалога Добавления принтера

В этом блоке диалога кликните по Next (Далее), чтобы перейти к диалогу Find Printers (Поиска доступных принтеров), который выглядит следующим образом:

 

Рисунок 11-06


Применение диалога Поиск принтеров

В организациях крупного масштаба публикация принтеров в AD может быть очень полезной пользователям для поиска доступных им корпоративных принтеров.

Изменение каталога спулера

В процессе печати подкачка страниц Windows принтера Windows пользуется папкой на диске для хранения временных файлов, создаваемых процессом печати. Когда множество пользователей каждого принтера печатает очень большие документы в неком отдельном принтере, имеющиеся очередь печати и временная папка могут становиться достаточно большими. По умолчанию этой папкой выступает C:\Windows\System32\spool\PRINTERS. для занятого сервера печати со множеством принтеров вы можете пожелать изменить такую устанавливаемую по умолчанию папку подкачки страниц (спулера).

Подготовка

Этот рецепт пользуется сервером печати PSRV, который вы настроили в рецепте Установка и совместное применение принтеров.

Как это сделать...

  1. Загружаем пространство имён и классы System.Printing

    
    Add-Type -AssemblyName System.Printing
    		
  2. Определяем необходимые permissions

    
    $Permissions =
       [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
    		
  3. Создаём объект PrintServer с необходимыми полномочиями

    
    $NOHT = @{
      TypeName     = 'System.Printing.PrintServer'
      ArgumentList = $Permissions
    }
    $PS = New-Object @NOHT
    		
  4. Рассматриваем папку подкачки страниц по умолчанию

    
    "The default spool folder is: [{0}]" -f $PS.DefaultSpoolDirectory
    		
  5. Создаём новую папку подкачки страниц

    
    $NIHT = @{
      Path        = 'C:\SpoolPath'
      ItemType    = 'Directory'
      Force       = $true
      ErrorAction = 'SilentlyContinue'
    }
    New-Item @NIHT | Out-Null
    		
  6. Обновляем путь к папке подкачки страниц по умолчанию

    
    $Newpath = 'C:\SpoolPath'
    $PS.DefaultSpoolDirectory = $Newpath
    		
  7. Фиксируем выполненные изменения

    
    $Ps.Commit()
    		
  8. Перезапускаем свой Spooler чтобы изменения вступили в силу

    
    Restart-Service -Name Spooler
    		
  9. Проверяем новую папку подкачки страниц

    
    New-Object -TypeName System.Printing.PrintServer |
      Format-Table -Property Name,
                    DefaultSpoolDirectory
    		
  10. Останавливаем свою службу Spooler

    
    Stop-Service -Name Spooler
    		
  11. Создаём новый каталог подкачки страниц

    
    $SPL = 'C:\SpoolViaRegistry'
    $NIHT2 = @{
      Path        = $SPL
      Itemtype    = 'Directory'
      ErrorAction = 'SilentlyContinue'
    }
    New-Item  @NIHT2 | Out-Null
    		
  12. Создаём необходимую папку подкачки страниц и настраиваем её в своём реестре

    
    $RPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\' +
             'Print\Printers'
    $IP = @{
      Path    = $RPath
      Name    = 'DefaultSpoolDirectory'
      Value   = $SPL
    		
  13. Перезапускаем свой Spooler

    
    Start-Service -Name Spooler
    		
  14. Просматриваем только что обновлённую папку подкачки страниц

    
    New-Object -TypeName System.Printing.PrintServer |
      Format-Table -Property Name, DefaultSpoolDirectory
    		

Как это работает...

На Шаге 1 вы загружаете пространство имён System.Printing, что не сопровождается выводом. На Шаге 2 вы создаёте некую переменную, содержащую желательный доступ к создаваемому принтеру. На Шаге 3 вы создаёте объект PrintServer с соответствующими подходящими полномочиями. Затем, на Шаге 4 вы изучаете установленную по умолчанию папку подкачки страниц печати для вновь установленного хоста Windows Server 2022, что сопровождается таким выводом:

 

Рисунок 11-07


Изучаем установленную по умолчанию папку подкачки страниц печати

На Шаге 5 вы создаёте в PSRV новую папку для обслуживания папки подкачки страниц сервера печати. На Шаге 6 вы обновляете значение пути к папке подкачки страниц принтера. На Шаге 7 вы фиксируете это изменение, а на Шаге 8 вы перезапускаете свою службу подкачки страниц печати. Эти четыре шага не производят вывод в консоль.

На Шаге 9 вы повторно просматриваете подробности своего принтера с подобным приводимому ниже выводом:

 

Рисунок 11-08


Просматриваем новую папку подкачки страниц печати

На Шагах с 1 по Шаг 9 вы настраиваете и проверяете необходимую папку подкачки страниц печати при помощи объекта .NET.

На Шаге 10 вы останавливаете свою службу подкачки страниц печати. На Шаге 11 вы создаёте новую папку и на Шаге 12 вы настраиваете необходимые установки реестра чтобы они содержали значение пути к новой папке подкачки страниц печати. Затем, на Шаге 13 вы перезапускаете свой спулер. Эти четыре шага не производят никакого вывода на консоль. После выполнения изменений папки подкачки страниц печати в вашем реестре, на Шаге 14 вы можете просмотреть выполненные обновления папки спулера с подобным приводимому далее выводом:

 

Рисунок 11-09


Изучаем и обновляем папку подкачки страниц печати

Есть кое- что ещё...

В большинстве организаций с большим числом совместно используемых принтеров настройка сервера печати для применения иной папки под подкачку страниц печати будет не плохой мыслью. Если есть такая возможность, воспользуйтесь отдельным дисковым устройством если вы желаете избегать риска заполнения папки подкачки страниц печати.

В данном рецепте вы воспользовались двумя различными механизмами замены папки подкачки страниц печати. Один применял объект .NET (который не загружается по умолчанию), в то время как другой вовлекает непосредственное редактирование вашего реестра. Не лишним будет напомнить, что когда вы раскручиваете принтеры при помощи сценариев, в особенности тех, которые изменяют ваш реестр, жизненно важным является тщательное тестирование.

Многие из этапов данного рецепта не производят никакого вывода. Такое отсутствие вывода является нормальным когда вы имеете дело напрямую с классами и методами .NET, а также с изменением реестра.

Изменение драйверов принтера

Может так получиться, что появится необходимость изменения драйвера принтера для некого принтера. Например, вы можете заменить некое имеющееся устройство печати новой или отличающейся моделью. В таком случае вы захотите оставить название этого принтера прежним, но вам потребуется обновить драйвер принтера для этого принтера. В рецепте Установка и совместное применение принтеров вы выгружали и устанавливали два драйвера принтера Xerox. При определении принтера SalesPrinter1 вы воспользовались первым драйвером, Xerox Phaser 6510 PCL6.

В этом рецепте вы измените установленный драйвер для своего принтера и воспользуетесь другим, установленным ранее драйвером, Xerox Phaser 6515 PCL6.

Этот рецепт предполагает, что значение название принтера и порта принтера (включая значения адреса IP принтера и номера порта) не изменяются, изменяется лишь сам драйвер.

Подготовка

Выполните этот рецепт в хосте PSRV, настроенном как в рецепте Установка и совместное применение принтеров.

Как это сделать...

  1. Добавляем соответствующий драйвер принтера для своего нового устройства печати

    
    $M2 = 'Xerox WorkCentre 6515 PCL6'
    Add-PrinterDriver -Name $M2
    		
  2. Получаем объект принтера своей Группы продаж и сохраняем его в $Printer

    
    $Printern = 'SalesPrinter1'
    $Printer = Get-Printer -Name $Printern
    		
  3. Обновляем применяемый драйвер при помощи командлета Set-Printer

    
    $Printer | Set-Printer -DriverName $M2
    		
  4. Просматриваем обновлённый драйвер принтера

    
    Get-Printer -Name $Printern | 
      Format-Table -Property Name, DriverName, PortName, 
                    Published, Shared
    		

Как это работает...

На Шаге 1 для добавления необходимого драйвера в наш принтер вы применяете командлет Add-PrinterDriver. На Шаге 2 вы получаете подробности этого принтера, а на Шаге 3 вы обновляете этот принтер на применение только что обновлённого драйвера. Эти шаги не сопровождаются выводом.

На Шаге 4 для просмотра того что вы установили обновлённый драйвер для своего принтера SalesPrinter1 вы пользуетесь Get-Printer, что выглядит подобно следующему:

 

Рисунок 11-10


Просматриваем и обновляем драйвер принтера для SalesPrinter1

Есть кое- что ещё...

Как вы видели в этом рецепте, изменение драйвера принтера достаточно простое - после установки некого нового драйвера вы пользуетесь Set-Printer для уведомления Windows о том какой именно драйвер она должна применять при печати на этот принтер.

Печать тестовой страницы

Бывают ситуации, когда вы можете захотеть распечатать некую проверочную страницу на принтере; например, после замены тонера или чернил принтера в физическом устройстве печати или после замены драйвера принтера (как это показано в рецепте Изменение драйверов принтера). В таких ситуациях такие пробные страницы помогут вам гарантировать что этот принтер работает как положено.

Подготовка

Данный рецепт пользуется сервером печати PSRV, который вы настроили в рецепте Установка и совместное применение принтеров.

Как это сделать...

  1. Подучаем объекты принтера из WMI

    
    $Printers = Get-CimInstance -ClassName Win32_Printer
    		
  2. Отображаем общее число определённых в PSRV принтеров

    
    '{0} Printers defined on this system' -f $Printers.Count
    		
  3. Получение объекта WMI принтера группы Продаж

    
    $Printer = $Printers |
      Where-Object Name -eq 'SalesPrinter1'
    		
  4. Отображение подробностей этого принтера

    
    $Printer | Format-Table -AutoSize
    		
  5. Печать страницы проверки

    
    Invoke-CimMethod -InputObject $Printer -MethodName PrintTestPage
    		
  6. Проверка задания на печать

    
    Get-PrintJob -PrinterName SalesPrinter1
    		

Как это работает...

На Шаге 1 вы получаете подробности тех принтеров,которые установлены в PSRV при помощи WMI и сохраняем их в переменной $Printers, что не производит вывод. На Шаге 2 вы отображаете сколько принтеров у вас имеется определёнными в этом сервере печати со следующим выводом:

 

Рисунок 11-11


Просматриваем общее число принтеров в PSRV

На Шаге 3 вы получаете конкретный экземпляр WMI для принтера SalesPrinter1, что не производит вывода. На Шаге 4 вы просматриваете подробности этого принтера с примерно таким выводом:

 

Рисунок 11-12


Просматриваем принтеры в PSRV

На Шаге 5 вы пользуетесь Invoke-CimMethod для запуска метода PrintTestPage в соответствующем принтере. Этот шаг вырабатывает простую тестовую страницу со следующим консольным выводом:

 

Рисунок 11-13


Печать тестовой страницы

На заключительном Шаге 6 этого рецепта вы просматриваете имеющиеся задания на печать в принтере SalesPrinter1, из которого вы видите выработку тестовой страницы на нашем предыдущем шаге. Вывод этого шага выглядит приблизительно так:

 

Рисунок 11-14


Просмотр задач принтера для наблюдения за нашей проверочной страницей

Есть кое- что ещё...

В этом рецепте вы воспользовались WMI для создания тестовой страницы в вашем принтере SalesPrinter1. Как вы показали на Шаге 6, наша очередь принтера обладает заданием на печать. Теоретически, этот документ должен появиться в вашем печатном устройстве без особых проблем. Если вы не получили никакого физического вывода, вам требуется позаботиться о неких процедурах разрешения проблем с принтером: включён ли этот принтер и подключён ли и работает ли его сетевой кабель?

Управление безопасностью принтера

Всякий принтер Windows обладает предоставляемым на усмотрение access control list (ACL, Список контроля доступа). Такой ACL содержит одну или более access control entries (ACE, запись контроля доступа). Каждая ACE определяет конкретные полномочия для некоторых заданных групп или пользователей. Вы можете определить некую группу (например, SalesAdmins) и предоставить этой группе необходимые полномочия для управления документами, в то время как другой группе (такой как, Sales) предоставляется доступ к печати на этом принтере.

По умолчанию, когда создаётся некий принтер, Windows добавляет некоторые ACE в ACL этого принтера. Они включают задание необходимых полномочий для печати на этом принтере группе Everyone. Для некоторых принтеров это может не подходить. По данной причине вам может потребоваться регулировка устанавливаемого ACL, что показано в этом рецепте.

Модуль PrintManagement содержит некоторые командлеты, которые помогают вам управлять вашими устройствами печати. Тем не менее, нет никаких командлетов для управления ACL в принтерах. Вы всегда можете применять .NET непосредственно для управления имеющимся ACL или воспользоваться сторонними сценариями для выполнения этого задания для вас, однако такой код может быть сложным (и легко портящим). Убедитесь что вы очень тщательно проверили каждый рецепт, изменяющий ACL принтера. Всегда имейте вариант сброса ACL обратно в установленный по умолчанию, чтобы вы имели гарантию начать снова определение ACL своего принтера. И, как и всегда, вы можете управлять своим ACL при помощи графического интерфейса, если вам это потребуется!

Подготовка

Запускайте этот рецепт в ВМ сервера печати PSRV после того как вы установили и настроили свой принтер SalesPrinter1. Этот рецепт пользуется принтером SalesPrinter1 и создаёт в AD две новые группы, Sales SalesAdmin.

Как это сделать...

  1. Настройка AD для данного рецепта

    
    $SB = {
     # 1.1 Creating Sales OU
     $OUHT = @{
       Name = 'Sales'
       Path = 'DC=Reskit,DC=Org'
     }
     New-ADOrganizationalUnit @OUHT
     # 1.2 Creating Sales Group 
     $G1HT = @{
       Name       = 'SalesGroup'
       GroupScope = 'Universal'
       Path       = 'OU=Sales,DC=Reskit,DC=Org'
     }
     New-ADGroup @G1HT
     # 1.3 Creating SalesAdmin Group
      $G2HT = @{
        Name       = 'SalesAdmins'
        GroupScope = 'Universal'
        Path       = 'OU=Sales,DC=Reskit,DC=Org'
      }
      New-ADGroup @G2HT
    } 
    # 1.4 Running Script block on DC1
    Invoke-Command -ComputerName DC1 -ScriptBlock $SB
    		
  2. Создаём объект NTAccount

    
    $GHT1 = @{
        Typename     = 'Security.Principal.NTAccount'
        Argumentlist = 'SalesGroup'
    }
    $SalesGroup = New-Object @GHT1
    $GHT2 = @{
        Typename     = 'Security.Principal.NTAccount'
        Argumentlist = 'SalesAdmins'
    }
    $SalesAdminGroup = New-Object @GHT2
    		
  3. Получение значения SID группы

    
    $SalesGroupSid = 
       $SalesGroup.Translate([Security.Principal.Securityidentifier]).Value
     $SalesAdminGroupSid = 
       $SalesAdminGroup.Translate(
         [Security.Principal.Securityidentifier]).Value
    		
  4. Получение значения SDDL для этого принтера

    
    $SDDL = 'O:BAG:DUD:PAI(A;OICI;FA;;;DA)' +         
            "(A;OICI;0x3D8F8;;;$SalesGroupSid)" + 
            "(A;;LCSWSDRCWDWO;;;$SalesAdminGroupSid)"
    		
  5. Получение объекта принтера группы Sales

    
    $SGPrinter = Get-Printer -Name SalesPrinter1 -Full
    		
  6. Устанавливаем необходимые полномочия

    
    $SGPrinter | Set-Printer -Permission $SDDL
    		
  7. Просматриваем установленные полномочия через графический интерфейс.

    Откройте прикладное приложение Windows Settings (Параметры), кликните по Devices (Устройства), а затем кликните по Printers & scanners (Принтеры и сканеры). Далее кликните по принтеру SalesPrinter1, затем кликните по Manage (Управление). Наконец, кликните по Printer properties (Свойства принтера).

Как это работает...

На Шаге 1 вы создаёте новое Подразделение организации (OU) в своём домене Reskit.Org (Sales), далее создаёте две новые Универсальные группы безопасности (SalesGroup и SalesAdmins)

На Шаге 2 вы создаёте два объекта Security.Principal.NTAccount с необходимыми свойствами для соответствующих групп безопасности. На Шаге 3 вы применяете эти два объекта для выборки SID (Security ID, Идентификаторов безопасности) для каждой из своих групп. На Шаге 4 вы создаёте набор полномочий SDDL (Security Descriptor Description Language, Языка определения описателя безопасности).

На Шаге 5 вы пользуетесь Get-Printer для возврата объекта WMI, который описывает соответствующий принтер. Затем, на Шаге 6 вы применяете Set-Printer для установки необходимого ACL для своего принтера. Эти шесть шагов не вырабатывают никакого консольного вывода.

На Шаге 7 вы рассматриваете полученный ACL при помощи Графического интерфейса Printer (Принтер) Windows. Получаемый вывод выглядит следующим образом:

 

Рисунок 11-15


Просмотр безопасности принтера

Есть кое- что ещё...

В этом рецепте вы создали некий ACL для принтера SalesPrinter1 группы Продаж. Данный рецепт пользуется объектом .NET для получения значений SID двух групп безопасности. Затем вы вручную строите необходимые SDDL и применяете их к своему принтеру.

В отличии от NTFS не существует доступными готовых сторонних инструментов управления ACL принтера для упрощения настроек ACL. Механизмом по умолчанию выступает SDDL, однако это не всегда просто. Для получения неких подробностей относительно SDDL обращайтесь к https://itconnect.uw.edu/wares/msinf/other-help/understanding-sddl-syntax/.

Создание пула принтера

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

Не существует командлетов для позволения вам создавать пул принтера. Кроме того, WMI не предоставляет механизма создания пула принтера. Как и для прочих рецептов этой главы, для развёртывания пула принтера вы применяете printui.dll и rundll32. Данный рецепт это иной пример использования более раннего консольного приложения для достижения вами цели.

Подготовка

Вы применяете этот рецепт в PSRV, в котором вы установили новый принтер, SalesPrinter1.

Как это сделать...

  1. Добавляем порт для принтера

    
    $P = 'SalesPP2'       # new printer port name
    Add-PrinterPort -Name $P -PrinterHostAddress 10.10.10.62
    		
  2. Создаём пул для принтера SalesPrinter1

    
    $Printer = 'SalesPrinter1'
    $P1      = 'SalesPP'   # First printer port
    $P2      = 'SalesPP2'  # Second printer port
    rundll32.exe printui.dll,PrintUIEntry /Xs /n $Printer Portname "$P1,$P2"
    		
  3. Просматриваем созданный пул принтера

    
    Get-Printer $Printer | 
       Format-Table -Property Name, Type, DriverName, PortName
    		

Как это работает...

На Шаге 1 вы добавляете новый порт принтера, SalesPP2. На Шаге 2 вы создаёте новый пул принтера при помощи printui.dll и установки двух портов принтера. А на конечном Шаге 3 вы просматриваете вывод для того чтобы убедиться что вы настроили пул принтера из двух устройств печати/ портов. Вывод заключительного шага выглядит примерно так:

 

Рисунок 11-16


Просматриваем пул принтера

Есть кое- что ещё...

На Шаге 3 чтобы убедиться что вы настроили пул принтера для выборки подробностей относительно принтера вы пользуетесь командой Get-Printer. Также вы можете просмотреть этот пул используя графический интерфейс Принтера, что выглядит следующим образом:

 

Рисунок 11-17


Просматриваем пул принтера через графический интерфейс