जीपीओ / जीपीपी के माध्यम से प्रिंटर की तैनाती - क्या कोई प्रोग्राम विकल्प है?


10

मेरे नियंत्रण से परे कारणों के लिए, हमें अपने 1000+ ग्राहकों को हमारे 100+ प्रिंटर को तैनात करने के लिए GPO / GPPs स्थापित करने का काम सौंपा गया है।

अच्छी खबर यह है कि हमारे पास एक दर्जन से अधिक साइटें हैं, और अधिकांश भाग के लिए, मुझे साइट एक्स पर सभी प्रिंटरों को साइट एक्स पर सभी क्लाइंट पीसी पर धकेलने की अनुमति है।

बुरी खबर यह है कि दो तरीके मुझे पता है कि यह कैसे करना है ( "समूह नीति के साथ काम करें ...", प्रिंट सर्वर से " और जीपीपी / समूह नीति प्राथमिकताएं ) का उपयोग करने की तुलना में मैं बहुत अधिक मैनुअल काम करता हूं। यह कई प्रिंटर हैं। मैं एक प्रिंट सर्वर पर सभी प्रिंटर का चयन करने और Deploy with Group Policy...विकल्प का उपयोग करने के लिए भी प्रतीत नहीं कर सकता हूं , उदाहरण के लिए - यह मुझे उम्मीद है कि एक-एक करके ऐसा होगा, जो होने वाला नहीं है। जीपीपी और भी बदतर हैं। , क्योंकि यह मुझसे प्रिंट सर्वर से एक प्रिंटर पथ का चयन करने की अपेक्षा करता है और फिर मैन्युअल रूप से सूचना के एक गुच्छा (जैसे प्रिंटर आईपी) में पंच करता है कि यह प्रिंटर कनेक्शन से प्राप्त करने में सक्षम होना चाहिए।

मेरा Google-Fu एक GPO / GPP के लिए एक प्रिंट सर्वर पर सभी प्रिंटर जोड़ने के लिए एक स्क्रिप्ट के लिए खाली आया, और मैं एक अर्ध-स्वचालित फैशन में भी ऐसा करने का दूसरा तरीका नहीं देख सकता, लेकिन मैं चिपका रहा हूं इस विश्वास के साथ कि मुझे कुछ याद आ रहा है, क्योंकि कोई रास्ता नहीं है जो किसी भी समझदार व्यक्ति को मैन्युअल रूप से GPOs में सैकड़ों प्रिंटर जोड़ने के लिए चुना जाएगा।

आदर्श रूप से, मैं GPPs का उपयोग करने के लिए एक प्रोग्रामेटिक तरीका खोजना चाहता हूं, लेकिन परिस्थितियों में, कोई भी समाधान जिसमें दर्जनों घंटे मैन्युअल रूप से शामिल नहीं होते हैं प्रिंटर जोड़ना सिर्फ महान होगा।

क्या किसी के पास ऐसा करने का कोई तरीका है, या क्या मुझे ऐसा करने के लिए एक PowerShell स्क्रिप्ट और / या एक अधीनस्थ को ट्रिक करने की आवश्यकता है?


1
जैसा कि मैंने आपको पहले चैट में बताया था, GPOs को प्रोग्राम बनाने और लिंक करने के लिए एक COM इंटरफ़ेस है ... सभी कुछ इस तरह से शुरू होते हैं $GPM = New-Object -ComObject GPMgmt.Gpm। मुझे लगता है कि इंटरफ़ेस, साथ काम करने के लिए एक निरपेक्ष सुअर होने के नाते, आपको कुछ XML को हैक करने की तुलना में थोड़ी अधिक सहायक विधि प्रदान कर सकता है जो वास्तविक GPO की तरह दिखने और महक से बाहर आता है। हालांकि COM को कोई पसंद नहीं करता है। सब से कम हम Powershellers।
रयान रीज

1
@RyanRies हां, मैं अभी भी इसे अपने दिमाग में एक दौर मार रहा हूं, और जिन चीजों पर मैंने फैसला नहीं किया है, उनमें से एक है कि क्या मेरी संख्या को समर्थन करने की आवश्यकता है या नहीं, या इसे स्थापित करने के लिए सिर्फ एक समय की बात है पहले स्थान पर। मुझे यकीन है कि मैं इसे यहाँ पोस्ट करूँगा, जो भी मैं कर रहा हूँ।
होपलेसएनबीबी

जब आप कहते हैं कि आपको 100 प्रिंटर तैनात करने की आवश्यकता है, तो आपका मतलब सभी कंप्यूटर (1..1000) में सभी 100 प्रिंटर नहीं होने चाहिए, है ना?
आदिल हिंदिस्तान

1
@ AdilHindistan No. प्रत्येक कंप्यूटर को अपनी साइट पर उपलब्ध सभी प्रिंटर मिलने चाहिए। (कम या ज्यादा।) लेकिन उन्हें अलग करना कठिन हिस्सा नहीं है। यह पहली बार में GPO में प्रिंटर प्राप्त कर रहा है, जो आपको लगता है कि यह होना चाहिए की तुलना में एक दर्द से अधिक हो रहा है।
होपलेसनब बी

जवाबों:


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 एड्रेस को खींचने के आधार पर निकटतम सर्वर को चुनता था। यदि 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>

यह एक अच्छा जवाब है (और मैं कुछ समयसीमा को पूरा करने के लिए इस तरह का उपयोग कर सकता हूं), लेकिन मुझे संदेह है कि इस प्रश्न के भविष्य में एक प्रशिक्षु या अधीनस्थ वास्तव में है, क्योंकि हमें असाइन करने के लिए जीपीओ / जीपीपी का उपयोग करने की आवश्यकता है कुछ बिंदु पर प्रिंटर। और जबकि एक पीएस लॉगऑन स्क्रिप्ट तकनीकी रूप से उस आवश्यकता को फिट करेगी, मुझे उम्मीद है कि प्रबंधन मुझ पर इतना विलीन हो जाएगा कि इसे इस तरह से करने के लिए मेरे लायक नहीं होगा।
होपलेसनब बी

अफसोस। :( जीपीओ PowerShell cmdlets बैकअप लेने के लिए, बहाल, खाली वस्तुओं को बनाने के ... लेकिन नहीं GPOs में जोड़ने के लग रहे हैं एक्सएमएल वस्तुओं है कि प्रिंटर नीतियों देखने की है। पूरी तरह से GUID के अलावा hackable।
कैथरीन Villyard

1
हाँ, बिना 3 पार्टी टूल्स के, GPO / GPP ऑटोमेशन विथ पॉवरशेल बहुत दर्दनाक है। मुझे कुछ ऐसा मिला जो बहुत अच्छा लग रहा है , इस तथ्य के लिए बचाएं कि उसे एक 3 पार्टी सॉफ्टवेयर सूट की आवश्यकता है जिसे हम शायद खरीदने की अनुमति नहीं देंगे ... इसलिए यह संभवतः आपकी साइट जैसी XML को मौजूदा साइट-विशिष्ट में संपादित करने के लिए कुछ स्क्रिप्ट होगी GPOs ... जो मैं कल्पना करता हूं कि मैं एक बार यहां काम करूंगा।
होपलेस एनबीबी

8

समूह नीति का पॉवर्सशेल प्रबंधन मेरी राय में w / o थर्ड-पार्टी (कमर्शियल) उत्पादों को बेकार करता है

मुझे लगता है कि आप समूह नीति ऑब्जेक्ट्स में XML (या HTML में यदि आप चाहें तो ) के माध्यम से स्लिंगिंग कर रहे हैं, तो वह करें जो आप देख रहे हैं।

सौभाग्य से XML उस भयानक नहीं लगती है । प्रति-प्रिंटर UID मान (जो मेरा मानना ​​है कि @KatherineVillyard उसकी टिप्पणी में उल्लेख कर रहा है) XML में संदर्भित प्रत्येक प्रिंटर के लिए उत्पन्न एक यादृच्छिक GUID है।

यहाँ कुछ नमूना पॉवर्सशेल कोड है, बेशर्मी से कैथरीन कोड के बाद बनाया गया है:

@"
<?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>
"@

(मैं वास्तव में लिखता हूं, वास्तव में बदसूरत पॉवर्सशेल कोड।)

मैंने वास्तव में इस XML को GPP CSE पार्स करने की कोशिश नहीं की है। XML कम से कम सत्यापित करता है।

मैं Get-GPOSYSVOL में GPO के लिए फाइलसिस्टम पथ पर जाने के लिए GUID का उपयोग करने और पार्स करने के लिए कुछ राक्षसी लेखन के बारे में सोचना शुरू कर रहा हूं , लेकिन यह देखते हुए कि मुझे आज शाम को कुछ वास्तविक कार्य करने की आवश्यकता है, मुझे लगता है कि मैं छोड़ने जा रहा हूं। पाठक के लिए एक अभ्यास के रूप में। > मुस्कान <हालांकि यह अत्यधिक व्यवहार्य होना चाहिए।


यदि यह एक यादृच्छिक GUID है, तो यह निश्चित रूप से हैक करने योग्य है। मैंने अभी-अभी मेरा अपडेट किया है। हे।
कैथरीन विलिअर्ड

XML को एक समूह नीति बैकअप में संशोधित करना निश्चित रूप से काम करेगा, लेकिन SYSVOL में इसे "लाइव" बदलना भी संभव होना चाहिए (बशर्ते कि कोई बहादुर हो, मूर्ख हो या, मेरी तरह, दोनों)। चूंकि मुझे इस शाम को करने के लिए वास्तविक काम है (और जब से मैं इस तिमाही के लिए पुन: रैंकिंग के लिए @ewwhite पर वापस आ गया हूं) मुझे लगता है कि मैं उस विशेष बंदूक को लोड करने और किसी और के लिए उनके चरणों में इंगित करने से बचाऊंगा। > गिगल <
इवान एंडरसन

मैं बहादुर हूं, लेकिन मैं वह बहादुर नहीं हूं। ;) फ़ाइल जनरेट करें, टेस्ट
इंवायरनमेंट में इम्पोर्ट करें

2
Powershell को वास्तव में अधिक GPO विकल्पों की आवश्यकता है। गेट-लिंक, सेट-लिंक, न्यू-जीपीओ और सेट-जीपीओग्रिज़ी वास्तव में बहुत अच्छे नहीं हैं ...
मार्क हेंडरसन

अंतर्निहित PowerShell आदेश कभी-कभी पर्याप्त नहीं होते हैं। उस स्थिति में, मैं 'GPO गाय के समाधान' को देखने का सुझाव दूंगा। उनकी एक कंपनी है: sdmsoftware.com
आदिल हिंदिस्तान

0

मैंने हाल ही में इसी तरह की एक परियोजना शुरू की थी और अच्छे ओल 'जीपीओ पुश विधि बनाम नए जीपीपी बनाम स्क्रिप्टिंग में देखने के बाद, मैंने पूरी चीज की स्क्रिप्टिंग के लिए चुना। मुझे पता नहीं है कि आपके लिए सबसे अच्छा काम क्या होगा लेकिन यहां आपके लिए कुछ संकेत हैं:

  • प्रिंट सर्वर से कनेक्ट करने और प्रिंट सर्वर से प्रिंटर की जानकारी प्राप्त करने के लिए एक नए ओएस (विंडोज 8/2012 +) के साथ एक ग्राहक का आदर्श रूप से उपयोग करें:

    Get-Printer -computer PrintServerName

  • कंप्यूटर पर प्रिंट कतारों को मैप करने के लिए AD सुरक्षा समूहों का उपयोग करें। तो मान लें कि आपके पास एक प्रिंट कतार है (आप ऊपर दिए गए आदेश से) \ PrintServer1 \ MyColorPrinter123 नाम से, प्रिंटर की तरह एक सुरक्षा समूह बनाएँ। Proup.rintServer1.MyColorPrinter123, और उस समूह में कंप्यूटर जोड़ें

  • स्टार्टअप स्क्रिप्ट में, कंप्यूटर की समूह सदस्यता की जांच करने के लिए एक फ़ंक्शन होता है जब यह आ रहा है, और देखें कि क्या यह किसी प्रिंटर समूह का हिस्सा है। यदि ऐसा है, तो प्रिंटर को इस तरह से मैप करने के लिए अंतर्निहित printui.exe (या printui.dll) कमांड का उपयोग करें

    आह्वान-अभिव्यक्ति 'rundll32 Printui.dll, PrintUIEntry / ga / n "\ PrintServer1 \ MyColorPrinter123" / q'

  • एक बार कंप्यूटर चालू हो जाने के बाद, वह प्रिंट स्पूलर सेवा 'प्रिंट कनेक्शन' को धक्का देगी, जो कि GPOs किसी भी उपयोगकर्ता को लॉगिन करने के लिए करता था।

आप बहुत अधिक विस्तृत ** पर जा सकते हैं, लेकिन उच्च स्तर पर यही है।

** मैंने एक GUI बनाया जो उपयोगकर्ताओं (Techs) को किसी भी Print Server को चुनने की अनुमति देता है, और यह उन्हें उस सर्वर पर प्रिंटर की सूची देता है। यदि वे एक को चुनते हैं, तो वे इसके सभी गुणों को देख सकते हैं। यह जानकारी गेट-प्रिंटर से आती है जिसका मैंने ऊपर उल्लेख किया है। यदि आप उस डेटा को सीएसवी के रूप में निर्यात करते हैं, तो आप सूचना प्रदर्शित करने के लिए इसका फिर से उपयोग कर सकते हैं।

** Tech उस कंप्यूटर को प्रिंटर से जोड़ने के लिए एक अनुरोध भेजने के लिए उस GUI का उपयोग करते हैं जिसे कनेक्ट करना है। यह एक 'अनुरोध' है, b / c उनके पास AD में अनुमति नहीं है।

** एक साधारण बैकएंड स्क्रिप्ट फ़ोल्डर को देखता है और कंप्यूटर को ऊपर उल्लेखित प्रिंटर समूह में जोड़ता है। तो, यदि आप पहले से ही जानते हैं कि किस प्रिंटर को प्राप्त करना चाहिए, तो आप इसे आसानी से कर सकते हैं। कंप्यूटर को समूहों में जोड़ना AD Cmdlets के साथ एक सरल काम है।

** आप प्रिंट सर्वर की जांच करने के लिए नौकरी भी शेड्यूल कर सकते हैं, यह देखने के लिए कि क्या कोई नई प्रिंट कतारें हैं, और उनकी तुलना आप AD समूहों से करें।

इसलिए, 'प्रबंधित' समाधान बनाना थोड़ा सा शामिल है, लेकिन मूल बातों से शुरू करना आसान है और बहुत लचीला, आसान उपयोग प्रणाली को जोड़ना जारी रखता है जिसमें GPO शामिल नहीं है ... बस थोड़ा सा PowerShell

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.