Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBS] Logonscript string op basis computernaam uit 2 OU's

Pagina: 1
Acties:

  • magic_nl
  • Registratie: Augustus 2000
  • Laatst online: 28-11 15:50

magic_nl

Met wat magie komt alles goed

Topicstarter
Ik gebruik een logonscript op basis van vbs om printers te koppelen aan computers.
De werking is eenvoudig. De computer is in de AD lid van een groep, vervolgens koppelt het script de printer.
Door enkele wijzigingen in onze AD staan niet alle computers meer in dezelfde OU.
Het script bevat echter de volgende code:
code:
1
strDN = EnvString("COMPUTERNAME") & ",OU=OU1,DC=Domain,DC=local"


Mijn vbs kennis is zeer beperkt. De oplossing die ik zie, maar dat moet anders kunnen, is om de hele sub printers te kopieëren naar een sub printers2. Daar OU1 aanpassen in OU2, en vervolgens zowel de eerste als de tweede sub uit te laten voeren.
Zoals gezegd, 't moet anders kunnen maar ik heb geen idee hoe.

Leef vandaag! Wat gisteren gebeurde is voorbij, en wat morgen komt zien we dan wel weer
Systeemspecificaties


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Ik zou compleet afstappen van dergelijke scripts en hiervoor (mits het OS het toelaat) overstappen op Group Policy Preferences om printers te deployen. Via item-level targeting kun je dan bepalen welke computer(naam) welke printer krijgt.

Veel eenvoudiger te beheren en onderhouden :)

Geef even aan over welk OS we hier praten

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • magic_nl
  • Registratie: Augustus 2000
  • Laatst online: 28-11 15:50

magic_nl

Met wat magie komt alles goed

Topicstarter
Question Mark schreef op maandag 07 november 2011 @ 14:10:
Ik zou compleet afstappen van dergelijke scripts en hiervoor (mits het OS het toelaat) overstappen op Group Policy Preferences om printers te deployen. Via item-level targeting kun je dan bepalen welke computer(naam) welke printer krijgt.

Veel eenvoudiger te beheren en onderhouden :)

Geef even aan over welk OS we hier praten
We praten hier over Windows 7 clients van een Server 2008 R2 netwerk.
Ik heb even gekeken naar de optie 'voorkeuren -> printers' binnen GPMC.
Zoals ik het nu zie zou ik voor iedere printer een GPO moeten maken en die laten toepassen op basis van groepslidmaatschap. Dat zou minder handig zijn dan het huidige systeem. Daarin koppelt het loginscript alle printers op basis van printergroepen die aan een machine hangen.

[ Voor 9% gewijzigd door magic_nl op 07-11-2011 14:56 ]

Leef vandaag! Wat gisteren gebeurde is voorbij, en wat morgen komt zien we dan wel weer
Systeemspecificaties


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

magic_nl schreef op maandag 07 november 2011 @ 14:54:
[...]
Zoals ik het nu zie zou ik voor iedere printer een GPO moeten maken en die laten toepassen op basis van groepslidmaatschap.
:?
Gewoon een group policy aanmaken, binnen de "preferences / voorkeuren" de printers defineren en dan per printer middels item-level targeting regelen welke werkplek welke printer krijgt. klik voor uitleg klik2 :)

[ Voor 6% gewijzigd door Question Mark op 07-11-2011 15:08 ]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • sanfranjake
  • Registratie: April 2003
  • Niet online

sanfranjake

Computers can do that?

(overleden)
Printers toewijzen via afdrukbeheer is idd wat anders dan Question Mark roept. Ik doe dit tegenwoordig ook exclusief met Gp prefs... de tijd dat Windows 2000 nog met regelmaat bij nieuwe implementaties voorbij kwam is wel een beetje voorbij :P

Mijn spoorwegfotografie
Somda - Voor en door treinenspotters


  • Semt-x
  • Registratie: September 2002
  • Laatst online: 29-11 14:41
[GPP]
Hoewel ik het gebruik van Group Policy Preferences (GPP) toejuich, zou ik niet meteen GPP inzetten om alleen die printer te koppelen.
Ik zou een onderzoek doen naar het vervangen van het login script door GPP en bij positief onderzoek resultaat pas alles omzetten. als je Adhoc deze functie met GPP maakt, kan het zomaar zijn dat je voor elke type instelling een nieuwe methode introduceert. (login script, GPP, GPO, wksstartscript etc).
Gebruik het minimale aantal methodes.

[VBS]
Als je een Distinguished Name (DN) van een werkstation uit AD wil, ik zou het volgende doen:
code:
1
2
Set objSysInfo = CreateObject("ADSystemInfo")
Wscript.Echo  objSysInfo.ComputerName

Deze methode is domein en OU onafhankelijk.

Het stukje code dat je plakt geeft een incomplete DN ( mist "CN=" voor je computernaam.)
verder kan ik niet inschatten hoe je verder die DN gebruikt.

h2h
Sem

  • magic_nl
  • Registratie: Augustus 2000
  • Laatst online: 28-11 15:50

magic_nl

Met wat magie komt alles goed

Topicstarter
Semt-x schreef op maandag 07 november 2011 @ 15:40:
[GPP]
Hoewel ik het gebruik van Group Policy Preferences (GPP) toejuich, zou ik niet meteen GPP inzetten om alleen die printer te koppelen.
Ik zou een onderzoek doen naar het vervangen van het login script door GPP en bij positief onderzoek resultaat pas alles omzetten. als je Adhoc deze functie met GPP maakt, kan het zomaar zijn dat je voor elke type instelling een nieuwe methode introduceert. (login script, GPP, GPO, wksstartscript etc).
Gebruik het minimale aantal methodes.

[VBS]
Als je een Distinguished Name (DN) van een werkstation uit AD wil, ik zou het volgende doen:
code:
1
2
Set objSysInfo = CreateObject("ADSystemInfo")
Wscript.Echo  objSysInfo.ComputerName

Deze methode is domein en OU onafhankelijk.

Het stukje code dat je plakt geeft een incomplete DN ( mist "CN=" voor je computernaam.)
verder kan ik niet inschatten hoe je verder die DN gebruikt.

h2h
Sem
De code mist volgens mij niet de CN. Deze wordt ingevuld door de EnvString("COMPUTERNAME") te combineren met de OU informatie.
code:
1
strDN = EnvString("COMPUTERNAME") & ",OU=OU1,DC=Domain,DC=local"

Niet optimaal dus.
Resume voor mij de makkelijkste methode zou zijn jouw oplossing gebruiken om de variabele strDN te vullen. Nu nog zien hoe ik dat in mijn sub Mapprinters doe.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub MapPrinters()
    Const E_ADS_PROPERTY_NOT_FOUND  = "8000500D"
    
    strDN = EnvString("COMPUTERNAME") & ",OU=OU1,DC=Domain,DC=local"
    strPrintServerName = "Printserver"
    arrDefaultPrinters = Array("Printer1","Printer2")
    boolDefaultPrinterIsSet = False 
    Set objComputer = GetObject ("LDAP://CN=" & strDN)
    Set WshNetwork = CreateObject("WScript.Network")
    
    arrMemberOf = objComputer.GetEx("memberOf")     
    If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
        'WScript.Echo "The memberOf attribute is not set."
    Else    
        If NoDefaultPrinterChange(arrMemberOf) = True Then
            boolDefaultPrinterIsSet = True
        End If
            
        For Each Group In arrMemberOf
            strGroupName = CleanUp(Group)
            If UCase(Left(strGroupName, 3)) = "PR_" Then
                strPrinterName = Right (strGroupName, Len(strGroupName) - 3)
                For Each Printer In arrDefaultPrinters                  
                    If boolDefaultPrinterIsSet <> True Then
                        If strPrinterName = Printer Then
                            WshNetwork.AddWindowsPrinterConnection "\\" & strPrintServerName & "\" & strPrinterName
                            WshNetwork.SetDefaultPrinter "\\" & strPrintServerName & "\" & strPrinterName
                            boolDefaultPrinterIsSet = True
                        Else
                            WshNetwork.AddWindowsPrinterConnection "\\" & strPrintServerName & "\" & strPrinterName
                            WshNetwork.SetDefaultPrinter "\\" & strPrintServerName & "\" & strPrinterName                           
                        End If
                    Else
                        WshNetwork.AddWindowsPrinterConnection "\\" & strPrintServerName & "\" & strPrinterName
                    End If
                Next    
            End If
        Next
    End If
End Sub

Leef vandaag! Wat gisteren gebeurde is voorbij, en wat morgen komt zien we dan wel weer
Systeemspecificaties


  • Semt-x
  • Registratie: September 2002
  • Laatst online: 29-11 14:41
Die oude strDN wordt een beetje "ranzig" compleet gemaakt, door CN= er verderop voor te plakken
(Set objComputer = GetObject ("LDAP://CN=" & strDN).

Hoewel ik erg veel verbeterpunten zie (die code vind ik storend slecht.., advies aan meelezers: gebruik getoonde code NIET!) zal ik me tot het functionele vraagstuk beperken, en alleen code opleveren die niet verstoord wordt door een andere OU structuur.

vervang regel 4 t/m 9 met dit:
code:
1
2
3
4
5
6
    strPrintServerName = "Printserver"
    arrDefaultPrinters = Array("Printer1","Printer2")
    boolDefaultPrinterIsSet = False 
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objComputer = GetObject ("LDAP://" & objSysInfo.ComputerName)
    Set WshNetwork = CreateObject("WScript.Network")


Dan is het bepalen van je AD computer object Domein en OU onafhankelijk.

h2h
Sem

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 30-11 15:27

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Semt-x schreef op maandag 07 november 2011 @ 15:40:
[GPP]
Ik zou een onderzoek doen naar het vervangen van het login script door GPP en bij positief onderzoek resultaat pas alles omzetten.
....
Gebruik het minimale aantal methodes.
Eens en eens. :)

Maar aangezien TS al aangeeft zich inhoudelijk niet echt te kunnen redden met de huidige oplossing en het feit dat de huidige manier toch al aangepast moet gaan worden is dit wel het moment om over te stappen naar een "moderne standaard".

[/offtopic]

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • magic_nl
  • Registratie: Augustus 2000
  • Laatst online: 28-11 15:50

magic_nl

Met wat magie komt alles goed

Topicstarter
[quote]Semt-x schreef op maandag 07 november 2011 @ 18:28:
vervang regel 4 t/m 9 met dit:
code:
1
2
3
4
5
6
    strPrintServerName = "Printserver"
    arrDefaultPrinters = Array("Printer1","Printer2")
    boolDefaultPrinterIsSet = False 
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objComputer = GetObject ("LDAP://" & objSysInfo.ComputerName)
    Set WshNetwork = CreateObject("WScript.Network")

/quote]

Zojuist het script aangepast en getest op zowel Windows 7 als XP. Werkt in beide gevallen perfect.
Dank voor de hulp.

Leef vandaag! Wat gisteren gebeurde is voorbij, en wat morgen komt zien we dan wel weer
Systeemspecificaties

Pagina: 1