koluschkib
Goto Top

Logfile erstellen mit VBS

Hallo Admin-Genossen

habt da ein problem mit erstellen einer *.Log Datei

Ich hab ein Script was User und Gruppen im AD anlegt, die benötigten Infos liest das script aus einer user.csv datei aus.

Hab aber nun folgendes Problem. Das script legt alles brav an, doch der Text der in der Logdatei steht, ist leider der Falsche.

Option Explicit

'Variablen des gesamten Scripts werden hier ind iesen 3 Zeilen Deklariert  
Dim OU, objDomain, objOU, objUser, objGroup, WsHShell, CMD
Dim fso, f, Zeile, Feld, Vorname, Nachname, Abteilung, i, Passwort, Abfall, objFile, logFile, errFile, logText
Dim objFolder, strComputer, objWMIService, objNewShare, errReturn, PermL1
Const ForAppending = 8


'Organisationseinheit im AD wird gesetzt (benutzer)  
OU = "cn=users,dc=testad,dc=int"  
Set objOU = GetObject("LDAP://" & OU)  

'Werte für die Freigegebenen Ordner, gesharte Dateien sowie Maximal Anzahl gleichzeitiger Zugriffe  
Dim File_Share
File_Share = 0
Dim MAXIMUM_CONNECTIONS
MAXIMUM_CONNECTIONS = 25


'Verbidnung zum WMI wird hergestellt (Root-Verzeichnis)  
strComputer = "."  
Set objWMIService = GetObject("winmgmts:" _  
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set objNewShare = objWMIService.Get("Win32_Share")  

'Die Datei mit allen Benutzerangaben wird geladen  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set f = fso.OpenTextFile("c:\user.csv",1,0)  


Set errfile = fso.CreateTextFile("C:\Error.log")  
errfile.Close

'1.Zeile der .csv Datei wird Übersprungen  
Abfall = f.Readline   ' also die 1. Zeile    
Do while not f.AtEndOfStream       'statt AtEndOfLine  

'Die Einzelnen Felder der .csv Datei werden gesetzt und zugeordnet  
Zeile = f.readLine 
Feld = split(Zeile,";")  
Vorname = Feld(0)
Nachname = Feld(1)
Abteilung = Feld(2)
'        Gruppen werden in Schleife direkt angesprochen  
'Gruppe1 = Feld(3)  
'Gruppe2 = Feld(4)  
'Gruppe3 = Feld(5)  
'Gruppe4 = Feld(6)  
'Gruppe5 = Feld(7)  


'Variable zu Erstellung des Anmeldepassworts für die 1. Anmeldung   
Passwort = left(Vorname,3)&left(Nachname,2)&"1234%"  
Passwort = LCase(passwort)

Set logfile = fso.CreateTextFile("C:\" &Nachname&".log")  
logfile.Close

'Infos für das AD, die dem User in den AD EIgenschaften zugeordnet werden  
Set objUser = objOU.Create("user", "CN=" & Vorname & " " & Nachname)  
objUser.Put "sAMAccountName", Nachname  
objUser.Put "displayName", Vorname & " " & Nachname  
objUser.Put "givenName", Vorname  
objUser.Put "sn", Nachname  
objUser.Put "description", Abteilung  
objUser.Put "userPrincipalName", left(Vorname,3) & left(nachname,2) & "@testAD.int"  
objUser.SetInfo
objUser.SetPassword Passwort
objUser.Put "userAccountControl", 544  
objUser.Put "pwdLastSet", 0  
objUser.SetInfo

Set logtext = fso.OpenTextFile _
("C:\"&Nachname&".log", ForAppending, True)  
'Log-Datei mit Text füllen  
logtext.WriteLine("Der benutzer " &Nachname& " wurde im AD angelegt!")  


'Die Function zur Erstellung der Gruppen aus Feld 3-7 wird aufgerufen und die Richtigen benutzer werden Zugeordnet  
For i = 3 To 7 'alle Gruppen bearbeiten  
If Feld(i) <> "" Then  
If GroupExists(Feld(i), objOU) Then
Set objGroup = GetObject("LDAP://cn=" & Feld(i) & "," & OU)  
Else
Set objGroup = objOU.Create("Group", "cn=" & Feld(i))  
objGroup.Put "sAMAccountName", Feld(i)  
objGroup.SetInfo
End If
objGroup.Add objUser.ADSPath
End If
Next

logtext.WriteLine("Der Benutzer ist Mitglied folgender Gruppen" &i)  

'Oberordner wird auf c:\ angelegt  
IF fso.FolderExists("C:\Freigaben") then  
         Set objFolder = fso.GetFolder("C:\Freigaben")  
ELSE
Set objFolder = fso.CreateFolder("C:\Freigaben")  
Wscript.Echo "Der Oberordner C:\Freigaben wurde angelegt! In Ihm befinden sich die Benutzerordner!"  
END IF

'Benutzer spezifischer Ordner wird angelegt  
IF fso.FolderExists("C:\Freigaben\" & Nachname) then  
         Msgbox ("Der Ordner mit dem Namen "&Nachname&" existiert bereits!")  
         Set objFolder = fso.GetFolder("C:\Freigaben\" & Nachname)  
ELSE
Set objFolder = fso.CreateFolder("C:\Freigaben\" & Nachname)  
END IF

errReturn = objNewShare.Create _
    ("C:\Freigaben\" & Nachname, ""&Nachname, File_Share, _  
    MAXIMUM_CONNECTIONS, "Benutzerordner")  

	'WSH Shell für die Erstellung der Zugriffsrechte wird Erstellt  
Set WshShell = WScript.CreateObject("WScript.Shell")     

'Ordnerzugriffe werden gesetzt (Admin= Voll, Inhaber= Voll)  
PermL1 = "Administratoren:F " & Nachname & ":F"    
CMD = "cmd /c echo j|cacls C:\Freigaben\" & Nachname & " /G " & PermL1  
WshShell.Run CMD, 0, 1
Loop

'Function für die Erstellung der Gruppen  
Function GroupExists(Group, OU)
'OU wird als Objekt übergeben; es interessieren nur die enthaltenen Gruppen  
OU.Filter = Array("group")  
'Default: Gruppe noch nicht vorhanden  
GroupExists = False
'Alle in der OU enthaltenen Gruppen durchgehen  
For Each objGroup in OU
    'klein geschriebenen Gruppennamen der betrachteten Gruppe  
    'mit klein geschriebenem übergebenen Gruppennamen vergleichen  
    If LCase(objGroup.sAMAccountName) = LCase(Group) Then
        'bei Übereinstimmung gibt es die Gruppe bereits ...  
        GroupExists = True
        '... und es müssen die weiteren Gruppen nicht mehr geprüft werden  
        Exit For
    End If
Next
End Function

logtext.Close

Der fehler passiert in der 94 Zeile. Ich will das in der Logfile geschrieben wird, in welche Gruppen der Benutzer hinzugefügt wurde.
Aber es klappt nicht so ganz, In der Datei Steht drin: Der benutzer ist Mitglied folgener Gruppen "8"
Wieso er 8 nimmt ist mir nicht so ganz klar, da "i= Feld(3to7) ist.
Vielleicht kann mir einer sagen wo mein Denkfehler ist und mir ggf. ne Hilfestellungen geben kann.

Über Tipps wäre ich dankbar

Gruß und Danke

koluschkiB

Content-ID: 144470

Url: https://administrator.de/contentid/144470

Ausgedruckt am: 15.11.2024 um 15:11 Uhr

Snowman25
Snowman25 09.06.2010 um 13:09:28 Uhr
Goto Top
Hallo @koluschkiB,

i ist bloß der Zähler deiner Schleife. Du brauchst hier aber den Inhalt des Feld()-Arrays

Gruß
Snow
koluschkiB
koluschkiB 09.06.2010 um 13:24:21 Uhr
Goto Top
Hey Snowman,

hab schon ne lösung für das Problem gefunden:

logtext.WriteLine("Der Benutzer ist Mitglied folgender Gruppen: " "1." &Feld(3) &"2. " &Feld(4) &"3. " &Feld(5) &"4. " &Feld(6) &"5. " &Feld(7))  

Aber Danke für deine Hilfe!

Gruß

koluschkiB
Snowman25
Snowman25 09.06.2010 um 13:28:58 Uhr
Goto Top
genau das hab ich doch gesagt oO
koluschkiB
koluschkiB 09.06.2010 um 13:44:44 Uhr
Goto Top
Ja face-smile

manchmal helfen kleine Tippps um den Wald zu sehen face-wink

Danke und Gruß

koluschkiB