GPO / GPP를 통한 프린터 배포-프로그래밍 옵션이 있습니까?


10

내가 통제 할 수없는 이유로 100 대 이상의 프린터를 1000 대 이상의 클라이언트에 배포하기 위해 GPO / GPP를 설정해야했습니다.

좋은 소식은 우리가 12 개가 넘는 사이트를 보유하고 있다는 것입니다. 대부분 X 사이트의 모든 프린터를 X 사이트의 모든 클라이언트 PC로 푸시 할 수 있습니다.

나쁜 소식은 내가하는 두 가지 방법 ( "인쇄 서버에서 그룹 정책으로 배포 ..."GPP / 그룹 정책 기본 설정 사용 )이 내가 원하는 것보다 훨씬 더 많은 수작업을 필요로한다는 것입니다. 인쇄 서버에서 모든 프린터를 선택하고 Deploy with Group Policy...옵션을 사용할 수없는 것처럼 보일 수도 있습니다. 예를 들어, 한 번에 하나씩 수행 할 것으로 예상됩니다. 인쇄 서버에서 프린터 경로를 선택한 다음 프린터 연결에서 얻을 수있는 많은 정보 (예 : 프린터 IP)를 수동으로 입력해야합니다.

인쇄 서버의 모든 프린터를 GPO / GPP에 추가하는 스크립트에 대한 Google-Fu가 비어있었습니다. 반자동 방식 으로도이 작업을 수행하는 다른 방법을 볼 수없는 것 같습니다. 제게 어떤 사람이 GPO에 수백 대의 프린터를 수동으로 추가 할 방법이 없기 때문에 제가 뭔가 빠졌다고 생각합니다.

이상적으로는 GPP를 사용하는 프로그래밍 방식을 찾고 싶지만 상황에 따라 수동으로 프린터를 수동으로 추가하는 데 수십 시간이 걸리지 않는 솔루션은 훌륭 할 것입니다.

누구 든지이 작업을 수행 할 수 있습니까? 아니면 PowerShell 스크립트를 작성하거나 하위 직원을 속여서이 작업을 수행해야합니까?


1
오늘 채팅에서 언급했듯이 프로그래밍 방식으로 GPO를 만들고 연결하기위한 COM 인터페이스가 $GPM = New-Object -ComObject GPMgmt.Gpm있습니다. 인터페이스는 절대적으로 작동하는 돼지이지만 실제 GPO처럼 보이고 냄새가 나는 일부 XML을 해킹하는 것보다 약간 더 지원 가능한 방법을 제공 할 수 있다고 생각합니다. COM을 좋아하는 사람은 없습니다. 우리의 Powershellers 중 가장 적습니다.
Ryan Ries

1
@RyanRies 그래, 나는 아직도 내 마음에 그것을 걷어차 고 있고, 내가 결정하지 않은 것 중 하나는 내 스크립이 지원 가능 해야하는지 아닌지, 또는 그것을 한 번만 설정하는 것입니다. 처음. 내가하는 일이 무엇이든 여기에 게시 할 것입니다.
HopelessN00b

100 대의 프린터를 배포해야한다고해서 모든 컴퓨터 (1..1000)에 100 대의 프린터가 모두 있어야한다는 것은 아닙니다.
Adil Hindistan

1
@AdilHindistan 아니요. 각 컴퓨터는 현장에서 사용 가능한 모든 프린터를 가져와야합니다. (더 많거나 적음) 그러나 분리하는 것은 어려운 일이 아닙니다. 처음에는 프린터를 GPO로 가져와야 생각했던 것보다 더 많은 고통을 겪고 있습니다.
HopelessN00b

답변:


7

필자 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 주소를 가져 와서 가장 가까운 서버를 선택했습니다. 10.20. *와 같은 IP 주소 인 경우 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>

좋은 답변입니다 (그리고 마감일 중 일부를 충족시키기 위해 이와 같은 것을 사용할 수는 있지만) 실제로 인턴 또는 하위 직원 이이 질문의 미래에 있다고 생각합니다. 실제로 GPO / GPP를 사용하여 할당해야하기 때문에 어느 시점에서 프린터. 그리고 PS 로그온 스크립트는 기술적으로 해당 요구 사항에 적합하지만 경영진은 그렇게하는 데 시간이 걸리지 않을만큼 충분히 나아갈 것으로 기대합니다.
HopelessN00b

아아. . :( GPO가 cmdlet에이 GPO를 추가, 백업, 복원, 빈 객체를 생성 ...하지만 것 같다 프린터 정책을 살펴 가지고있는 XML 객체 PowerShell을 완전히 . GUID를 제외하고 해킹이 불가능한
캐서린 Villyard

1
예, 타사 도구가 없으면 PowerShell을 통한 GPO / GPP 자동화는 상당히 고통 스럽습니다. 나는 꽤 좋은 것처럼 보였고 , 우리가 구입할 수없는 타사 소프트웨어 제품군이 필요하다는 사실을 제외하고는 저장했다. 그래서 아마도 기존 사이트 특정에서 XML을 편집하는 것과 같은 스크립트 일 것이다. GPO ... 완료되면 여기에 게시 할 것 같습니다.
HopelessN00b

8

그룹 정책의 파워 쉘 관리는 짜증 내 의견으로는, 타사 (상업) 제품 O / 승.

나는 당신에게있는 거 붙어 생각 은 XML을 짓고을 (또는 당신이 원하는 경우 HTML을 그룹 정책 당신이 찾고있는 무엇을 할 개체에).

다행히도 XML은 끔찍한 것처럼 보이지 않습니다 . 프린터 당 UID 값 (@KatherineVillyard가 자신의 의견에서 언급하는 것으로 생각합니다)은 XML에서 참조되는 각 프린터에 대해 생성 된 임의의 GUID입니다.

다음은 캐서린 코드를 뻔뻔스럽게 모델링 한 샘플 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-GPOSYSVOL에서 GPO의 파일 시스템 경로에 도달하기 위해 GUID를 사용 하고 구문 분석하는 몇 가지 괴물에 대해 생각하기 시작 했지만 오늘 저녁에 실제 작업을 수행해야 할 경우 떠날 것이라고 생각합니다. 독자의 연습으로 > smile <그래도 타당해야합니다.


임의의 GUID라면 해킹이 가능합니다. 방금 업데이트했습니다. 허.
Katherine Villyard

그룹 정책 백업에서 XML을 수정하면 확실히 작동하지만 SYSVOL에서 "실시간"으로 변경하는 것도 가능해야합니다 (용감하거나 어리 석거나 나 같은 경우). 오늘 저녁에 실제로 할 일이 있기 때문에 (그리고 이번 분기에 렙 랭킹에서 @ewwhite를 다시 방문했기 때문에) 나는 특정 총을로드하고 다른 사람을 위해 그들의 발을 가리키는 것을 절약 할 것이라고 생각합니다. > giggle <
Evan Anderson

나는 용감하지만 나는 용감하지 않습니다. ;) 파일 생성, 테스트 환경 등으로 파일 가져 오기
Katherine Villyard

2
Powershell에는 실제로 더 많은 GPO 옵션이 필요합니다. 가져 오기 링크를 설정 링크, 새로운-GPO 및 Set-GPORegistry이 ... 정말 좋은 충분하지 않습니다
마크 헨더슨

기본 제공 PowerShell 명령으로는 충분하지 않을 수 있습니다. 이 경우 'GPO Guy 's 솔루션을 살펴보십시오. 그는 회사를 가지고있다 : sdmsoftware.com
Adil

0

나는 최근 비슷한 프로젝트를 수행했으며 좋은 GPO 푸시 방법 대 새로운 GPP 대 스크립팅을 살펴본 후 모든 것을 스크립팅하기로 결정했습니다. 나는 당신에게 가장 적합한 것이 무엇인지 모르겠지만 여기에 당신을위한 몇 가지 포인터가 있습니다.

  • 새로운 OS (Windows 8 / 2012 +)가있는 클라이언트를 사용하여 인쇄 서버에 연결하고 인쇄 서버에서 프린터 정보를 얻는 것이 이상적입니다.

    Get-Printer-컴퓨터 PrintServerName

  • AD 보안 그룹을 사용하여 인쇄 대기열을 컴퓨터에 매핑합니다. 이름이 \ PrintServer1 \ MyColorPrinter123 인 인쇄 대기열 (위 명령에서 수집 한)이 있고 printer.group.PrintServer1.MyColorPrinter123과 같은 보안 그룹을 생성하고 해당 그룹에 컴퓨터를 추가한다고 가정하겠습니다.

  • 시작 스크립트에서 컴퓨터가 올 때 컴퓨터의 그룹 구성원을 확인하고 프린터 그룹의 일부인지 확인하는 기능이 있습니다. 이 경우 기본 제공 printui.exe (또는 printui.dll) 명령을 사용하여 프린터를 다음과 같이 매핑하십시오.

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

  • 컴퓨터가 가동되면 해당 인쇄 스풀러 서비스는 GPO가 사용했던 '인쇄 연결'을 로그인하려는 모든 사용자에게 푸시합니다.

훨씬 더 자세하게 설명 할 수 있지만 그 수준이 높습니다.

** 사용자 (기술자)가 인쇄 서버를 선택할 수있는 GUI를 만들었으며 해당 서버의 프린터 목록을 제공합니다. 하나를 선택하면 해당 속성을 모두 볼 수 있습니다. 이 정보는 위에서 언급 한 Get-Printer에서 제공됩니다. 해당 데이터를 csv로 내 보내면 해당 정보를 재사용하여 정보를 표시 할 수 있습니다.

** 기술 담당자는 해당 GUI를 사용하여 컴퓨터를 프린터에 연결하라는 요청을 보냅니다. 이것은 '요청'입니다. b / c 그들은 AD에 권한이 없습니다.

** 간단한 백엔드 스크립트는 폴더를 감시하고 위에서 언급 한 프린터 그룹에 컴퓨터를 추가합니다. 따라서 누가 어떤 프린터를 받아야하는지 이미 알고 있다면 쉽게 할 수 있습니다. AD Cmdlet을 사용하면 컴퓨터를 그룹에 추가하는 것이 간단합니다.

** 인쇄 서버를 확인하여 새 인쇄 대기열이 있는지 확인하고 AD 그룹과 비교하는 작업을 예약 할 수도 있습니다.

따라서 '관리 형'솔루션을 만드는 것은 다소 복잡하지만 기본 사항으로 시작하고 GPO가 포함되지 않은 매우 유연하고 사용하기 쉬운 시스템을 유지하기 위해 계속 추가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.