Развертывание Принтеров через GPO/GPP - является там программной опцией?

Обычно не проблема вообще. Вам все еще будет нужен менеджер по подсети, работающий на одном из них (как OSM от стека OFED).

10
задан 17 February 2014 в 18:46
3 ответа

Я довольно усердно гуглил и даже играл с backup-GPO в надежде взломать получившийся XML-файл и повторно импортировать его, но я подозреваю, что сценарий PowerShell в вашем будущем.

Это не так уж плохо. Вы можете сгенерировать список принтеров с ближайшего сервера, а затем просмотреть его и сопоставить.

Примерно так:

$net = New-Object -COMObject WScript.Network
$printserver = 'yourserver'

$printerlist = Get-WMIObject -class Win32_Printer -computer $printserver | Where-Object {$_.ShareName -ne $null} | Select-Object ShareName
foreach ($printer in $printerlist) 
{
    $printerpath = '\\' + $printserver + '\' + $printer.ShareName
    #echo $printerpath
    $net.AddWindowsPrinterConnection($printerpath)
}

Если принтеры названы логически, и есть какой-то логический способ идентифицировать машины, вы могли бы его уточнить. Я выбирал ближайший сервер, например, на основе IP-адреса клиента. Если IP-адрес вроде 10.20. *, Перейдите на server1. И т.д.

Надеюсь, что это поможет.

Изменить:

Глядя на документацию @EvanAnderson, я почти уверен, что XML можно взломать.

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

<DSObject bkp:Path="CN={GUIDHERE},CN=PushedPrinterConnections,%GPO_MACH_DSPATH%" bkp:SourceExpandedPath="CN={13B9B596-452C-4652-A05D-78EF06610134},CN=PushedPrinterConnections,CN=Machine,CN={44A99FBA-0DB3-484C-808E-3DDAE9932A2B},CN=Policies,CN=System,DC=Domainname,DC=extension" bkp:ObjectClass="msPrint-ConnectionPolicy">
    <DSAttributeMultiString bkp:DSAttrName="showInAdvancedViewOnly">
        <DSValue><![CDATA[TRUE]]></DSValue>
    </DSAttributeMultiString>
    <DSAttributeMultiString bkp:DSAttrName="uNCName">
        <DSValue><![CDATA[\\Servername\PrinterShareName]]></DSValue>
    </DSAttributeMultiString>
    <DSAttributeMultiString bkp:DSAttrName="serverName">
        <DSValue><![CDATA[\\Servername]]></DSValue></DSAttributeMultiString>
    <DSAttributeMultiString bkp:DSAttrName="printAttributes">
        <DSValue><![CDATA[0]]></DSValue>
    </DSAttributeMultiString>
    <DSAttributeMultiString bkp:DSAttrName="printerName">
        <DSValue><![CDATA[PrinterShareName]]></DSValue>
    </DSAttributeMultiString>
</DSObject>
7
ответ дан 2 December 2019 в 22:06

Управление групповой политикой Powershell отстой без сторонних (коммерческих) продуктов, по моему мнению.

Я думаю, вы застряли в слинге через XML (или в HTML, если вы предпочитаете ) в объектах групповой политики, чтобы делать то, что вы ищете.

К счастью, XML не выглядит таким устрашающим . Значение UID для каждого принтера (которое, как мне кажется, имеет в виду @KatherineVillyard в своем комментарии) - это просто случайный GUID, сгенерированный для каждого принтера, указанного в XML.

Вот пример кода Powershell, бесстыдно смоделированного по образцу кода Кэтрин:

@"
<?xml version="1.0" encoding="utf-8"?>
<Printers clsid="{1F577D12-3D1B-471e-A1B7-060317597B9C}" disabled="0">
"@

$net = New-Object -COMObject WScript.Network
$printserver = 'print-server'

$printerlist = Get-WMIObject -class Win32_Printer -computer $printserver | Where-Object {$_.ShareName -ne $null} | Select-Object ShareName
foreach ($printer in $printerlist) 
{
    $date = Get-Date
    echo '  <SharedPrinter clsid="{9A5E9697-9095-436d-A0EE-4D128FDFBCE5}"'
    '    name="' + $printer.ShareName + '"' | echo
    '    status="' + $printer.ShareName + '"' | echo
    echo '    image="2"'
    '    changed="' + $date + '"' | echo
    $ng = [GUID]::NewGuid().ToString('B')
    '    uid="' + $ng + '">' | echo

    echo '    <Properties'
    echo '      action="R"'
    echo '      comment=""'
    '      path="\\' + $printserver + '\' + $printer.ShareName + '"' | echo
    echo '      location=""'
    echo '      default="1"' 
    echo '      skipLocal="1"'
    echo '      deleteAll="0"'
    echo '      persistent="0"'
    echo '      deleteMaps="0"'
    echo '      port=""/>'
    echo '  </SharedPrinter>'
}

@"
</Printers>
"@

(Я пишу действительно, очень уродливый код Powershell.)

На самом деле я не пытался заставить GPP CSE анализировать этот XML. По крайней мере, XML действительно проверяет.

Я ' Я начинаю думать о том, чтобы написать какое-нибудь чудовище с использованием Get-GPO и разобрать GUID, чтобы добраться до пути файловой системы для объекта групповой политики в SYSVOL, но, учитывая, что мне нужно поработать сегодня вечером, я думаю, что оставлю это в качестве упражнения для читателя. > smile <Хотя это должно быть вполне осуществимо.

8
ответ дан 2 December 2019 в 22:06

Недавно я предпринял аналогичный проект и, изучив старый добрый метод проталкивания GPO по сравнению с новым GPP и скриптингом, я выбрал для написания всего этого скрипта. Я понятия не имею, что подойдет вам лучше всего, но вот пара указателей:

  • В идеале используйте клиент с новой ОС (Windows 8/2012 +) для подключения к серверам печати и получения информации о принтере с серверов печати. :

    Get-Printer -computer PrintServerName

  • Используйте группы безопасности AD для сопоставления очередей печати компьютерам. Предположим, у вас есть очередь печати (вы собрали из приведенной выше команды) с именем \ PrintServer1 \ MyColorPrinter123, создайте группу безопасности, например, printer.group.PrintServer1.MyColorPrinter123, и добавьте компьютеры в эту группу

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

    Invoke-Expression 'rundll32 printui.dll, PrintUIEntry / ga / n "\ PrintServer1 \ MyColorPrinter123" / q '

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

Вы можете перейти к более подробному ** но на высоком уровне это то, что нужно.

** Я создал графический интерфейс, который позволяет пользователям (на самом деле техническим специалистам) выбирать любой сервер печати, и он дает им список принтеров на этом сервере. Если они выберут что-то одно, то увидят все его свойства. Эта информация поступает от Get-Printer, о котором я упоминал выше. Если вы экспортируете эти данные в формате CSV, вы можете повторно использовать их для отображения информации.

** Специалисты используют этот графический интерфейс для отправки запроса на добавление компьютера к принтерам, к которым он должен подключаться. Это «запрос», т.к. у них нет разрешений в AD.

** Простой внутренний скрипт наблюдает за папкой и добавляет компьютер в группу принтеров, о которой я упоминал выше. Итак, если вы уже знаете, кому и какой принтер следует достать, отлично, вы можете легко это сделать. Добавление компьютеров в группы - простое задание с помощью командлетов AD.

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

Итак, создание «управляемого» решения - это немного сложно, но легко начать с основ и продолжать добавлять, чтобы получить очень гибкую, простую в использовании систему, которая не включает объекты групповой политики ... немного PowerShell

** Простой внутренний скрипт наблюдает за папкой и добавляет компьютер в группу принтеров, о которой я упоминал выше. Итак, если вы уже знаете, кому и какой принтер следует достать, отлично, вы можете легко это сделать. Добавление компьютеров в группы - простое задание с помощью командлетов AD.

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

Итак, создание «управляемого» решения - это немного сложная задача, но легко начать с основ и продолжать добавлять, чтобы получить очень гибкую и простую в использовании систему, которая не включает объекты групповой политики ... немного PowerShell

** Простой внутренний скрипт наблюдает за папкой и добавляет компьютер в группу принтеров, о которой я упоминал выше. Итак, если вы уже знаете, кому и какой принтер следует достать, отлично, вы можете легко это сделать. Добавление компьютеров в группы - простое задание с помощью командлетов AD.

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

Итак, создание «управляемого» решения - это немного сложная задача, но легко начать с основ и продолжать добавлять, чтобы получить очень гибкую и простую в использовании систему, которая не включает объекты групповой политики ... немного PowerShell

Добавление компьютеров в группы - простое задание с помощью командлетов AD.

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

Итак, создание «управляемого» решения - это немного сложная задача, но легко начать с основ и продолжать добавлять, чтобы получить очень гибкую и простую в использовании систему, которая не включает объекты групповой политики ... немного PowerShell

Добавление компьютеров в группы - простое задание с помощью командлетов AD.

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

Итак, создание «управляемого» решения - это немного сложная задача, но легко начать с основ и продолжать добавлять, чтобы получить очень гибкую и простую в использовании систему, которая не включает объекты групповой политики ... немного PowerShell

0
ответ дан 2 December 2019 в 22:06

Теги

Похожие вопросы