การปรับใช้เครื่องพิมพ์ผ่าน GPO / GPP - มีตัวเลือกแบบโปรแกรมหรือไม่


10

ด้วยเหตุผลที่นอกเหนือการควบคุมของฉันฉันได้รับมอบหมายให้ตั้งค่า GPO / GPP เพื่อปรับใช้เครื่องพิมพ์ 100+ เครื่องของเรากับลูกค้ากว่า 1,000 ราย

ข่าวดีคือเรามีไซต์มากกว่าโหลไซต์และส่วนใหญ่ฉันได้รับอนุญาตให้ส่งเครื่องพิมพ์ทั้งหมดที่ไซต์ X ไปยังพีซีไคลเอ็นต์ทั้งหมดที่ไซต์ X

ข่าวร้ายคือทั้งสองวิธีที่ฉันรู้วิธีการทำ ( "ปรับใช้กับนโยบายกลุ่ม ... " จากเซิร์ฟเวอร์การพิมพ์ "และการใช้การตั้งค่านโยบาย GPP / กลุ่ม ) เกี่ยวข้องกับการทำงานด้วยตนเองมากกว่าที่ฉันเต็มใจ เครื่องพิมพ์จำนวนมากนี้ฉันไม่สามารถเลือกเครื่องพิมพ์ทั้งหมดในเซิร์ฟเวอร์การพิมพ์และใช้Deploy with Group Policy...ตัวเลือกได้ - คาดว่าฉันจะทำทีละตัวซึ่งจะไม่เกิดขึ้น GPPs ยิ่งแย่ลงไปอีก ตามที่คาดหวังให้ฉันเลือกเส้นทางของเครื่องพิมพ์จากเซิร์ฟเวอร์การพิมพ์จากนั้นต่อยเจาะข้อมูลจำนวนมาก (เช่น IP ของเครื่องพิมพ์) ด้วยตนเองว่าควรจะได้รับจากการเชื่อมต่อเครื่องพิมพ์

Google-Fu ของฉันสำหรับสคริปต์เพื่อเพิ่มเครื่องพิมพ์ทั้งหมดบนเซิร์ฟเวอร์การพิมพ์ไปยัง GPO / GPP ว่างเปล่าและฉันไม่สามารถมองเห็นวิธีอื่นในการทำเช่นนี้แม้จะเป็นแบบกึ่งอัตโนมัติ แต่ฉันก็ติดอยู่ ด้วยความเชื่อที่ว่าฉันขาดอะไรไปเพราะไม่มีคนที่มีเหตุผลจะเลือกที่จะเพิ่มเครื่องพิมพ์หลายร้อยเครื่องเข้าใน GPO ด้วยตนเอง

เป็นการดีที่ฉันต้องการค้นหาวิธีการใช้โปรแกรมแบบ GPPs แต่ภายใต้สถานการณ์การแก้ปัญหาใด ๆ ที่ไม่เกี่ยวข้องกับการเพิ่มเครื่องพิมพ์ด้วยตนเองหลายสิบชั่วโมงจะดีมาก

ใครบ้างมีวิธีการทำเช่นนี้หรือฉันจะต้องสร้างสคริปต์ PowerShell และ / หรือหลอกลวงผู้ใต้บังคับบัญชาในการทำเช่นนี้?


1
ที่ผมกล่าวถึงคุณในก่อนหน้านี้แชทวันนี้มีอินเตอร์เฟซ COM สำหรับโปรแกรมสร้างและเชื่อมโยง GPOs ... $GPM = New-Object -ComObject GPMgmt.Gpmทั้งหมดที่เริ่มต้นด้วยสิ่งที่ชอบ ฉันคิดว่าอินเทอร์เฟซในขณะที่เป็นหมูที่สมบูรณ์แบบที่จะทำงานอาจช่วยให้คุณมีวิธีการที่ได้รับการสนับสนุนมากกว่าการแฮ็ค XML บางอย่างที่ออกมาดูและมีกลิ่นเหมือน GPO จริง ไม่มีใครชอบ COM แม้ว่า อย่างน้อยพวกเรา Powershellers
Ryan Ries

1
@ RyanRies ใช่ฉันยังคงเตะมันในใจของฉันและสิ่งหนึ่งที่ฉันยังไม่ได้ตัดสินใจคือใบปลิวของฉันจะต้องได้รับการสนับสนุนหรือไม่หรือเพียงครั้งเดียวสำหรับการตั้งค่าใน ที่แรก. ค่อนข้างแน่ใจว่าฉันจะโพสต์ที่นี่สิ่งที่ฉันท้ายทำ
HopelessN00b

เมื่อคุณบอกว่าคุณต้องปรับใช้เครื่องพิมพ์ 100 เครื่องคุณไม่ได้หมายความว่าคอมพิวเตอร์ทุกเครื่อง (1..1000) ควรมีเครื่องพิมพ์ทั้งหมด 100 เครื่องใช่ไหม
Adil Hindistan

1
@AdilHindistan ไม่คอมพิวเตอร์แต่ละเครื่องควรมีเครื่องพิมพ์ทั้งหมดที่มีอยู่ในเว็บไซต์ (มากกว่าหรือน้อยกว่า) แต่การแยกพวกมันไม่ใช่ส่วนที่ยาก การทำให้เครื่องพิมพ์กลายเป็น GPO ในตอนแรกที่กลายเป็นความเจ็บปวดมากกว่าที่คุณคิดว่าควรจะเป็น
HopelessN00b

คำตอบ:


7

ฉัน googled ค่อนข้างยากและแม้กระทั่งเล่นด้วย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. * ให้ไปที่เซิร์ฟเวอร์ 1 เป็นต้น

ฉันหวังว่าจะช่วย

แก้ไข:

ดูเอกสารของ @ EvanAnderson ฉันค่อนข้างมั่นใจว่า XML นั้นแฮกได้

บิตที่เกี่ยวข้องของไฟล์ที่ส่งออกของฉัน (พร้อมการ Redaction):

<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>

เป็นคำตอบที่ดี (และฉันอาจใช้สิ่งนี้เพื่อพบกับกำหนดเวลาของเรา) แต่ฉันสงสัยว่าผู้ฝึกงานหรือผู้ใต้บังคับบัญชาอยู่ในอนาคตของคำถามนี้จริง ๆ แล้วเนื่องจากเราจำเป็นต้องใช้ GPOs / GPP เพื่อกำหนด เครื่องพิมพ์ในบางจุด และในขณะที่สคริปต์การเข้าสู่ระบบของ PS จะเหมาะสมกับความต้องการทางเทคนิค แต่ฉันคาดหวังว่าฝ่ายบริหารจะทำอย่างดีพอที่จะทำให้มันไม่คุ้มค่ากับการทำแบบนั้น
HopelessN00b

อนิจจา. :( จีพี PowerShell cmdlets ดูเหมือนจะสำรองข้อมูลคืน, สร้างวัตถุว่างเปล่า ... แต่ไม่เพิ่ม GPOs วัตถุ XML ที่มีนโยบายเครื่องพิมพ์ดู. สมบูรณ์ hackable ยกเว้น GUID ได้.
แคทเธอรี Villyard

1
ใช่ถ้าไม่มีเครื่องมือของบุคคลที่สามระบบอัตโนมัติ GPO / GPP ผ่าน PowerShell นั้นค่อนข้างเจ็บปวด ฉันพบบางสิ่งที่ดูค่อนข้างดีประหยัดเพราะมันต้องมีชุดซอฟต์แวร์ของบุคคลที่สามที่เราอาจจะไม่ได้รับอนุญาตให้ซื้อ ... ดังนั้นมันอาจเป็นสคริปต์ที่คุณต้องการแก้ไข XML ในไซต์เฉพาะที่มีอยู่ GPO ... ที่ฉันจินตนาการว่าฉันจะโพสต์ที่นี่เมื่อฉันทำเสร็จแล้ว
HopelessN00b

8

การจัดการ Powershell นโยบายกลุ่มดูด w / o ของบุคคลที่สามผลิตภัณฑ์ (พาณิชย์) ในความคิดของฉัน

ฉันคิดว่าคุณติดอยู่กับ XML (หรือในHTML หากคุณต้องการ ) ใน Group Policy Objects เพื่อทำสิ่งที่คุณต้องการ

โชคดีที่XML ไม่ได้ดูน่ากลัวว่า ค่า UID ต่อเครื่องพิมพ์ (ซึ่งฉันเชื่อว่าเป็นสิ่งที่ @KatherineVillyard อ้างถึงในความคิดเห็นของเธอ) เป็นเพียง GUID สุ่มที่สร้างขึ้นสำหรับเครื่องพิมพ์แต่ละเครื่องที่อ้างอิงใน XML

นี่คือตัวอย่างของ Powershell code ซึ่งจำลองมาจากโค้ดของ Katherine:

@"
<?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 เพื่อไปยังเส้นทางของระบบไฟล์สำหรับ GPO ใน SYSVOL แต่เนื่องจากฉันต้องทำงานจริงบางอย่างในเย็นนี้ฉันคิดว่าฉันจะจากไป นั่นเป็นการออกกำลังกายสำหรับผู้อ่าน > ยิ้ม <มันควรจะเป็นไปได้สูงมาก


ถ้ามันเป็น GUID แบบสุ่มมันแฮ็คได้อย่างแน่นอน ฉันเพิ่งปรับปรุงฉันด้วย หึ
Katherine Villyard

การแก้ไข XML ในการสำรองข้อมูลนโยบายกลุ่มจะทำงานได้อย่างแน่นอน แต่การเปลี่ยนเป็น "สด" ใน SYSVOL ก็ควรจะเป็นไปได้เช่นกัน (หากมีอย่างใดอย่างหนึ่งคือกล้าหาญโง่หรือเช่นฉันทั้งคู่) เนื่องจากฉันมีงานจริงที่จะทำตอนเย็นนี้ (และตั้งแต่ฉันกลับมา @Wwhite สำหรับการจัดอันดับตัวแทนในไตรมาสนี้อีกครั้ง) ฉันคิดว่าฉันจะประหยัดการโหลดปืนนั้นและชี้ไปที่เท้าของพวกเขาเพื่อคนอื่น > giggle <
Evan Anderson

ฉันกล้า แต่ฉันไม่ใช่คนที่กล้าหาญ ;) สร้างไฟล์ทดสอบนำเข้าในสภาพแวดล้อมการทดสอบและอื่น ๆ
Katherine Villyard

2
PowerShell ต้องการตัวเลือก GPO มากขึ้นจริงๆ Get-Link, Set-Link, New-GPO และ Set-GPORegistry ยังไม่ดีพอ ...
Mark Henderson

คำสั่ง PowerShell ในตัวบางครั้งไม่เพียงพอ ในกรณีนี้ฉันอยากจะแนะนำให้ดูที่ 'การแก้ไขปัญหา The GPO Guy เขามี บริษัท : sdmsoftware.com
Adil Hindistan

0

ฉันเพิ่งรับโครงการที่คล้ายกันและหลังจากดูวิธีการผลักดัน GPO ที่ดีเมื่อเทียบกับ GPP รุ่นใหม่เทียบกับการเขียนสคริปต์ฉันเลือกใช้สคริปต์ทั้งหมด ฉันไม่รู้ว่าอะไรจะทำงานได้ดีที่สุดสำหรับคุณ แต่นี่คือตัวชี้สองสามข้อสำหรับคุณ:

  • ใช้ไคลเอนต์ที่มีระบบปฏิบัติการใหม่ (Windows 8/2012 +) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์การพิมพ์และรับข้อมูลเครื่องพิมพ์จากเซิร์ฟเวอร์การพิมพ์:

    รับ - เครื่องพิมพ์ - คอมพิวเตอร์ PrintServerName

  • ใช้กลุ่มความปลอดภัยของ AD เพื่อแมปคิวการพิมพ์กับคอมพิวเตอร์ สมมติว่าคุณมีคิวการพิมพ์ (คุณรวบรวมจากคำสั่งด้านบน) ชื่อ \ PrintServer1 \ MyColorPrinter123 สร้างกลุ่มความปลอดภัยเช่น printer.group.PrintServer1.MyColorPrinter123 และเพิ่มคอมพิวเตอร์ในกลุ่มนั้น

  • ในสคริปต์เริ่มต้นให้มีฟังก์ชั่นเพื่อตรวจสอบความเป็นสมาชิกกลุ่มของคอมพิวเตอร์เมื่อกำลังจะมาถึงและดูว่าเป็นส่วนหนึ่งของกลุ่มเครื่องพิมพ์ใด ๆ หรือไม่ ถ้าเป็นเช่นนั้นให้ใช้คำสั่ง printui.exe (หรือ printui.dll) ในตัวเพื่อจับคู่เครื่องพิมพ์เช่นนี้

    เรียกใช้นิพจน์ 'rundll32 printui.dll, PrintUIEntry / ga / n "\ PrintServer1 \ MyColorPrinter123" / q'

  • เมื่อคอมพิวเตอร์เสร็จสิ้นบริการตัวจัดคิวงานพิมพ์นั้นจะกด 'การเชื่อมต่อการพิมพ์' ซึ่งเป็นสิ่งที่ GPO ใช้ทำเพื่อผู้ใช้ที่กำลังจะเข้าสู่ระบบ

คุณสามารถไปที่รายละเอียดมากขึ้น ** แต่ในระดับสูงนั่นคือสิ่งที่ต้องใช้

** ฉันสร้าง GUI ที่อนุญาตให้ผู้ใช้ (เทคโนโลยีจริง ๆ ) เลือกเซิร์ฟเวอร์การพิมพ์ใด ๆ และให้รายชื่อเครื่องพิมพ์บนเซิร์ฟเวอร์นั้น หากพวกเขาเลือกหนึ่งพวกเขาสามารถดูคุณสมบัติทั้งหมดของมัน ข้อมูลนั้นมาจากเครื่องพิมพ์ที่ฉันได้กล่าวไว้ข้างต้น หากคุณส่งออกข้อมูลนั้นเป็น csv คุณสามารถนำข้อมูลนั้นกลับมาใช้ใหม่เพื่อแสดงข้อมูล ..

** เทคโนโลยีใช้ GUI นั้นเพื่อส่งคำขอเพื่อเพิ่มคอมพิวเตอร์ไปยังเครื่องพิมพ์ที่ควรจะเชื่อมต่อ นี่คือ 'คำขอ' b / c พวกเขาไม่มีสิทธิ์ในการโฆษณา

** สคริปต์แบ็กเอนด์ที่เรียบง่ายดูโฟลเดอร์และเพิ่มคอมพิวเตอร์ไปยังกลุ่มเครื่องพิมพ์ที่ฉันกล่าวถึงข้างต้น ดังนั้นถ้าคุณรู้อยู่แล้วว่าใครควรจะได้รับพรินเตอร์ตัวไหนที่ยอดเยี่ยมคุณก็สามารถทำได้ การเพิ่มคอมพิวเตอร์ในกลุ่มเป็นงานง่าย ๆ ด้วย AD Cmdlets

** คุณสามารถกำหนดเวลางานเพื่อตรวจสอบเซิร์ฟเวอร์การพิมพ์เพื่อดูว่ามีคิวการพิมพ์ใหม่หรือไม่และเปรียบเทียบกับกลุ่มโฆษณาของคุณ

ดังนั้นการสร้างโซลูชัน 'ที่ได้รับการจัดการ' นั้นมีส่วนเกี่ยวข้อง แต่เริ่มต้นด้วยพื้นฐานและง่ายต่อการเพิ่มเพื่อให้มีความยืดหยุ่นมากใช้งานง่ายระบบที่ไม่เกี่ยวข้องกับ GPOs ... เพียงแค่ PowerShell เล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.