Hunduster Geschrieben 7. November 2008 Geschrieben 7. November 2008 (bearbeitet) Hi zusammen, ich habe ein Script in VBS geschrieben, welches für eine Terminal Server Farm gedacht ist. Es gibt eine obergeordnete OU in der weitere OU's liegen. Die "Chef OU" verteilt an alle anderen über die AD ein Laufwerk P: Unsere Kunden arbeiten mit einer Software von uns welche auf diesem Laufwerk liegt. Bei der alten Batch Datei kam es öfters vor, dass sie schneller lief als das Laufwerkmapping was nicht so cool war, da die Batch einen Reg Eintrag aufrief der in dem Laufwerk lag. Ich habe nun die Regeinträge im VBS definiert und auch bestimmt, dass sie nur ausgeführt werden, wenn das Laufwerk P: verfügbar ist da halt auch dort die Software liegt. Nun muss ich noch einen Weg finden, im Script bestimmte Reg Einträge nach OU zuzuweisen. Also eben bestimmte Reg Einträge für bestimmte OUs. Ich habe sowas noch nie gemacht und auch noch nicht im inet gefunden. Hat vllt jemand von Euch solch eine Abfrage und Zuweisung zur Hand (if & then)? Bisheriges Script: 'Folgende Option meldet unter anderem nur Variablen, wenn diese verwendet, aber nicht vorher deklariert wurden! option explicit 'Sicherheitshalber mal einen Timeout für das Skript setzen WScript.Timeout = 60 'Aufruf der Routine... call MapReg() '...und Ihre direkte Implementation. public sub MapReg() 'Dimensionieren der lokalen Variablen... dim datUntil, objFSO, objWSH, objNET '...und eine maximale Laufzeit für die Schleifenbehandlung definieren (manuelles Timeout, hier: in 30 Sekunden ab jetzt) datUntil = dateadd("s", 30, now()) 'Objektinstanzen für die Helper beschaffen. set objFSO = WScript.CreateObject("Scripting.FileSystemObject") set objWSH = WScript.CreateObject("WScript.Shell") set objNET = WScript.CreateObject("WScript.Network") 'Fehlerbehandlung deaktiveren on error resume next 'Wenn schon zufällig P: schon belegt ist, geben wir es erstmal wieder frei... if objFSO.DriveExists("P:") then objNET.RemoveNetworkDrive "P:", true, true '...und legen es auf unseren Pfad fest! objNET.MapNetworkDrive "P:", "\\Server\Pfad" 'Wenn bis hierhin kein Fehler passiert ist, können wir getrost die Schleife betreten. if err.number = 0 then 'Starte Schleife... do if objFSO.DriveExists("P:") then 'Das Laufwerk schein existent, also schnell mal den Basispfad in der Registry gesetzt... dim strBaseKey strBaseKey = "HKEY_CURRENT_USER\Software\Schlüssel\" '...und relativ dazu dann die Einträge gemacht! objWSH.RegWrite strBaseKey & "Installation\Count", "32", "REG_SZ" objWSH.RegWrite strBaseKey & "Installation\Anwender0", "Serial & Company", "REG_SZ" objWSH.RegWrite strBaseKey & "Installation\Anwender1", "Key & Company", "REG_SZ" objWSH.RegWrite strBaseKey & "Login\Project0001\DataSource", "Citrix", "REG_SZ" objWSH.RegWrite strBaseKey & "Login\Project0001\User", "Toni Test", "REG_SZ" 'Schnell noch aufräumen... set objFSO = nothing set objWSH = nothing set objNET = nothing '...und auf dem kürzesten Weg aus der Prozedur springen - Fertig! =) exit sub end if '...scheinbar war das Laufwerk noch nicht eingehängt, also warten wir nochmal eine halbe Sekunde... WScript.sleep cint(500) '...und versuchen es einfach nochmal, solange die Grenzzeit nicht überschritten wurde loop while now() < datUntil end if 'Fehlerbehandlung wieder aktiveren on error goto 0 'Aufräumen set objFSO = nothing set objWSH = nothing set objNET = nothing end sub Bearbeitet 7. November 2008 von Hunduster Zitieren
Eratum Geschrieben 7. November 2008 Geschrieben 7. November 2008 Set WshShell_CMD = WScript.CreateObject("WScript.Shell") Set OU_String_exec = WshShell_CMD.Exec("dsquery computer domainroot -name %ComputerName% -gc") OU_String = OU_String_exec.StdOut.ReadAll So bekommst du z.B. den FQDN des Rechners ausgegeben. Den String kannst du ja nach belieben zerpflücken... Gibt sicher noch eine elegantere Lösung, dass war aber des erste was mir eingefallen ist (bzw. was ich aus meiner eigenen Sammlung gegraben habe ^^). MfG erratum Zitieren
Hunduster Geschrieben 7. November 2008 Autor Geschrieben 7. November 2008 So bekommst du z.B. den FQDN des Rechners ausgegeben. Den String kannst du ja nach belieben zerpflücken... Gibt sicher noch eine elegantere Lösung, dass war aber des erste was mir eingefallen ist (bzw. was ich aus meiner eigenen Sammlung gegraben habe ^^). Ok aber dadurch habe ich doch "nur" die Ausgabe des FQDN aber keine automatische Zuweisung von Reg Einträgen. Ich dachte an sowas: strUser = "LDAP://" & CreateObject("ADSystemInfo").UserName If GetObject("LDAP://CN=Gruppe1,OU=EineOU,DC=fima,DC=local").IsMember(strUser) Then WScript.Echo "In Gruppe 1" Aber ich weiß dann nicht weiter also wie ich "In Gruppe 1" definiere um das Script zu übergeben. Zitieren
Eratum Geschrieben 7. November 2008 Geschrieben 7. November 2008 Set WshShell_CMD = WScript.CreateObject("WScript.Shell") Set OU_String_exec = WshShell_CMD.Exec("dsquery computer domainroot -name %ComputerName% -gc") OU_String = OU_String_exec.StdOut.ReadAll Im FQDN hast doch alle Informationen die du brauchst. Die Rückgabe sieht ja in etwa so aus: "CN=Computer1,OU=OrgEinhXYZ,OU=OberOrg,DC=freaky,DC=com" Dann durchsuche doch den zurückgegebenen String: If instr(OU_string,"OrgEinhXYZ") then [put in Registryeinträge here] .... end if Oder ist das nicht das, was du suchst? Zitieren
Hunduster Geschrieben 7. November 2008 Autor Geschrieben 7. November 2008 Doch aber er liest sie anscheinend bei mir nicht aus zumindest schreibt er nichts in die Registry. Die DOS Box kommt kurz hoch und das wars. Zitieren
Eratum Geschrieben 7. November 2008 Geschrieben 7. November 2008 Wie testest du das ganze denn? Für doch das Skript mal in ner CMD aus und schau ob du eine Fehlermeldung bekommst ^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.